<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    
    <title>维燕的数字花园</title>
    <description>记录 Bio+IT 相关知识，沉淀生活，记录点滴。</description>
    <link>https://shenwy.com/</link>
    <atom:link href="https://shenwy.com/rss.xml" rel="self" type="application/rss+xml" />

    
    <managingEditor>Steven Shum</managingEditor>
    <docs>https://github.com/shenweiyan/Digital-Garden/</docs>
    <language>en</language>

    
    <pubDate>Thu, 05 Mar 2026 10:40:41 -0000</pubDate>
    <lastBuildDate>Thu, 05 Mar 2026 10:40:41 -0000</lastBuildDate>
    <ttl>1440</ttl>

    
    <generator>MkDocs RSS plugin - v1.17.9</generator>

    
    
    <image>
      <url>https://upload.wikimedia.org/wikipedia/commons/thumb/4/43/Feed-icon.svg/128px-Feed-icon.svg.png</url>
      <title>维燕的数字花园</title>
      <link>https://shenwy.com/</link>
    </image>
    

    
    
    <item>
      <title>用 Docker 来解决 LinearDesign 的 GLIBC 版本过低问题</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;h2 id=&#34;lineardesign-介绍&#34;&gt;LinearDesign 介绍&lt;a class=&#34;headerlink&#34; href=&#34;#lineardesign-介绍&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;LinearDesign 是一款用于优化 mRNA 设计的软件，旨在提高 mRNA 的稳定性和免疫原性。该项目由 He Zhang、Liang Zhang、Ang Lin 等研究人员开发，并已在 Nature杂志上发表相关研究成果。LinearDesign 通过算法优化 mRNA 序列，使其在保持高翻译效率的同时，具有更好的结构稳定性。&lt;/p&gt;
&lt;p&gt;GitHub 地址：&lt;a href=&#34;https://github.com/LinearDesignSoftware/LinearDesign&#34;&gt;https://github.com/LinearDesignSoftware/LinearDesign&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;项目快速启动&#34;&gt;项目快速启动&lt;a class=&#34;headerlink&#34; href=&#34;#项目快速启动&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;确保你的系统满足以下依赖要求：     &lt;br /&gt;
- Clang 11.0.0 或更高版本，或 GCC 4.8.5 或更高版本             &lt;br /&gt;
- Python 2.7        &lt;br /&gt;
- GLIBC≥2.29          &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;glibc (GNU C Library) 是 GNU 发布的 C 标准运行库，是 Linux 系统中最底层、最核心的 API，几乎所有应用软件都依赖它。它主要负责封装 Linux 内核系统调用，并提供内存管理、字符串操作、文件操作等标准函数。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;在 Ubuntu 18.04.6 LTS 中，GLIBC 最高只有 2.27，在不升级系统更新 GLIBC 风险太大，因此可以考虑用 Docker 的方式来解决 LinearDesign 的 GLIBC 版本过低问题。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;h2 id=&#34;构建-lineardesign-的-docker-镜像&#34;&gt;构建 LinearDesign 的 Docker 镜像&lt;a class=&#34;headerlink&#34; href=&#34;#构建-lineardesign-的-docker-镜像&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&#34;编写-dockerfile&#34;&gt;编写 Dockerfile&lt;a class=&#34;headerlink&#34; href=&#34;#编写-dockerfile&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# GUESSING....&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# dfimage shenweiyan/lineardesign:1.0&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# WARNING: The requested image&amp;#39;s platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# FROM shenweiyan/lineardesign:1.0&lt;/span&gt;

&lt;span class=&#34;l l-Scalar l-Scalar-Plain&#34;&gt;FROM ubuntu:jammy-20230425&lt;/span&gt;

&lt;span class=&#34;l l-Scalar l-Scalar-Plain&#34;&gt;ARG RELEASE&lt;/span&gt;
&lt;span class=&#34;l l-Scalar l-Scalar-Plain&#34;&gt;ARG LAUNCHPAD_BUILD_ARCH&lt;/span&gt;
&lt;span class=&#34;l l-Scalar l-Scalar-Plain&#34;&gt;LABEL org.opencontainers.image.ref.name=ubuntu&lt;/span&gt;
&lt;span class=&#34;l l-Scalar l-Scalar-Plain&#34;&gt;LABEL org.opencontainers.image.version=22.04&lt;/span&gt;
&lt;span class=&#34;l l-Scalar l-Scalar-Plain&#34;&gt;# ADD file:2fc6364d149eccc7f94ead482a0dcf24b0e44cc0d00ac6a2c1797776153e9608 in /&lt;/span&gt;

&lt;span class=&#34;l l-Scalar l-Scalar-Plain&#34;&gt;RUN apt-get update &amp;amp;&amp;amp; apt-get install -y git&lt;/span&gt;

&lt;span class=&#34;l l-Scalar l-Scalar-Plain&#34;&gt;# Need to add Python2 (should be 2.7.18)&lt;/span&gt;
&lt;span class=&#34;l l-Scalar l-Scalar-Plain&#34;&gt;# https://linuxconfig.org/install-python-2-on-ubuntu-22-04-jammy-jellyfish-linux&lt;/span&gt;

&lt;span class=&#34;l l-Scalar l-Scalar-Plain&#34;&gt;RUN apt-get install -y python2&lt;/span&gt;

&lt;span class=&#34;l l-Scalar l-Scalar-Plain&#34;&gt;# Need to add GCC&lt;/span&gt;
&lt;span class=&#34;l l-Scalar l-Scalar-Plain&#34;&gt;# https://linuxconfig.org/how-to-install-gcc-the-c-compiler-on-ubuntu-22-04-lts-jammy-jellyfish-linux&lt;/span&gt;

&lt;span class=&#34;l l-Scalar l-Scalar-Plain&#34;&gt;RUN apt-get install -y build-essential&lt;/span&gt;

&lt;span class=&#34;l l-Scalar l-Scalar-Plain&#34;&gt;RUN apt-get clean&lt;/span&gt;

&lt;span class=&#34;l l-Scalar l-Scalar-Plain&#34;&gt;RUN git clone https://gitcode.com/bio-mirrors/LinearDesign.git /lineardesign&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# buildkit&lt;/span&gt;

&lt;span class=&#34;l l-Scalar l-Scalar-Plain&#34;&gt;RUN cd /lineardesign &amp;amp;&amp;amp; make&lt;/span&gt;

&lt;span class=&#34;l l-Scalar l-Scalar-Plain&#34;&gt;RUN mkdir /mnt/data&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;             &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# buildkit&lt;/span&gt;
&lt;span class=&#34;l l-Scalar l-Scalar-Plain&#34;&gt;WORKDIR /lineardesign&lt;/span&gt;
&lt;span class=&#34;l l-Scalar l-Scalar-Plain&#34;&gt;VOLUME [/mnt/data]&lt;/span&gt;
&lt;span class=&#34;l l-Scalar l-Scalar-Plain&#34;&gt;CMD [&amp;quot;/bin/bash&amp;quot;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;构建镜像&#34;&gt;构建镜像&lt;a class=&#34;headerlink&#34; href=&#34;#构建镜像&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;docker&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;build&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-t&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;lineardesign:1.0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;img alt=&#34;docker-build-lineardesign&#34; src=&#34;https://gi.weiyan.tech/2026/03/docker-build-lineardesign.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;查看镜像&#34;&gt;查看镜像&lt;a class=&#34;headerlink&#34; href=&#34;#查看镜像&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;docker&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;images
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;运行容器&#34;&gt;运行容器&lt;a class=&#34;headerlink&#34; href=&#34;#运行容器&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;可以使用下面的方式开启 docker 容器。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;交互方式
   &lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;docker&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;run&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-it&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-v&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/home/steven/data:/data&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;lineardesign:1.0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bash
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
   这种方式，通过 &lt;code&gt;exit&lt;/code&gt; 退出容器后，容器被终止，可以通过 &lt;code&gt;docker ps -a&lt;/code&gt; 来看终止状态的容器，可以通过 &lt;code&gt;docker rm &amp;lt;CONTAINER ID&amp;gt;&lt;/code&gt; 删除终止状态的容器。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Daemon 方式，守护态运行
   &lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;docker&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;run&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-d&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-it&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-v&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/home/steven/data:/data&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;lineardesign:1.0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bash
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
   守护态运行运行的容器，在容器内 &lt;code&gt;exit&lt;/code&gt; 退出后，容器不会终止，可以使用 &lt;code&gt;docker exec -it &amp;lt;CONTAINER ID&amp;gt; bash&lt;/code&gt; 再次进入容器。    &lt;br /&gt;
   这种方式可以让软件作为长时间服务运行，可通过 &lt;code&gt;ocker stop &amp;lt;CONTAINER ID&amp;gt;&lt;/code&gt;终止容器，通过 &lt;code&gt;ocker rm &amp;lt;CONTAINER ID&amp;gt;&lt;/code&gt;删除终止状态的容器。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;将本地镜像推送到远程仓库&#34;&gt;将本地镜像推送到远程仓库&lt;a class=&#34;headerlink&#34; href=&#34;#将本地镜像推送到远程仓库&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;这是指把我们构建好的镜像 push 到 Docker Hub、阿里云 ACR、Harbor 等远程 Registry，这里我们 push 到 Docker Hub。&lt;/p&gt;
&lt;h3 id=&#34;登录远程仓库&#34;&gt;登录远程仓库&lt;a class=&#34;headerlink&#34; href=&#34;#登录远程仓库&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;首次登录会提示输入用户名/密码或 Access Token。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# Docker Hub&lt;/span&gt;
docker&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;login

&lt;span class=&#34;c1&#34;&gt;# 阿里云 ACR&lt;/span&gt;
docker&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;login&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;registry.cn-hangzhou.aliyuncs.com

&lt;span class=&#34;c1&#34;&gt;# 私有 Harbor&lt;/span&gt;
docker&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;login&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;harbor.yourcompany.com
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;为镜像打标签&#34;&gt;为镜像打标签&lt;a class=&#34;headerlink&#34; href=&#34;#为镜像打标签&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;远程仓库要求镜像名称格式为：&lt;code&gt;&amp;lt;registry&amp;gt;/&amp;lt;namespace&amp;gt;/&amp;lt;repo&amp;gt;:&amp;lt;tag&amp;gt;&lt;/code&gt;。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 推送到 Docker Hub（用户名：shenweiyan）&lt;/span&gt;
docker&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tag&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;lineardesign:1.0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;shenweiyan/lineardesign:1.0

&lt;span class=&#34;c1&#34;&gt;# 推送到阿里云 ACR&lt;/span&gt;
docker&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tag&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;lineardesign:1.0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;registry.cn-hangzhou.aliyuncs.com/shen-lab/lineardesign:1.0
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;推送镜像&#34;&gt;推送镜像&lt;a class=&#34;headerlink&#34; href=&#34;#推送镜像&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 推送到 Docker Hub&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;docker&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;push&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;shenweiyan/lineardesign:1.0
The&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;push&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;refers&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;repository&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;docker.io/shenweiyan/lineardesign&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
5f70bf18a086:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Pushed
f307a02003d0:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Pushed
67721cd40298:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Pushed
&lt;span class=&#34;m&#34;&gt;593672012667&lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Pushed
52bfb0e9f36b:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Pushed
5dd52f89c1a9:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Pushed
8fb8ac00d103:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Pushed
c90d82bb7e29:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Pushed
b8a36d10656a:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Pushed
&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.0:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;digest:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sha256:aa43b247010b964a9b3faf434409463df12002bd9ecf03b1d41bf55f74df988e&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;size:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2204&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# 推送到阿里云&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;docker&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;push&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;registry.cn-hangzhou.aliyuncs.com/shen-lab/lineardesign:1.0
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;验证推送&#34;&gt;验证推送&lt;a class=&#34;headerlink&#34; href=&#34;#验证推送&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 查看远程仓库（网页或 CLI）&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# 或拉取测试：&lt;/span&gt;
docker&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pull&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;shenweiyan/lineardesign:1.0
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;img alt=&#34;lineardesign-shenweiyan&#34; src=&#34;https://gi.weiyan.tech/2026/03/lineardesign-shenweiyan.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;run-docker-lineardesign&#34; src=&#34;https://gi.weiyan.tech/2026/03/run-docker-lineardesign.png&#34; /&gt;&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;179&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/tech/discussions-179/</link>
      <pubDate>Tue, 03 Mar 2026 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/tech/discussions-179/</guid>
      
    </item>
    
    <item>
      <title>丙午马年 2026 春节</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;丙午年是中国传统干支纪年体系中的第 43 个组合，以天干“丙”与地支“午”相配构成双火格局，对应生肖马，故称火马年或赤马年，每 60 年循环出现于 1906、1966、2026 等年份。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;2026 年的春节转眼就过去了，还在初六的时候就已经感受到即将要上班的无力和抗拒。&lt;/p&gt;
&lt;h2 id=&#34;回家越来越方便&#34;&gt;回家越来越方便&lt;a class=&#34;headerlink&#34; href=&#34;#回家越来越方便&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;和往年不一样的是，今年的回老家选择高铁+顺风车的方式。提前一周的时间成功候补了一家三口的三张高铁票，加上顺风车到家门的 1.5H 车程，全程 4 个小时把今年回家的体验感直接提升了好几个档次 —— 终于再也不用担心像往年一样的堵堵堵了！&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;xintang-china-railway&#34; src=&#34;https://gi.weiyan.tech/2026/02/xintang-china-railway.jpg&#34; /&gt;&lt;/p&gt;
&lt;p&gt;大潮收费站（S26中阳信高速出口）无疑是今年回家，在交通方面最大的惊喜之一，极大的提升了从老家到进出市区、走亲访友的体验，第一次真真切切感受到了高铁修道家门口所带来的便捷和幸福感。&lt;/p&gt;
&lt;h2 id=&#34;年味&#34;&gt;年味&lt;a class=&#34;headerlink&#34; href=&#34;#年味&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;其实快乐和年味一直都有，只是换了一批人去感受。人长大了，都各有各的家庭需要兼顾，过年也不例外，这样子相聚在一起的时间也就更少了。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;不要动不动就说，现在过年没有年味了，没有小时候的乐趣了。快乐和年味一直都有，只是自从你接替了父母的角色，担起了生活的重担，过年的快乐就不再属于你了。&lt;/p&gt;
&lt;p&gt;随着年龄的增长，你从看烟花变成放烟花，从吃年夜饭变为做年夜饭，你不再是曾经的那个少年，你已经成为放烟花给孩子看的人了，所以你要什么年味，你已经不是主角了。你会发现过年最重要的，是让你身边的人感受过年的快乐。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img alt=&#34;new-year-2026-1&#34; src=&#34;https://gi.weiyan.tech/2026/02/new-year-2026-1.webp&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;new-year-2026-4&#34; src=&#34;https://gi.weiyan.tech/2026/02/new-year-2026-4.webp&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;失落&#34;&gt;失落&lt;a class=&#34;headerlink&#34; href=&#34;#失落&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;为什么每年大年初一的下午，会有一种莫名的失落感？&lt;/p&gt;
&lt;p&gt;因为过年的真正意义，是在年前十五天左右，是在过年回家的路上，是在除夕前一天晚上。&lt;/p&gt;
&lt;p&gt;一旦过了年初一初二就没意思了。古人讲乐在将至，而非已至。人总是在无限接近幸福的时候最幸福，就像周五的下午永远比周末更让人开心。即将拥有时，期待的感觉永远比拥有更快。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;new-year-2026-2&#34; src=&#34;https://gi.weiyan.tech/2026/02/new-year-2026-2.webp&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;new-year-2026-3&#34; src=&#34;https://gi.weiyan.tech/2026/02/new-year-2026-3.webp&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;不一样的变化&#34;&gt;不一样的变化&lt;a class=&#34;headerlink&#34; href=&#34;#不一样的变化&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;在知乎看到 《&lt;a href=&#34;https://zhuanlan.zhihu.com/p/2008311689326653721&#34;&gt;回家过年发现今年过年的10大新变化现象&lt;/a&gt;》 这一篇文章，有几点的确感触很深。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;往年回来过年的人要初六初七才开始陆陆续续出门，今年才初四村里就看不到什么人了。&lt;/li&gt;
&lt;li&gt;基本没有人组织同学聚会了，就算有，绝大部分人也不参与了，顶多几个玩得好的私下聚聚。&lt;/li&gt;
&lt;li&gt;大家好像进入了低欲望阶段，年夜饭一大桌就意思了几口，红包收着也就收着了，春晚是不想看的，和同辈聊聊天、打打牌也很无聊，只想回家睡大觉，门根本不想出，旅游更是没兴趣，只想爆睡到初八。&lt;/li&gt;
&lt;li&gt;各个微信群都不发红包了，好像大家都商量好了，让彼此过个没有负担的年，你不打扰我，我也不麻烦你。&lt;/li&gt;
&lt;li&gt;放烟花的，放大炮仗的很少，鞭炮声也变小时间变短了。&lt;/li&gt;
&lt;li&gt;时间好像开了二倍速、三倍速，一晃几天就过完了，还没来得及品味其中的滋味，又将踏上漂泊的行程，过个年像做了场梦，该醒了。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;祝福&#34;&gt;祝福&lt;a class=&#34;headerlink&#34; href=&#34;#祝福&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;人们用 300 多天的勤劳换来了 5-6 天的热闹，团聚，欢乐，吵闹，这一切过后的安静更为震耳欲聋。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;hometown-stars&#34; src=&#34;https://gi.weiyan.tech/2026/02/hometown-stars.webp&#34; /&gt;&lt;/p&gt;
&lt;p&gt;2026，烟火向星辰，愿新的一年，所愿皆成真，我们越来越好，越来越顺。&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;178&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-178/</link>
      <pubDate>Mon, 23 Feb 2026 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-178/</guid>
      
    </item>
    
    <item>
      <title>我的博客图床新方案 R2-Explorer</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;&lt;a href=&#34;https://shenwy.com/&#34;&gt;博客站点&lt;/a&gt; 图床的问题，&lt;a href=&#34;https://shenwy.com/blog/discussions-62/&#34;&gt;纠结了很久&lt;/a&gt;，也一度以为很难会找到一个自己满意的 Pages 工具。但幸运的是，2025 年 12 月时候看到了 &lt;a href=&#34;https://github.com/G4brym/R2-Explorer&#34;&gt;R2-Explorer&lt;/a&gt; 这个基于 Worker 的 Cloudflare R2 存储管理工具，部署完成后一番体验下来，发现这就是我一直要找的图床。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;r2-explorer-live-demo&#34; src=&#34;https://gi.weiyan.tech/2026/02/r2-explorer-live-demo.png&#34; /&gt;&lt;/p&gt;
&lt;!-- more --&gt;

&lt;h2 id=&#34;在线访问&#34;&gt;在线访问&lt;a class=&#34;headerlink&#34; href=&#34;#在线访问&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;首先，它是基于 GitHub Actions 部署到 Cloudflare 的 Workers 边缘计算平台上，通过绑定域名提供基于网页的在线访问。&lt;/p&gt;
&lt;h2 id=&#34;身份验证&#34;&gt;身份验证&lt;a class=&#34;headerlink&#34; href=&#34;#身份验证&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;其次，它提供了基本的身份验证支持，可以通过配置 GitHub Secrets and variables 实现用户名、密码登录。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;R2EXPLORER_CONFIG =&amp;gt; { readonly: false, basicAuth: { username: &#39;shenwy&#39;, password: &#39;123456&#39; }, }&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34; r2-explorer-sign-in&#34; src=&#34;https://gi.weiyan.tech/2026/02/r2-explorer-sign-in.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;文件管理&#34;&gt;文件管理&lt;a class=&#34;headerlink&#34; href=&#34;#文件管理&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;支持的文件管理包括：
- 拖放式文件上传
- 文件夹的创建和组织
- 大文件分段上传
- 右键单击上下文菜单可查看高级选项
- HTTP/自定义元数据编辑
- &lt;strong&gt;可共享链接&lt;/strong&gt; - 创建安全的公开文件 URL，可选择设置密码保护、过期时间和下载次数限制&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;r2-explorer-manage&#34; src=&#34;https://gi.weiyan.tech/2026/02/r2-explorer-manage.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/G4brym/R2-Explorer/issues/51&#34;&gt;复制图片的直接链接&lt;/a&gt; 的功能目前也已经支持，不过个人测试发现还是&lt;a href=&#34;https://github.com/G4brym/R2-Explorer/issues/120&#34;&gt;有一些问题&lt;/a&gt;，未来可期。&lt;/p&gt;
&lt;h2 id=&#34;文件处理&#34;&gt;文件处理&lt;a class=&#34;headerlink&#34; href=&#34;#文件处理&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;支持 PDF 文档、图片、文本文件、Markdown、CSV 等，浏览器内文件预览。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;r2-explorer-pdf-preview&#34; src=&#34;https://gi.weiyan.tech/2026/02/r2-explorer-pdf-preview.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;部署与构建&#34;&gt;部署与构建&lt;a class=&#34;headerlink&#34; href=&#34;#部署与构建&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;虽然 &lt;a href=&#34;https://r2explorer.com/getting-started/creating-a-new-project&#34;&gt;官方文档&lt;/a&gt; 有很详细的部署和配置说明，但有一些细节并未给出。&lt;/p&gt;
&lt;h3 id=&#34;cloudflare-api-token&#34;&gt;Cloudflare API Token&lt;a class=&#34;headerlink&#34; href=&#34;#cloudflare-api-token&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;进入 &lt;a href=&#34;https://dash.cloudflare.com/profile/api-tokens&#34;&gt;https://dash.cloudflare.com/profile/api-tokens&lt;/a&gt; 申请 Cloudflare API Token，对应权限如下：
&lt;img alt=&#34;r2-explorer-api&#34; src=&#34;https://gi.weiyan.tech/2026/02/r2-explorer-api-token.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;github-secrets-and-variables&#34;&gt;GitHub Secrets and variables&lt;a class=&#34;headerlink&#34; href=&#34;#github-secrets-and-variables&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;配置 GitHub Secrets&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;CF_API_TOKEN =&amp;gt; Cloudflare API Token&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;配置 GitHub Variables&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;R2EXPLORER_WORKER_NAME =&amp;gt; gitimg-r2-explorer&lt;/code&gt;  &lt;/li&gt;
&lt;li&gt;&lt;code&gt;R2EXPLORER_CONFIG =&amp;gt; { readonly: false, basicAuth: { username: &#39;steven&#39;, password: &#39;123456&#39; }, }&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;R2EXPLORER_BUCKETS =&amp;gt; gitimg-r2-explorer:gitimg&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;R2EXPLORER_DOMAIN =&amp;gt; gg.weiyan.tech&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;最后&#34;&gt;最后&lt;a class=&#34;headerlink&#34; href=&#34;#最后&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;最后总得写点什么，搜索枯肠墨枯笔涩，只能说好好码字，努力生活！&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;177&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-177/</link>
      <pubDate>Sat, 07 Feb 2026 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-177/</guid>
      
    </item>
    
    <item>
      <title>年底迷思</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;此时此刻，距离 2026 年的春节还剩大约 2 周的时间，记录一下这段时间的一些糟心。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;&lt;a href=&#34;https://shenwy.com/blog/discussions-175/&#34;&gt;上一篇&lt;/a&gt; 文章的 X 项目，终于是走到了最后阶段，在年底这个节骨眼，细枝末叶的琐事一件接一件，压得喘不过气。&lt;/p&gt;
&lt;p&gt;加班好像成了常态。&lt;/p&gt;
&lt;p&gt;一月上旬频繁人事变动和压抑带来的躁动和不安，随着时间竟有种事过境迁，淡忘如水的错觉，时间静默地抚平一切波澜。&lt;/p&gt;
&lt;p&gt;心底依旧割裂，永远摸不到安全的边界。&lt;/p&gt;
&lt;p&gt;生活愧歉良多。&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;176&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-176/</link>
      <pubDate>Thu, 29 Jan 2026 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-176/</guid>
      
    </item>
    
    <item>
      <title>2025 致敬每一个人都在拼命地苟活着人</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;千言万语，无从下笔！&lt;/p&gt;
&lt;p&gt;2025 已接近尾声，在这个时间节点，也确实该对自己做一个阶段性的总结了，也顺便对我的来时路做个回顾。2025 对于个人来说，可以用几个关键词串起来：AI、社区开源、项目、户外徒步。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;h2 id=&#34;ai&#34;&gt;AI&lt;a class=&#34;headerlink&#34; href=&#34;#ai&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;2025 年初，DeepSeek 爆火让各大公司开始对 AI 趋之若鹜，蠢蠢欲动。对于我自己来说，最开始，完全是出于个人兴趣，陆陆续续对着 Ollama、OpenWebUI、AnythingLLM 一通瞎折腾，尝试 DeekSeek、Qwen 本地安装和 API 调用，大多都浅尝截止，只追求能用上能问答能简单推理，总有一种知其然不知其所以然的困惑。&lt;/p&gt;
&lt;p&gt;后来，细化到具体业务方向考虑，开始跟各大厂商接触，知道了 MaxKB、Dify、FastGPT，开始本地和线上的部署，开始流程编排的各种尝试，在 CPU 服务器上的尝试失败后，又被应用开发的权限、前端开发问题拦住，原地踏步。&lt;/p&gt;
&lt;p&gt;在生信方向，蛋白核酸的模型接触的越来越多，从老破旧的 RHEL 6 到 Ubuntu-22.04，虽然都是 CPU，但也总能勉勉强强跑起来解决一部分问题。随之而来的 HelixFold、AlphaFold3 这种在线工具也用的多了起来，也算是真真切切对 AI 有了一个相对直观的认识。
&lt;img alt=&#34;my-2025-ai&#34; src=&#34;https://gi.weiyan.tech/2025/12/my-2025-ai.webp&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;项目&#34;&gt;项目&lt;a class=&#34;headerlink&#34; href=&#34;#项目&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;姑且叫它 X 项目。&lt;/p&gt;
&lt;p&gt;这是一个机会与挑战并存的项目。从匆匆的接手到后面推进的每一步，都耗费了我极大的心力，为了这个项目有过太多的煎熬、彷徨和无法消解的压力，也曾一度让我对自己的职业生涯产生过怀疑。不管主观原因还是客观因素，在项目的最后冲刺阶段，退无可退，只能咬咬牙继续往前推。&lt;/p&gt;
&lt;p&gt;X 带给自己的除了面对压力，面对未知的负面情绪和咬咬牙后的坚持外，也让我看到一些优秀的人在处理事情做决策的果敢与睿智。在复杂棘手的状况面前，他们总能迅速抽丝剥茧，精准地抓住问题的核心要点，以冷静客观的态度分析局势，权衡利弊。&lt;/p&gt;
&lt;h2 id=&#34;社区开源&#34;&gt;社区开源&lt;a class=&#34;headerlink&#34; href=&#34;#社区开源&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;这一年，GitHub 成了每天必逛的地方，GitCode 使用的频率大幅上升。GitHub 的 Discussions 承载了个人博客站点的一篇篇文章，GitCode 的 Issues 成了个人情绪的小黑屋。公众号更新的频率越来越低，博客和 Issues 越写越多。&lt;/p&gt;
&lt;p&gt;在开源项目的付费尝试中，也算勉勉强强填平了一个 top 域名十年续费的成本，自娱自乐。&lt;/p&gt;
&lt;h2 id=&#34;户外徒步&#34;&gt;户外徒步&lt;a class=&#34;headerlink&#34; href=&#34;#户外徒步&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;国庆回来后，便开启了每周一山的户外徒步小目标 —— 从四小只的油麻山森林公园开始，到后面的龙神线、金麦线、龙渔线，每周不一样的风景，不一样的收获。
&lt;img alt=&#34;liangbulu-2025-1&#34; src=&#34;https://gi.weiyan.tech/2025/12/liangbulu-2025-1.jpg&#34; /&gt;&lt;/p&gt;
&lt;p&gt;希望每一次的经历，都能让这几个 &amp;ldquo;萌娃小队&amp;rdquo; 们的友谊像山顶的风景一样开阔，也像攀登过程一样充满乐趣和成长。&lt;/p&gt;
&lt;h2 id=&#34;羽毛球&#34;&gt;羽毛球&lt;a class=&#34;headerlink&#34; href=&#34;#羽毛球&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;入手了人生的第一把高端拍 77 Pro，球衣、球包、球鞋、手胶、拍线花费的不多，但都很满意，尤其是球包和球鞋。开始爱上 25/27 的差磅感觉，持续对 80 线情有独钟。&lt;/p&gt;
&lt;p&gt;每周至少一场球，足迹遍布羽括1号、羽括9号、羽括5号、奥力派、荔湖城、风羽、威力、搜羽，遗憾的是离家最近的新动力羽毛球馆在这一年的下半年下线了。&lt;/p&gt;
&lt;h2 id=&#34;寄语&#34;&gt;寄语&lt;a class=&#34;headerlink&#34; href=&#34;#寄语&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;2025 是焦虑、煎熬，与压力的一年，经济发展有所下降、企业利润降低、债务、裁员、降薪、找不到工作、难以承受的房贷车贷等等这些成为了这一年的主题，每一个人都在拼命地苟活着。&lt;/p&gt;
&lt;p&gt;希望接下来的 2026 年，健康，和顺。After all, tomorrow is another day！&lt;/p&gt;
&lt;p&gt;2026，加油！&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;175&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-175/</link>
      <pubDate>Wed, 31 Dec 2025 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-175/</guid>
      
    </item>
    
    <item>
      <title>每周一山 | 广州龙渔线徒步</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;广州龙渔线是一条从&lt;strong&gt;龙眼洞&lt;/strong&gt;至&lt;strong&gt;渔沙坦&lt;/strong&gt;的城郊徒步路线，全长约12公里。它以交通便利、难度适中著称，串联起山林、水库与陡峭石壁，其中二战碉堡遗址是途中标志景观。&lt;/p&gt;
&lt;p&gt;我们这一次走的是从植物园 → 鬼王山 → 龙洞（民族文化村）总站的路线 —— 从地铁 6 号线看植物园的下一站就是龙洞，相当于绕一圈就走了一站地铁站。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;搭乘地铁6号线植物园G出口出来，从旁边的宝翠园进去，穿过广东工业大学（龙洞校区）。
&lt;img alt=&#34;ly-20251214-01&#34; src=&#34;https://gi.weiyan.tech/2025/12/ly-20251214-01.webp&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;ly-20251214-02&#34; src=&#34;https://gi.weiyan.tech/2025/12/ly-20251214-02.webp&#34; /&gt;&lt;/p&gt;
&lt;p&gt;穿过广东工业大学（龙洞校区）后，我们从旁边一小片菜地边开始上山。
&lt;img alt=&#34;ly-climb-01&#34; src=&#34;https://gi.weiyan.tech/2025/12/ly-climb-01.webp&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;ly-climb-02&#34; src=&#34;https://gi.weiyan.tech/2025/12/ly-climb-02.webp&#34; /&gt;&lt;/p&gt;
&lt;p&gt;龙渔线我们走的大部分都是碎石路，前一天周六下了大半天的绵绵小雨，本以为第二天的路多少会有些泥泞，没想好却是恰到好处的潮而不黏，反而少了一分灰尘，多了几分雨后的清新干爽。
&lt;img alt=&#34;ly-climb-03&#34; src=&#34;https://gi.weiyan.tech/2025/12/ly-climb-03.webp&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;ly-100150&#34; src=&#34;https://gi.weiyan.tech/2025/12/ly-100150.webp&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;ly-100453&#34; src=&#34;https://gi.weiyan.tech/2025/12/ly-100453.webp&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;ly-102647&#34; src=&#34;https://gi.weiyan.tech/2025/12/ly-102647.webp&#34; /&gt;&lt;/p&gt;
&lt;p&gt;碎石路的后面是泥路，湿而不软，加上时而透过林间的阳光，一路上也是惬意满满。
&lt;img alt=&#34;ly-104604&#34; src=&#34;https://gi.weiyan.tech/2025/12/ly-104604.webp&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;ly-111148&#34; src=&#34;https://gi.weiyan.tech/2025/12/ly-111148.webp&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;ly-113210&#34; src=&#34;https://gi.weiyan.tech/2025/12/ly-113210.webp&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;ly-113406&#34; src=&#34;https://gi.weiyan.tech/2025/12/ly-113406.webp&#34; /&gt;&lt;/p&gt;
&lt;p&gt;龙渔线其实也是有几段坡度比较大的泥路，包括上坡和下坡。
&lt;img alt=&#34;ly-113533&#34; src=&#34;https://gi.weiyan.tech/2025/12/ly-113533.webp&#34; /&gt;&lt;/p&gt;
&lt;p&gt;鬼王山的陡峭石壁，算是整个龙渔线最震撼的一段，据说旁边还有个二战碉堡遗址的标志景观，可惜这一次没看到。
&lt;img alt=&#34;ly-115808&#34; src=&#34;https://gi.weiyan.tech/2025/12/ly-115808.webp&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;ly-120121&#34; src=&#34;https://gi.weiyan.tech/2025/12/ly-120121.webp&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;ly-120826&#34; src=&#34;https://gi.weiyan.tech/2025/12/ly-120826.webp&#34; /&gt;&lt;/p&gt;
&lt;p&gt;鬼王山过后，我们穿过一路杂草丛生的山路，开始下山。
&lt;img alt=&#34;ly-122120&#34; src=&#34;https://gi.weiyan.tech/2025/12/ly-122120.webp&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;ly-122208&#34; src=&#34;https://gi.weiyan.tech/2025/12/ly-122208.webp&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;ly-122617&#34; src=&#34;https://gi.weiyan.tech/2025/12/ly-122617.webp&#34; /&gt;&lt;/p&gt;
&lt;p&gt;最终，我们到达 &lt;strong&gt;&amp;ldquo;龙洞（民族文化村）总站&amp;rdquo;&lt;/strong&gt;，在这里可以乘坐公交直达龙洞地铁站。
&lt;img alt=&#34;ly-124401&#34; src=&#34;https://gi.weiyan.tech/2025/12/ly-124401.webp&#34; /&gt;&lt;/p&gt;
&lt;p&gt;这一次的龙渔线全程约 8.5 公里，我们 5 个大人 4 个小孩，耗时 3 个小时左右完成，总体来说速度还是相当快的。三个一年级小学生，加上一个五年级的姐姐，四个萌娃像开了挂一样引领了全程。作为幼儿园的同班同学和一路走过来的爬山搭子，希望每一次的经历都能让你们的友谊像山顶的风景一样开阔，也像攀登过程一样充满乐趣和成长。
&lt;img alt=&#34;ly-locus-20251214&#34; src=&#34;https://gi.weiyan.tech/2025/12/ly-locus-20251214.webp&#34; /&gt;&lt;/p&gt;
&lt;p&gt;期待下次继续挑战更高更远的目标！&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;174&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-174/</link>
      <pubDate>Wed, 17 Dec 2025 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-174/</guid>
      
    </item>
    
    <item>
      <title>Python 包和项目管理工具 UV 安装与更新</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;&lt;code&gt;uv&lt;/code&gt; 有人评价是近十年来 Python 生态出现的最好东西，它彻底改变了 Python 的安装和使用方式，尤其在快速解决依赖冲突（这对大型项目至关重要）方面，速度快得惊人。作为一个由 Astral 开发，用 Rust 编写，几乎可以在任何操作系统或平台上运行的免费的开源工具，个人在越来越多的开源模型、项目中都能看到它的身影，&lt;code&gt;uv&lt;/code&gt; 似乎已经和 &lt;code&gt;conda&lt;/code&gt; 成为了现在 Python 环境构建与管理的标配。&lt;/p&gt;
&lt;p align=&#34;center&#34;&gt;
    &lt;img src=&#34;https://gi.weiyan.tech/2025/12/uv-fast.webp&#34; alt=&#34;uv-fast&#34;&gt;&lt;br&gt;
    &lt;em&gt;Installing &lt;a href=&#39;https://trio.readthedocs.io/&#39; target=&#39;_blank&#39;&gt;Trio&lt;/a&gt;&#39;s dependencies with a warm cache.&lt;/em&gt;
&lt;/p&gt;

&lt;p&gt;官方文档 &lt;a href=&#34;https://docs.astral.sh/uv/getting-started/installation/#installing-uv&#34;&gt;Installing uv&lt;/a&gt; 大多数都是先下载 &lt;code&gt;install.sh&lt;/code&gt;，然后 &lt;code&gt;sh install.sh&lt;/code&gt; 执行安装。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;h2 id=&#34;installsh&#34;&gt;install.sh&lt;a class=&#34;headerlink&#34; href=&#34;#installsh&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;首先，&lt;code&gt;sh install.sh&lt;/code&gt; 默认把 &lt;code&gt;uv&lt;/code&gt; 和 &lt;code&gt;uvx&lt;/code&gt; 安装到 &lt;code&gt;~/.local/bin&lt;/code&gt; 目录，当然我们也这两个可执行文件 &lt;code&gt;mv&lt;/code&gt; 到任何想要的目录，然后把目标目录添加到 &lt;code&gt;$PATH&lt;/code&gt; 环境变量中。如果我们想要指定安装目录，可以：
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;curl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-LsSf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://astral.sh/uv/install.sh&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;env&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;UV_INSTALL_DIR&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;/ifs1/software/uv&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sh
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;其次，&lt;code&gt;sh install.sh&lt;/code&gt; 会默认使用 &lt;code&gt;curl&lt;/code&gt; 或者 &lt;code&gt;wget&lt;/code&gt; 先去 github 下载对应 prebuilt binaries 压缩包，然后解压缩到指定目录。  &lt;br /&gt;
&lt;img alt=&#34;uv-install-base-url&#34; src=&#34;https://gi.weiyan.tech/2025/07/uv-install-base-url.webp&#34; /&gt;    &lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;uv-install-curl-wget&#34; src=&#34;https://gi.weiyan.tech/2025/07/uv-install-curl-wget.webp&#34; /&gt;&lt;/p&gt;
&lt;p&gt;我们验证一下：
1. 首先，在 &lt;code&gt;install.sh&lt;/code&gt; 的 &lt;code&gt;downloader&lt;/code&gt; 部分增加一个 curl 执行输出。
   &lt;img alt=&#34;uv-install-echo-curl&#34; src=&#34;https://gi.weiyan.tech/2025/07/uv-install-echo-curl.webp&#34; /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;其次，我们对下载后的结果解压缩（unpack the archive）的执行也增加一个输出。
   &lt;img alt=&#34;uv-install-tar&#34; src=&#34;https://gi.weiyan.tech/2025/07/uv-install-tar.webp&#34; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;最后，直接在本地执行 &lt;code&gt;sh install.sh&lt;/code&gt;。
   &lt;img alt=&#34;uv-sh-install-sh&#34; src=&#34;https://gi.weiyan.tech/2025/07/uv-sh-install-sh.webp&#34; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;所以，如果由于网络原因 &lt;code&gt;install.sh&lt;/code&gt; 和 &lt;code&gt;uv-x86_64-unknown-linux-gnu.tar.gz&lt;/code&gt; 无法正常下载，推荐使用下面的方法安装。&lt;/p&gt;
&lt;p&gt;首先，下载好 &lt;code&gt;install.sh&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;其次，下载好 &lt;code&gt;uv-x86_64-unknown-linux-gnu.tar.gz&lt;/code&gt;，然后在 &lt;code&gt;install.sh&lt;/code&gt; 中替换 &lt;code&gt;ARTIFACT_DOWNLOAD_URL&lt;/code&gt; 为该压缩包所在的路径。
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;#ARTIFACT_DOWNLOAD_URL=&amp;quot;${INSTALLER_BASE_URL}/astral-sh/uv/releases/download/0.8.3&amp;quot;&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;ARTIFACT_DOWNLOAD_URL&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;file:///ifs1/software/uv/src&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;第三，指定安装目录，执行安装。
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;env&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;UV_INSTALL_DIR&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;/ifs1/software/uv&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sh&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;uv-installer.sh
downloading&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;uv&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;.9.11&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;x86_64-unknown-linux-gnu
no&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;checksums&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;verify
installing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/ifs1/software/uv
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;uv
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;uvx
everything&lt;span class=&#34;err&#34;&gt;&amp;#39;&lt;/span&gt;s&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;installed!

To&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;add&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/ifs1/software/uv&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;your&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;PATH,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;either&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;restart&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;your&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;shell&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;or&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;run:

&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/ifs1/software/uv/env&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;sh,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bash,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;zsh&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/ifs1/software/uv/env.fish&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;fish&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;h2 id=&#34;直接安装&#34;&gt;直接安装&lt;a class=&#34;headerlink&#34; href=&#34;#直接安装&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;综合 &lt;code&gt;install.sh&lt;/code&gt; 的操作，其实我们可以直接去 &lt;a href=&#34;https://github.com/astral-sh/uv/releases&#34;&gt;https://github.com/astral-sh/uv/releases&lt;/a&gt; 下载对应的 prebuilt binaries 压缩包，然后解压缩到指定目录。&lt;strong&gt;但是这种安装会导致后续无法通过 &lt;code&gt;uv self update&lt;/code&gt; 自动更新，需要再次去手动下载 prebuilt binaries 压缩包，然后再解压。&lt;/strong&gt;    &lt;br /&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;wget&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://github.com/astral-sh/uv/releases/download/0.8.3/uv-x86_64-unknown-linux-gnu.tar.gz
tar&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;xf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;uv-x86_64-unknown-linux-gnu.tar.gz&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--strip-components&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-C&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/local/uv
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;h2 id=&#34;升级&#34;&gt;升级&lt;a class=&#34;headerlink&#34; href=&#34;#升级&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;当 &lt;code&gt;uv&lt;/code&gt; 通过独立安装程序（&lt;strong&gt;install.sh&lt;/strong&gt;）安装时，可以通过下面的方式更新。
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;uv&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;self&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;update
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;div class=&#34;admonition note&#34;&gt;
&lt;p class=&#34;admonition-title&#34;&gt;提示&lt;/p&gt;
&lt;p&gt;Updating uv will re-run the installer and can modify your shell profiles. To disable this behavior, set &lt;code&gt;INSTALLER_NO_MODIFY_PATH=1&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id=&#34;卸载&#34;&gt;卸载&lt;a class=&#34;headerlink&#34; href=&#34;#卸载&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;如果您需要从系统中去除 &lt;code&gt;uv&lt;/code&gt;，请按照下列步骤作。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;清理存储的数据（可选，在删除二进制文件之前，您可能希望删除 uv 存储的任何数据）
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;uv&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;cache&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;clean
rm&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-r&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;uv&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;python&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;dir&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;
rm&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-r&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;uv&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tool&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;dir&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;删除 &lt;code&gt;uv&lt;/code&gt; 和 &lt;code&gt;uvx&lt;/code&gt; 二进制文件
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;rm&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~/.local/bin/uv&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~/.local/bin/uvx
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;173&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/tech/discussions-173/</link>
      <pubDate>Fri, 12 Dec 2025 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/tech/discussions-173/</guid>
      
    </item>
    
    <item>
      <title>广州金麦线徒步下集</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;自从上一次我们走完了&lt;a href=&#34;https://shenwy.com/blog/discussions-171/&#34;&gt;金麦线从金坑到华峰寺的前半段&lt;/a&gt;，这一次我们走的是从华峰寺 → 石牙顶天坑 → 麦村的下半段。出发点是华峰寺山脚下的&lt;strong&gt;华峰寺总站-公交站&lt;/strong&gt;，穿过华圣公园的小路，沿着登山步道一路向上，到达华峰寺。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;到达华峰寺短暂休息后，从华峰寺大雄宝殿的左侧指示牌处，开始上山。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;jm2-hfs-road-sign&#34; src=&#34;https://gi.weiyan.tech/2025/12/jm2-hfs-road-sign.webp&#34; /&gt;&lt;/p&gt;
&lt;p&gt;从华峰寺上山的这一段路会比较陡，也比较滑，算是金麦线下半段中最吃力的一小段。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;jm2-hfs-climb-01&#34; src=&#34;https://gi.weiyan.tech/2025/12/jm2-hfs-climb-01.webp&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;jm2-hfs-climb-03&#34; src=&#34;https://gi.weiyan.tech/2025/12/jm2-hfs-climb-03.webp&#34; /&gt;&lt;/p&gt;
&lt;p&gt;上完山后，沿着石牙顶天坑方向进发，这一段路线的上坡会相对平缓一些，但起起伏伏的路段会比较多，中后半程也会有几段坡度比较陡的，可以沿着绳索慢慢向下。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;jm2-tk-01&#34; src=&#34;https://gi.weiyan.tech/2025/12/jm2-tk-01.webp&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;jm2-tk-02&#34; src=&#34;https://gi.weiyan.tech/2025/12/jm2-tk-02.webp&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;jm2-tk-03&#34; src=&#34;https://gi.weiyan.tech/2025/12/jm2-tk-03.webp&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;jm2-tk-04&#34; src=&#34;https://gi.weiyan.tech/2025/12/jm2-tk-04.webp&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;jm2-tk-05&#34; src=&#34;https://gi.weiyan.tech/2025/12/jm2-tk-05.webp&#34; /&gt;&lt;/p&gt;
&lt;p&gt;过完下坡最陡的这一段山路，迎面的是一小段平坦的小公路，过去后又回到山路继续向前。走到黄埔增城界碑，距离石牙顶天坑就剩 2、300米的路程了。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;jm2-road-1&#34; src=&#34;https://gi.weiyan.tech/2025/12/jm2-road-1.webp&#34; /&gt;    &lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;jm2-road-2&#34; src=&#34;https://gi.weiyan.tech/2025/12/jm2-road-2.webp&#34; /&gt;    &lt;/p&gt;
&lt;p&gt;从相对平坦的小公路到黄埔增城界碑（我在黄埔石牙顶很想你）这一段，前一段公路的路程很短，大部分是后面的泥山路。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;jm2-tk-climb-01&#34; src=&#34;https://gi.weiyan.tech/2025/12/jm2-tk-climb-01.webp&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;jm2-tk-climb-02&#34; src=&#34;https://gi.weiyan.tech/2025/12/jm2-tk-climb-02.webp&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;jm2-tk-climb-03&#34; src=&#34;https://gi.weiyan.tech/2025/12/jm2-tk-climb-03.webp&#34; /&gt;&lt;/p&gt;
&lt;p&gt;从黄埔增城界碑出发，下一个点就是整个金麦线最大最漂亮的打卡地 —— 石牙顶天坑了。在这里可以从上往下俯瞰整个天坑的全貌，非常震撼漂亮，下山后也可以在山腰的登山步道打卡点打卡更加漂亮的天坑风景。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;jm2-tkeng-01&#34; src=&#34;https://gi.weiyan.tech/2025/12/jm2-tkeng-01.webp&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;jm2-tkeng-02&#34; src=&#34;https://gi.weiyan.tech/2025/12/jm2-tkeng-02.webp&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;jm2-tkeng-03&#34; src=&#34;https://gi.weiyan.tech/2025/12/jm2-tkeng-03.webp&#34; /&gt;&lt;/p&gt;
&lt;p&gt;从石牙顶天坑往下走，也能沿途欣赏天坑不同角度的风景。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;jm2-tiankeng-01&#34; src=&#34;https://gi.weiyan.tech/2025/12/jm2-tiankeng-01.webp&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;jm2-tiankeng-02&#34; src=&#34;https://gi.weiyan.tech/2025/12/jm2-tiankeng-02.webp&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;jm2-tiankeng-03&#34; src=&#34;https://gi.weiyan.tech/2025/12/jm2-tiankeng-03.webp&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;jm2-tiankeng-04&#34; src=&#34;https://gi.weiyan.tech/2025/12/jm2-tiankeng-04.webp&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;jm2-tiankeng-05&#34; src=&#34;https://gi.weiyan.tech/2025/12/jm2-tiankeng-05.webp&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;jm2-tiankeng-06&#34; src=&#34;https://gi.weiyan.tech/2025/12/jm2-tiankeng-06.webp&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;jm2-tiankeng-07&#34; src=&#34;https://gi.weiyan.tech/2025/12/jm2-tiankeng-07.webp&#34; /&gt;&lt;/p&gt;
&lt;p&gt;最后的路线，就是下山直达麦村了，都是水泥路。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;jm2-mai-01&#34; src=&#34;https://gi.weiyan.tech/2025/12/jm2-mai-01.webp&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;jm2-mai-02&#34; src=&#34;https://gi.weiyan.tech/2025/12/jm2-mai-02.webp&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;jm2-mai-03&#34; src=&#34;https://gi.weiyan.tech/2025/12/jm2-mai-03.webp&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;jm2-mai-04&#34; src=&#34;https://gi.weiyan.tech/2025/12/jm2-mai-04.webp&#34; /&gt;&lt;/p&gt;
&lt;p&gt;总体来说，从华峰寺 → 石牙顶天坑 → 麦村的这次徒步还是挺好走的，沿途风景也极好，我们五个大人三个小孩一行人走走停停，全程 7.2 公里左右也就花了 3 个小时。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;jm2-locus-20251206&#34; src=&#34;https://gi.weiyan.tech/2025/12/jm2-locus-20251206.webp&#34; /&gt;&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;172&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-172/</link>
      <pubDate>Tue, 09 Dec 2025 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-172/</guid>
      
    </item>
    
    <item>
      <title>广州金麦线徒步上集</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;金麦线一般是金坑地铁站 B 出口开始徒步，到达油麻山山顶约 2 小时，再到达华峰寺（12 点之前可以吃斋饭哦）、石牙顶天坑，最后到达麦村，终点也可以选择镇龙西地铁站（不想徒步公路的小伙伴，麦村也可以坐公交去地铁站）。      &lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;从油麻山下 21 号线的金坑地铁站 B 口出来，沿着村道水泥路走上几百米，就正式进入了本次金麦线的山间小路。&lt;/p&gt;
&lt;p align=&#34;center&#34;&gt;
  &lt;img src=&#34;https://gi.weiyan.tech/2025/11/jm-20251129_01.webp&#34; width=600 alt=&#34;jm-20251129_01&#34;&gt;
&lt;/p&gt;

&lt;p&gt;村里面环境也挺好的，中间还有一条小溪，小卖部也挺多了，可以买些水。&lt;/p&gt;
&lt;p align=&#34;center&#34;&gt;
  &lt;img src=&#34;https://gi.weiyan.tech/2025/11/jm-20251129_02.webp&#34; width=600 alt=&#34;jm-20251129_02&#34;&gt;
&lt;/p&gt;

&lt;p&gt;金坑到油麻山的山间小路，前面部分其实还是挺好走的，沿途风景也很好，路的不算陡，也很少有那种又陡松散泥土又多且易滑的路段。&lt;/p&gt;
&lt;p align=&#34;center&#34;&gt;
  &lt;img src=&#34;https://gi.weiyan.tech/2025/11/jm-20251129_12.webp&#34; width=600 alt=&#34;jm-20251129_12&#34;&gt;
&lt;/p&gt;

&lt;p align=&#34;center&#34;&gt;
  &lt;img src=&#34;https://gi.weiyan.tech/2025/11/jm-20251129_13.webp&#34; width=600 alt=&#34;jm-20251129_13&#34;&gt;
&lt;/p&gt;

&lt;p align=&#34;center&#34;&gt;
  &lt;img src=&#34;https://gi.weiyan.tech/2025/11/jm-20251129_14.webp&#34; width=600 alt=&#34;jm-20251129_14&#34;&gt;
&lt;/p&gt;

&lt;p align=&#34;center&#34;&gt;
  &lt;img src=&#34;https://gi.weiyan.tech/2025/11/jm-20251129_15.webp&#34; width=600 alt=&#34;jm-20251129_15&#34;&gt;
&lt;/p&gt;

&lt;p align=&#34;center&#34;&gt;
  &lt;img src=&#34;https://gi.weiyan.tech/2025/11/jm-20251129_16.webp&#34; width=600 alt=&#34;jm-20251129_16&#34;&gt;
&lt;/p&gt;

&lt;p&gt;其实，金麦线从金坑到油麻山、华峰寺，这一段真正有难度的，是中后半程才出现的那几段坡度极大且易滑的，起起伏伏的路线，尤其是从油麻山到华峰寺下山这一段，上下起伏，陡坡大、松散泥土多、易滑，不管是爬升还是下坡都难度极大，特别容易摔跤，需要特别注意。&lt;/p&gt;
&lt;p align=&#34;center&#34;&gt;
  &lt;img src=&#34;https://gi.weiyan.tech/2025/11/jm-up-110507.webp&#34; width=600 alt=&#34;jm-up-110507&#34;&gt;
&lt;/p&gt;

&lt;p align=&#34;center&#34;&gt;
  &lt;img src=&#34;https://gi.weiyan.tech/2025/11/jm-up-111114.webp&#34; width=600 alt=&#34;jm-up-111114&#34;&gt;
&lt;/p&gt;

&lt;p align=&#34;center&#34;&gt;
  &lt;img src=&#34;https://gi.weiyan.tech/2025/11/jm-up-121712.webp&#34; width=600 alt=&#34;jm-up-121712&#34;&gt;
&lt;/p&gt;

&lt;p align=&#34;center&#34;&gt;
  &lt;img src=&#34;https://gi.weiyan.tech/2025/11/jm-20251129_30.webp&#34; width=600 alt=&#34;jm-20251129_30&#34;&gt;
&lt;/p&gt;

&lt;p&gt;总体来说，这应该是个人在 2025 年爬过的难度最大的一次山，三个一年级的孩子加上 4 个大人历经 5 个小时，终于是爬完了前半段，在华峰寺休息了大半个小时，一拨人才慢悠悠的下山，回家。&lt;/p&gt;
&lt;p align=&#34;center&#34;&gt;
  &lt;img src=&#34;https://gi.weiyan.tech/2025/11/jm-locus-20251129.webp&#34; width=600 alt=&#34;jm-locus-20251129&#34;&gt;
&lt;/p&gt;

&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;171&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-171/</link>
      <pubDate>Mon, 01 Dec 2025 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-171/</guid>
      
    </item>
    
    <item>
      <title>这个双十一小剁手</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;2025 年的双十一并没有往年的热闹，不管是各大商家的促销力度和阵仗，还是周围人的反应，都透着一股冷清的氛围。或许正应景了当下低迷的就业环境，大家的购买欲望都被按下了减速键，愈发谨慎。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;h2 id=&#34;服务器&#34;&gt;服务器&lt;a class=&#34;headerlink&#34; href=&#34;#服务器&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;这应该是今年双十一最大的一笔投入，把香港 4 核 8G 100G 的云服务器续费了一年，八五折共计 ¥425 块。这个来自 &lt;a href=&#34;https://zhenxun.cn/recommend/4zYOG1JdFE4YzUb9O6gC&#34;&gt;臻讯云&lt;/a&gt; 的服务器，用了将近一年，从价格，包括续费价格，和稳定性都让自己很满意。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;hk-weiyan-server&#34; src=&#34;https://gi.weiyan.tech/2025/11/hk-weiyan-server.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;运动&#34;&gt;运动&lt;a class=&#34;headerlink&#34; href=&#34;#运动&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;国庆后带娃出去爬山和徒步的次数多了，刚好趁着这个双十一入手了两支登山杖，碳纤维，性价比，两相考虑在拼多多入手了原始人的这两支。到手后，11月16日去京溪森林公园环线使用体验了一下，还挺不错，轻便稳固，大人小孩都挺满意。        &lt;br /&gt;
&lt;img alt=&#34;hiking-pole&#34; src=&#34;https://gi.weiyan.tech/2025/11/hiking-pole.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;羽毛球装备，在京东给自己换了一个双肩的羽毛球包，价格，空间，舒适度，颜值都很满意。         &lt;br /&gt;
&lt;img alt=&#34;yy-bag-202511&#34; src=&#34;https://gi.weiyan.tech/2025/11/yy-bag-202511.webp&#34; /&gt;&lt;/p&gt;
&lt;p&gt;羽毛球的另外一个大支出是球鞋。最开始，入手的是安踏的低帮后卫篮球鞋空域 5，这鞋子虽然颜值在线，但穿上发现蹬脚弯曲时候脚掌两侧会有点被硌到，始终不太舒服，不知道是因为鞋子太窄还是尺码不合适，只好选择了退掉。        &lt;br /&gt;
&lt;img alt=&#34;kongyu-5&#34; src=&#34;https://gi.weiyan.tech/2025/11/kongyu-5.webp&#34; /&gt;&lt;/p&gt;
&lt;p&gt;后来又来来回回看了一圈，纠结了一波 P9200NTD，P9200TD 巭，P9200 巭到底哪一款性价比更高后，最终在 PDD 下单了 VICTOR 威克多的 &lt;a href=&#34;https://www.badmintoncn.com/cbo_eq/view.php?eid=22699&#34;&gt;P9200NTD&lt;/a&gt;，比较神奇的是同样一款鞋子在京东要 ¥310 多，在拼多多 ¥240 多就可以拿下了！            &lt;br /&gt;
&lt;img alt=&#34;P9200NTD&#34; src=&#34;https://gi.weiyan.tech/2025/11/p9200ntd.webp&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;开心就好&#34;&gt;开心就好&lt;a class=&#34;headerlink&#34; href=&#34;#开心就好&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;这个双十一的剁手还算是比较理性的，入手的四样东西都比较满意，情绪价值满满。手上的 Mate30 Pro 虽然用了 4 年多，清清存储后还是能支撑到明年的，而且今年的手机目前也没等到什么满意的，也算是给下一年定个目标。&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;170&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-170/</link>
      <pubDate>Thu, 20 Nov 2025 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-170/</guid>
      
    </item>
    
    <item>
      <title>要和过去以及未来的自己对话</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;网站的初心就是要和过去以及未来的自己对话，可以在未来的某一天，坐在电脑旁打开，几年前，甚至十几年前的文章或者说说，可能会看到以前的自己与今天的自己有什么不同，重拾与回味在互联网洪流里自己留下独特印记。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;为什么要有一个属于自己的博客？&lt;/p&gt;
&lt;p&gt;似乎是每一位博主都会提及的一个老生常谈的话题。&lt;/p&gt;
&lt;p&gt;只是深知，真正会为它驻足的人不多，远不及最初设想的热闹。&lt;/p&gt;
&lt;p&gt;但是拥有一个属于自己的域名还有服务器，已是件足够浪漫并且很酷的事！&lt;/p&gt;
&lt;p&gt;可以在这里随意的写一些自己喜欢的东西，记下生活与工作里撞见的困惑与解法，就已经很好。&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;169&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-169/</link>
      <pubDate>Tue, 18 Nov 2025 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-169/</guid>
      
    </item>
    
    <item>
      <title>统计之都中文博客</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;统计之都有一个帖子收集了上百个博客，《&lt;a href=&#34;https://d.cosx.org/d/421538&#34;&gt;大家贴一下自己的博客地址吧&lt;/a&gt;》，各种高人满天飞，拜读了一下，深感折服！&lt;/p&gt;
&lt;!-- more --&gt;

&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;168&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-168/</link>
      <pubDate>Fri, 14 Nov 2025 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-168/</guid>
      
    </item>
    
    <item>
      <title>网络文章</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;很多年前在语雀开设了一个 &amp;ldquo;&lt;a href=&#34;https://www.yuque.com/shenweiyan/articles&#34;&gt;网络文精选&lt;/a&gt;&amp;rdquo; 的专题知识库，记录了一些在互联网看到的个人比较喜欢的文章。个人站点在 2025-05 初的时候也增加了一个 &lt;strong&gt;&amp;ldquo;摘录&amp;rdquo;&lt;/strong&gt; 的导航分类，本意是想着把这些来源于互联网、自己喜欢的精选文章，或者是自己翻译而来的一些文章，放到里面。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;现在看来需要重新考虑一下这个分类的一些潜在风险。首先，是知识产权和是转载授权的问题。其次，是站点（仓库，或者是 Issues）敏感内容的风险问题。&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;167&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-167/</link>
      <pubDate>Thu, 13 Nov 2025 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-167/</guid>
      
    </item>
    
    <item>
      <title>做猪呢最重要的是开心</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;在知乎看到这张图片，被它呆萌与天真的眼神圈粉了，画的也很生动传神，不是么？底下的评论也很有爱，足以让这段时间身心俱疲的一些工作和生活阴霾得以短暂的休憩。   &lt;br /&gt;
&lt;img alt=&#34;&#34; src=&#34;https://gi.weiyan.tech/2025/10/happy-pig.webp&#34; /&gt;&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;国庆假期结束后，工作与生活的琐事便如潮水般接连涌来，再加上天气逐渐转凉且变幻无常，整个人忙得如同飞速旋转的陀螺，一刻也不得停歇。心中太多对未知的惴惴不安，还有那患得患失的隐隐担忧。正好看到了这只可爱又传神的呆萌猪，在给我带来些许的欢乐和温暖的同时，也把它挪到了个人的站点上，希望它也能给所有看到的人带去欢乐。&lt;/p&gt;
&lt;p&gt;看看另外一个网友画的 —— &amp;ldquo;画的不错，以后就是我的了&amp;rdquo;，再感受一下评论的画风。   &lt;br /&gt;
&lt;img src=&#39;https://gi.weiyan.tech/2025/10/happy-pig-2.jpg&#39; width=720&gt;  &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;你这个看着没他那个开心。     &lt;/li&gt;
&lt;li&gt;瞧把孩子瘦的     &lt;/li&gt;
&lt;li&gt;饿了多久     &lt;/li&gt;
&lt;li&gt;像浪浪山出来的     &lt;/li&gt;
&lt;li&gt;被社会毒打啦😆     &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;ldquo;鸟山明风格😍&amp;rdquo;，&amp;rdquo;有娇养的感觉&amp;rdquo;。        &lt;br /&gt;
&lt;img alt=&#34;&#34; src=&#34;https://gi.weiyan.tech/2025/10/happy-pig-3.jpg&#34; /&gt;&lt;/p&gt;
&lt;p&gt;粉嫩版的~   &lt;br /&gt;
&lt;img src=&#34;https://gi.weiyan.tech/2025/10/happy-pig-pink.jpg&#34; width=720&gt;&lt;/p&gt;
&lt;p&gt;还有 AI 豆包风格版本的 —— 把野猪认成家猪了😂   &lt;br /&gt;
&lt;img src=&#34;https://gi.weiyan.tech/2025/10/doubao-happy-pig.jpg&#34; width=720&gt;&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;166&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-166/</link>
      <pubDate>Thu, 30 Oct 2025 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-166/</guid>
      
    </item>
    
    <item>
      <title>微信公众号当朋友圈</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;微信公众号年久没有更新，脑子里突然蹦出来的这么一个想法 —— 微信公众号能不能当朋友圈使用？仔细想一下，其实应该也是可以，但最大的区别应该在于微信公众号是所有人都能看，朋友圈只有好友能看。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;就归档来说，微信公众号查看以前的文章好像也没那么好用。&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;165&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-165/</link>
      <pubDate>Wed, 22 Oct 2025 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-165/</guid>
      
    </item>
    
    <item>
      <title>今年的最后一个法定长假</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;籍此纪念一下 2025 年刚刚过去的最后一个法定长假，也是给这八天的中秋国庆长假作个记录。   &lt;br /&gt;
&lt;img alt=&#34;今年的最后一个法定长假&#34; src=&#34;https://gi.weiyan.tech/2025/10/last-holiday.jpg&#34; /&gt;&lt;/p&gt;
&lt;!-- more --&gt;

&lt;h2 id=&#34;念&#34;&gt;念&lt;a class=&#34;headerlink&#34; href=&#34;#念&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;自6月1日端午节与儿童节不期而遇，开启三天小长假以来，便开始满心期盼着今年的中秋国庆黄金周。整整三个月，期待与日俱增，几乎到了望眼欲穿的地步。一方面，长期工作的压力如暗流般长久涌动、不断堆积，身心仿佛被无形的绳索紧紧束缚，急切地渴望一处能让灵魂栖息、压力消散的港湾，去尽情释放与放松；另一方面，故乡的山水、故人的音容，宛如一幅幅温暖而鲜活的画卷，时常在心间浮现，对家乡人和物的思念，如藤蔓般在心底肆意生长，缠绕不休。&lt;/p&gt;
&lt;h2 id=&#34;堵&#34;&gt;堵&lt;a class=&#34;headerlink&#34; href=&#34;#堵&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;&amp;ldquo;堵&amp;rdquo;&lt;/strong&gt; 是每次来回老家无法避免的一个主题。从十月一下午 16 时动身出发到凌晨 1 点半到家，将近 11 个小时的返程，为这个长假添上了一抹别样的况味。一路上，高速公路上的走走停停，服务区的车水马龙，仿佛是一场漫长的修行，每一寸的前进都显得那么艰难。车窗外，不断掠过的路灯，像是一串串被拉长的时光符号，记录着这无尽等待的时光。   &lt;br /&gt;
&lt;img alt=&#34;丹灶服务器&#34; src=&#34;https://gi.weiyan.tech/2025/10/danzao.webp&#34; /&gt;&lt;/p&gt;
&lt;p&gt;也不得不感慨一番现如今交通的发达，打车的方便。从老家到老丈人家，从姐夫店里到距离老家最近的镇上，以往得提前好久安排交通工具，要么麻烦亲戚开车送，要么在路边苦等不知何时才来的乡村巴士。现在好了，顺风车一叫，约定好时间就能出发，而且价格实惠，直接把我们送到想去的地方，大大节省了时间和精力，体验感也极好。   &lt;br /&gt;
&lt;img alt=&#34;深夜·老家&#34; src=&#34;https://gi.weiyan.tech/2025/10/night-home.webp&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;慢&#34;&gt;慢&lt;a class=&#34;headerlink&#34; href=&#34;#慢&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;在老家待了三天，老丈人家待了两天，都深深感受到了农村生活慢节奏带来的舒适和宁静。没有城市里的喧嚣和浮躁，只有邻里家人之间简单而真实的交流，家长里短到国家大事，温暖且充实。&lt;/p&gt;
&lt;p&gt;难得的是，小孩子能在这里找到玩伴，忘却了作业的压力，在村里奔跑嬉戏，在水边捉鱼摸虾，在空地跳房子，逮个不知名小动物也能好奇玩上半天，还能玩上去年过年的烟花存货。   &lt;br /&gt;
&lt;img alt=&#34;空地跳房子&#34; src=&#34;https://gi.weiyan.tech/2025/10/children-playing.webp&#34; /&gt;     &lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;去年的烟花存货&#34; src=&#34;https://gi.weiyan.tech/2025/10/fireworks.webp&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;安&#34;&gt;安&lt;a class=&#34;headerlink&#34; href=&#34;#安&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;父母一辈年纪大了，习惯不了大城市的喧嚣和冰冷，反而能在邻里亲朋的老家找到慰藉，力所能及农活，虽然累点，但却能让他们觉得充实。&lt;/p&gt;
&lt;p&gt;城市，就像一个巨大而又冰冷的机器，日夜不停地运转着。父母在其中，就像两颗渺小的螺丝钉，被忙碌和喧嚣裹挟着，找不到自己的方向。高楼大厦遮住了他们的视线，车水马龙淹没了他们的声音，他们在这座繁华的城市里，内心充满了孤独和迷茫。而老家，却是他们心灵的港湾，是他们永远的根。当他们踏足这片熟悉的土地，闻着那熟悉的泥土气息，听着那亲切的乡音，邻里亲朋们的热情招呼，就像一束束温暖的阳光，照亮了他们内心深处的角落。&lt;/p&gt;
&lt;p&gt;祝愿所有的父母们能平安喜乐，健健康康。&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;164&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-164/</link>
      <pubDate>Thu, 09 Oct 2025 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-164/</guid>
      
    </item>
    
    <item>
      <title>羽毛球拍</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;人到中年，能坚持下来的运行少之又少，唯有羽毛球还能一如既往没有放弃掉。回想当年大学还没毕业，出来实习后开始正式接触羽毛球，此间断断续续，一直到现在，真是弹指一瞬间。&lt;/p&gt;
&lt;p&gt;球打的多了，面对拍子按说早已经波澜不惊，但最近不知道怎么回事，又开始对装备这个事情念念不忘，走火入魔。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;手持一把&lt;a href=&#34;https://www.badmintoncn.com/cbo_eq/view_6462.html&#34;&gt;亮剑 12N&lt;/a&gt; 和一把&lt;a href=&#34;https://www.badmintoncn.com/cbo_eq/view_6902.html&#34;&gt;天斧 69&lt;/a&gt;，都是 3U。BS12N 在中前场平抽快杀以及防守个人还是很满意的，但是后场高远球和杀球感觉总差那么一点意思。ASTROX 69 虽然杀球尖，鞭击感明显，但在放网、劈吊以及搓球技术方面有所欠缺，且连续进攻的能力较弱，但是作为一个 ¥200 出头淘来的二手拍打了四五年也就那样了。&lt;/p&gt;
&lt;p&gt;于是，开始心念念新版的&lt;a href=&#34;https://www.badmintoncn.com/cbo_eq/view.php?eid=19393&#34;&gt;天斧 88d Pro&lt;/a&gt;，4UG5，但却纠结于线下将近 ¥1900 的价格。
&lt;img alt=&#34;astrox-88dp&#34; src=&#34;https://gi.weiyan.tech/2025/09/astrox-88dp.webp&#34; /&gt;&lt;/p&gt;
&lt;p&gt;为兴趣买单，早买早享受，会不会是一个极好的剁手理由！还有就是，任何人，想坚持打羽毛球，都，一定，且，必须，买一把千元球拍。&lt;/p&gt;
&lt;p&gt;时隔一个月后，终究还是 ¥1000 大洋从朋友手里入手了这把 4U G5 的&lt;a href=&#34;https://www.badmintoncn.com/cbo_eq/view.php?eid=14147&#34;&gt;天斧 77 Pro&lt;/a&gt;。     &lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;astrox-77-pro&#34; src=&#34;https://gi.weiyan.tech/2025/10/astrox-77pro.jpg&#34; /&gt;&lt;/p&gt;
&lt;p&gt;来来回回使用这个拍子打了五六场球，渐入佳境，对自己而言还算满意。虽然一开始给我的感觉还是偏木，中杆太硬，但综合打感还不错，后场网前都能兼顾，也无震手感，对于 3U 拍子打久了的我来说，简直是福音，打的多了发现这个拍子更加适合那些比较有爆发力的小伙伴。&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;163&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-163/</link>
      <pubDate>Mon, 29 Sep 2025 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-163/</guid>
      
    </item>
    
    <item>
      <title>桦加沙</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;作为 2025 年的风王，&amp;rdquo;桦加沙&amp;rdquo; 算是一定程度上满足了多年以来对台风的期待值 —— 2025 年第 18 号台风 &amp;ldquo;桦加沙&amp;rdquo; 来势汹汹，强度与 2018 年超强台风 &amp;ldquo;山竹&amp;rdquo; 相当，或成为今年以来影响我国的最强台风。&lt;/p&gt;
&lt;p&gt;台风没来之前，朋友圈的热闹，各种严阵以待的信息，超市抢购一空的景象，让人对这个号称今年最强风王的期待拉满，既担心又激动。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;对 2018 年超强台风 &amp;ldquo;山竹&amp;rdquo; 的印象比较浅，唯一的印象仅剩下当时个人租住的公寓中，在大风中砰砰乱响的的落地玻璃。&lt;/p&gt;
&lt;p&gt;&amp;ldquo;桦加沙&amp;rdquo; 的影响更加直接。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;提前两天，晚上将近 21 点多才收到停课通知，大晚上急急忙忙联系托管，确不曾想第二天风平浪静，艳阳高照。&lt;/li&gt;
&lt;li&gt;公司层面做足了措施，下班前把服务器关停了。&lt;/li&gt;
&lt;li&gt;下班后才收到确认公司停工的通知，具体复工时间未定。&lt;/li&gt;
&lt;li&gt;回到家，看到朋友圈热闹非凡，超市蔬菜鲜肉抢购一空。&lt;/li&gt;
&lt;li&gt;停工当天，想给老婆打车发现滴滴、哈罗、高德地图一众平台都无法打车了，恰好一大早老婆的公司也发布了停工通知。&lt;/li&gt;
&lt;li&gt;虽然停工，还是被上班日的生物钟搞醒，7点就起来了，窗外狂风日渐大作。&lt;/li&gt;
&lt;li&gt;游戏，帮孩子打卡学习，安装两个新买的书柜，看看电视，一天就这样过去了。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;复工后的第一天，服务器还是出现了一些意外，给原本紧凑的工作更添了一丝阴霾，所幸的是最后还是有惊无险成功修复了。&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;162&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-162/</link>
      <pubDate>Thu, 25 Sep 2025 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-162/</guid>
      
    </item>
    
    <item>
      <title>GitHub Notifications 无法清除或标记为已读</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;GitHub 使用多了，最近总是遇到一些奇奇怪怪的问题。这不，今天又遇到了一个 Notifications 无法清除或标记为已读的神奇问题。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;github-notifications&#34; src=&#34;https://gi.weiyan.tech/2025/09/github-notifications.png&#34; /&gt;&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;这个问题，在 &lt;a href=&#34;https://github.com/orgs/community/discussions/174310&#34;&gt;https://github.com/orgs/community/discussions/174310&lt;/a&gt; 也有人遇到过，在 V2EX 也有相关的讨论 ——&lt;a href=&#34;https://www.v2ex.com/t/1161205&#34;&gt;《疑似 GitHub × Gitcoin 的骗局》&lt;/a&gt;，是这样子解释的。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;这是 GitHub 上一个已知的边缘情况。当触发通知的仓库或用户被删除时，有时相关通知会“卡住”，无法清除或标记为已读。这是一个偶尔会发生的错误，尤其是在垃圾邮件或已删除的帐户中。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;GitHub 在这个讨论中给了四个方法：尝试将所有通知标记为已读、使用 GitHub 移动应用程序、等待 GitHub 维护、联系 GitHub 支持。都未能很好解决问题，反而是讨论中的其他用户提供了解决的方案，个人试了一下，的确可行。&lt;/p&gt;
&lt;p&gt;参考：《&lt;a href=&#34;https://gist.github.com/jeremystretch/2c09f76837fc5af787fe9ff7747ecf3f&#34;&gt;Mark GitHub notifications as read&lt;/a&gt;》
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;requests&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;TOKEN&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;lt;TOKEN&amp;gt;&amp;#39;&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;headers&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
    &lt;span class=&#34;s1&#34;&gt;&amp;#39;Accept&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;application/vnd.github+json&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
    &lt;span class=&#34;s1&#34;&gt;&amp;#39;Authorization&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Bearer &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;TOKEN&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
    &lt;span class=&#34;s1&#34;&gt;&amp;#39;X-Github-Api-Version&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;2022-11-28&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;notifications&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;requests&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;https://api.github.com/notifications&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;headers&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;headers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;notification&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;notifications&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;json&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;():&lt;/span&gt;
    &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;notification&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;: &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;notification&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;subject&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;][&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;title&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
    &lt;span class=&#34;n&#34;&gt;requests&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;delete&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;https://api.github.com/notifications/threads/&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;notification&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;id&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;headers&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;headers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;161&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/tech/discussions-161/</link>
      <pubDate>Tue, 23 Sep 2025 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/tech/discussions-161/</guid>
      
    </item>
    
    <item>
      <title>把站点域名从 cc 换成 com 了</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;在 V2EX 看到《&lt;a href=&#34;https://v2ex.com/t/1159380&#34;&gt;请谨慎使用 .cc 域名作为产品域名， Google 提交 Sitemap 始终失败&lt;/a&gt;》的帖子，发现 cc 域名发布的文章 Google 收录好像的确不如必应，也认同目前 &lt;strong&gt;&amp;ldquo;com &amp;gt; net/org&amp;rdquo;&lt;/strong&gt; 的现状，想着 &lt;code&gt;weiyan.com&lt;/code&gt; 肯定没戏了，自己对 org 也没什么想法，com 空着也是空着，于是，就把 &lt;code&gt;weiyan.cc&lt;/code&gt; 换成了 &lt;code&gt;shenwy.com&lt;/code&gt;。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;好了，现在个人的站点通过 &lt;a href=&#34;https://shenwy.com&#34;&gt;&lt;strong&gt;https://shenwy.com&lt;/strong&gt;&lt;/a&gt; 也能正常访问了。在站点主题上，&lt;strong&gt;&amp;ldquo;mkdocs-material&amp;rdquo;&lt;/strong&gt; 依然是目前的首选！&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;160&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-160/</link>
      <pubDate>Wed, 17 Sep 2025 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-160/</guid>
      
    </item>
    
    <item>
      <title>一次发生在 GitHub 的 Trigger security scan 异常事件</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;2025年9月4日，早上起来看邮件时候，突然发现，邮箱一下子多了几百封 GitHub Actions 构建异常的邮件！&lt;/p&gt;
&lt;p&gt;震惊紧张后，第一个反应就是，该不会是个人的 personal access token，或者密码泄露了，被人动态进行 commit 提交，以至于出现批量的 Actions 异常。于是，赶紧登录 GitHub 看一下到底发生了什么事。&lt;/p&gt;
&lt;p&gt;首先，看到个人账号下基本每个 Public 仓库，甚至包括 organization 下个人创建的所有 Public 仓库，都出现了类似 &lt;strong&gt;&amp;ldquo;Trigger security scan&amp;rdquo;&lt;/strong&gt; 的 commits 提交。
&lt;img alt=&#34;trigger-security-scan&#34; src=&#34;https://gi.weiyan.tech/2025/09/trigger-security-scan.png&#34; /&gt;&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;点击进去一看，好家伙，直接往 README 里面进行注释性的提交。
&lt;img alt=&#34;commit-change-readme&#34; src=&#34;https://gi.weiyan.tech/2025/09/commit-change-readme.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;再回到 commits 记录一看，果然有连续多次的提交。
&lt;img alt=&#34;commits-20250902&#34; src=&#34;https://gi.weiyan.tech/2025/09/commits-20250902.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;第二，回去仓库的 &lt;code&gt;.github/workflows&lt;/code&gt; 下一看，还莫名其妙多了一个 &lt;code&gt;github_actions_security.yml&lt;/code&gt; 自动化流程。
&lt;img alt=&#34;github-actions-security&#34; src=&#34;https://gi.weiyan.tech/2025/09/github-actions-security.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;github-actions-security-yaml&#34; src=&#34;https://gi.weiyan.tech/2025/09/github-actions-security-yaml.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;这就直接把 &lt;code&gt;PERSONAL_ACCESS_TOKEN&lt;/code&gt; 的信息提交到了一个 &lt;code&gt;https://bold-dhawan.45-139-104-115.plesk.page&lt;/code&gt; 的未知站点。
&lt;img alt=&#34;bold-dhawan-45-139-104-115-plesk-page&#34; src=&#34;https://gi.weiyan.tech/2025/09/plesk-page.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;这一连串的骚操作下来，&lt;strong&gt;可以肯定的是 token 或者其他密码泄露，或者是某个共用的 actions 出问题了&lt;/strong&gt;，所以：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;第一件事情，先把 personal access token 全部删除。&lt;/li&gt;
&lt;li&gt;清除所有仓库已存在的 &lt;code&gt;github_actions_security.yml&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;最后，静观后效。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;在文章最后，感谢 @guedou 在问题仓库中的建议。  &lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;compromised-token&#34; src=&#34;https://gi.weiyan.tech/2025/09/compromised-token.png&#34; /&gt;&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;159&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/tech/discussions-159/</link>
      <pubDate>Thu, 04 Sep 2025 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/tech/discussions-159/</guid>
      
    </item>
    
    <item>
      <title>GitHub 2FA 双因素身份验证浏览器插件</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;在 GitHub 贡献一定的代码量后，GitHub 会要求启用双因素身份验证，否则登录会受到影响。GitHub 提供了短信验证（&lt;strong&gt;SMS/Text message&lt;/strong&gt;，但是不支持 +86 国内手机号），APP 扫码验证（&lt;strong&gt;Authenticator app&lt;/strong&gt;），GitHub 移动 APP（&lt;strong&gt;GitHub Mobile&lt;/strong&gt;），&lt;strong&gt;Security keys&lt;/strong&gt;。    &lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;2fa-github&#34; src=&#34;https://gi.weiyan.tech/2025/08/2fa-github.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;如果手机不在身边，想要在另外一台电脑登录自己的 GitHub 账号，这里推荐一种最简单的方式，就是用浏览器插件验证。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;h2 id=&#34;安装插件&#34;&gt;安装插件&lt;a class=&#34;headerlink&#34; href=&#34;#安装插件&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Authenticator 可以直接去 &lt;a href=&#34;https://authenticator.cc/&#34;&gt;https://authenticator.cc/&lt;/a&gt; 下载包括 Chrome、Firefox、Edge 对应的插件，或者是&lt;a href=&#34;https://github.com/Authenticator-Extension/Authenticator&#34;&gt;源码&lt;/a&gt;。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Chrome 插件：&lt;a href=&#34;https://chromewebstore.google.com/detail/%E8%BA%AB%E4%BB%BD%E9%AA%8C%E8%AF%81%E5%99%A8/bhghoamapcdpbohphigoooaddinpkbai?hl=zh-CN&amp;amp;utm_source=ext_sidebar&#34;&gt;身份验证器&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&#34;authentication-google&#34; src=&#34;https://gi.weiyan.tech/2025/08/authentication-google.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;配置-github-authenticator-app&#34;&gt;配置 GitHub Authenticator app&lt;a class=&#34;headerlink&#34; href=&#34;#配置-github-authenticator-app&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;GitHub 头像 → Settings → Password and authentication，在 Two-factor methods 栏点击 Authenticator app 的 Edit 按钮，会得到一个 2FA 的二维码。    &lt;br /&gt;
&lt;img alt=&#34;authenticator-app-edit&#34; src=&#34;https://gi.weiyan.tech/2025/08/authenticator-app-edit.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;身份验证器&#34;&gt;身份验证器&lt;a class=&#34;headerlink&#34; href=&#34;#身份验证器&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;点击浏览器的 &amp;ldquo;身份验证器&amp;rdquo; 插件，点击扫描图标，扫描上一步 GitHub Authenticator app 页面中生成的二维码。   &lt;br /&gt;
&lt;img alt=&#34;authenticator-cc-scan&#34; src=&#34;https://gi.weiyan.tech/2025/08/authenticator-cc-scan.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;扫描后会自动生成6位数代码。   &lt;br /&gt;
&lt;img alt=&#34;github-2fa-authentication-number&#34; src=&#34;https://gi.weiyan.tech/2025/08/github-2fa-authentication-number.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;这就是在 GitHub 登录账号时需要输入的 Two-factor authentication。   &lt;br /&gt;
&lt;img alt=&#34;github-two-factor-authentication&#34; src=&#34;https://gi.weiyan.tech/2025/08/github-two-factor-authentication.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;导出备份&#34;&gt;导出备份&lt;a class=&#34;headerlink&#34; href=&#34;#导出备份&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;点击浏览器的 &amp;ldquo;身份验证器&amp;rdquo; 插件，左上角设置图标 → 备份 → 下载备份文件，会得到一个 &lt;strong&gt;authenticator.txt&lt;/strong&gt; 的文件。   &lt;br /&gt;
&lt;img alt=&#34;authenticator-cc-download-backup&#34; src=&#34;https://gi.weiyan.tech/2025/08/authenticator-cc-download-backup.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;导入备份&#34;&gt;导入备份&lt;a class=&#34;headerlink&#34; href=&#34;#导入备份&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;登录另外一台电脑，同样先安装 &amp;ldquo;身份验证器&amp;rdquo; 插件，安装完成后导入上一步得到的 &lt;strong&gt;authenticator.txt&lt;/strong&gt;，即可在该电脑，即可得到该电脑自动生成6位数 Two-factor authentication 代码，从而完成 GitHub 账号登录。&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;158&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-158/</link>
      <pubDate>Wed, 27 Aug 2025 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-158/</guid>
      
    </item>
    
    <item>
      <title>这个夏天</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;2025 年，立夏是 5 月 5 日。这一天是二十四节气中的第七个节气，标志着春季的结束和夏季的开始。立夏表示阳气开始旺盛，万物进入快速生长期的开始，昼长夜短，气温升高，雷雨增多，是温度明显升高，炎暑将临的节气。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;h2 id=&#34;工作只是生活的一部分&#34;&gt;工作只是生活的一部分&lt;a class=&#34;headerlink&#34; href=&#34;#工作只是生活的一部分&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;从端午过后的六月开始，先是工作遇上了一大堆的变动，不管是工作内容还是其他上层为了应对降本增效带来的一系列迷之操作，给原有的工作带来了很大的困扰。每天的工作开始精神内耗，再加上自己本身是一个事情会想的比较多的人，导致了这几个月以来工作都过得很压抑，很纠结。&lt;/p&gt;
&lt;p&gt;很多悲观的情绪不是好事，时时刻刻跟自己说，工作是人生一部份，但绝不是全部！不是真的要尽全力，不要入戏太深，不要让自己落入情绪陷阱！&lt;/p&gt;
&lt;h2 id=&#34;打不死的小强&#34;&gt;打不死的小强&lt;a class=&#34;headerlink&#34; href=&#34;#打不死的小强&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;2025 年上半年的工作非得要说收获，只能说自己在 AI，尤其 RAG 这一块多了一分熟悉，从技术路线到在极其有限的云服务器上手动实践，漫漫长征有了第一步，在 AI 领域的投入或许是个人职业生涯的第二次重大转变，也是一次学习的机会，没有放弃，需要鼓起勇气撸起袖子加油干。&lt;/p&gt;
&lt;h2 id=&#34;认清生活的真相后依然热爱生活&#34;&gt;认清生活的真相后依然热爱生活&lt;a class=&#34;headerlink&#34; href=&#34;#认清生活的真相后依然热爱生活&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;其次是七月初老母亲突如其来的生病，让原本按部就班的日子一下子变的紧凑起来。一方面担心老母亲的病情，另一方面为下班后的孩子接送学习事宜忙碌。&lt;/p&gt;
&lt;p&gt;7 月中老母亲病情加剧 —— 于是辗转几十公里的市人民医院疼痛科前前后后看了三次，终于有所缓解，后续还需多加修养。现如今的老家地处边远山区，只有镇上一个卫生站，虽然也还有不少私人诊所，医疗条件终归有限，市里有更好的三甲医院却又路途遥远，农村慢节奏的生活下医疗保障始终是一个挑战。&lt;/p&gt;
&lt;p&gt;现如今的大环境下，子女不能常伴身边，农村独居老人也成了一种常态。回想起我们的父辈，他们经历了从农村到城市到最终回归农村，经历了农村从曾经热闹安详到现如今的冷落凋零，他们吃过的苦也非我们 90 一代所能体会得到的。历史的大幕褪去，现在只剩下他们佝偻的身影，还在曾经熟悉的土地上坚守着。&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;157&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-157/</link>
      <pubDate>Thu, 14 Aug 2025 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-157/</guid>
      
    </item>
    
    <item>
      <title>Dify 上的 Ollama 不支持 Rerank 模型</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;在 Dify Cloud 平台调用各大平台的大模型 API 一直都没发现这个问题，随着开始折腾本地化使用，才发现 Ollama 部署大模型虽然方便，但是 RAG 中 Dify 知识库混合检索，需要 Rerank 模型时，这一点上，Ollama 居然是不支持 Rerank 模型的。   &lt;br /&gt;
&lt;img alt=&#34;rag-pipelines&#34; src=&#34;https://gi.weiyan.tech/2025/07/rag-pipelines.webp&#34; /&gt;&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;Dify Cloud 的系统模型设置，在接入了阿里云百炼的通义千问 API Key 后，Rerank 模型会默认显示通义千问的 &lt;code&gt;gte-rerank&lt;/code&gt; 和 &lt;code&gt;gte-rerank-v2&lt;/code&gt;。
&lt;img alt=&#34;dify-cloud-rerank&#34; src=&#34;https://gi.weiyan.tech/2025/07/dify-cloud-rerank.webp&#34; /&gt;&lt;/p&gt;
&lt;p&gt;本地部署 Ollama + Dify，在 Dify 选择 Ollama 模型供应商，发现 Ollama 只支持 LLM 和 Text Embedding，不支持 Rerank 模型。
&lt;img alt=&#34;dify-local-ollama-models&#34; src=&#34;https://gi.weiyan.tech/2025/07/dify-local-ollama-models.webp&#34; /&gt;&lt;/p&gt;
&lt;p&gt;看到有提到使用 Xinference 平台来部署 Rerank 模型的，特意去看了一下 Xorbits Inference，发现的确是除了 LLM 和 Text Embedding 还支持 Rerank、Speech2text、TTS。
&lt;img alt=&#34;dify-xorbits-inference&#34; src=&#34;https://gi.weiyan.tech/2025/07/dify-xorbits-inference.webp&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;参考资料&#34;&gt;参考资料&lt;a class=&#34;headerlink&#34; href=&#34;#参考资料&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://zhuanlan.zhihu.com/p/719782211&#34;&gt;安装 Dify 并集成 Ollama 和 Xinference&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/langgenius/dify/issues/10917&#34;&gt;&lt;strong&gt;add Ollama rerank model&lt;/strong&gt; - langgenius/dify#10917&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;156&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/tech/discussions-156/</link>
      <pubDate>Tue, 15 Jul 2025 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/tech/discussions-156/</guid>
      
    </item>
    
    <item>
      <title>NCBI Blast 源码编译安装</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;记录一下在老破旧服务器从源码编译安装 NCBI Blast 2.15.0+ 遇到的一些问题。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;&lt;img alt=&#34;Basic-Local-Alignment-Search-Tool&#34; src=&#34;https://gi.weiyan.tech/2025/07/ncbi-blast.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;先说一下，总体的安装步骤。&lt;/p&gt;
&lt;p&gt;首先，根据 &lt;code&gt;ncbi-blast-2.xx.x+-src/c++/src/algo/blast/core/README&lt;/code&gt; 的说明，blast+ 的源码编译安装，直接通过下面命令即可：
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;./configure&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--with-projects&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;scripts/projects/blast_core_lib.lst&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;--without-debug&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--with-mt&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--with-build-root&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;ReleaseMT
&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ReleaseMT/build
make&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;all_p
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;其实 &lt;code&gt;configure&lt;/code&gt; 这一步的最后也会有提示：
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;./configure&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--with-projects&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;scripts/projects/blast_core_lib.lst&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;--without-debug&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--with-mt&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--with-build-root&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;ReleaseMT&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;===============================================================================&lt;/span&gt;
NCBI&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;C++&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Toolkit&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;documentation:
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Online:&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;https://www.ncbi.nlm.nih.gov/toolkit/doc/book/
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Local:&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;./doc/public/index.html
For&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;available&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;configuration&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;flags&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;run:&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;./configure&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--help

&lt;span class=&#34;nv&#34;&gt;CFLAGS&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-Wall&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-Wno-format-y2k&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-pthread&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-fopenmp&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-O2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-fPIC
&lt;span class=&#34;nv&#34;&gt;CXXFLAGS&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-Wall&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-Wno-format-y2k&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-pthread&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-fopenmp&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-O2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-fPIC
&lt;span class=&#34;nv&#34;&gt;CPPFLAGS&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-DNDEBUG&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-D_LARGEFILE_SOURCE&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-D_FILE_OFFSET_BITS&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;64&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-D_LARGEFILE64_SOURCE&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;-D_MT&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-D_REENTRANT&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-D_THREAD_SAFE
&lt;span class=&#34;nv&#34;&gt;LDFLAGS&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-Wl,--enable-new-dtags&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-Wl,-export-dynamic&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-pthread&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-fopenmp&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;-O2

LIBRARIES:&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;build&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;as&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;static&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;by&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;default
FEATURES:&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;Int8GI&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;GCC&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;MT&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;LFS&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;DLL&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;unix&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;WinMain&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Linux
PACKAGES:
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;enabled:&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;UUID&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Iconv&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Z&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;BZ2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;PCRE&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;LocalPCRE&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;MBEDTLS&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;GMP&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;GMP&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;OPENSSL&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;KRB5&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;CURL&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;MySQL&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;BerkeleyDB&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;BerkeleyDB++&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;PYTHON&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;PYTHON27&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;PYTHON3&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;PERL&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Boost.Iostreams&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Boost.Program-Options&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Boost.Regex&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Boost.Serialization&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Boost.Spirit&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Boost.Test.Included&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;OpenGL&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;GLUT&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;GLEW&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;EXPAT&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;LIBXML&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;LIBXSLT&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;LIBEXSLT&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;SQLITE3&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;HDF5&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;JPEG&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;PNG&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;TIFF&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;XPM&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FreeType&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;LMDB&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;LocalLMDB&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;LIBUV
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;disabled:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FUSE&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;LIBUNWIND&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;LIBDW&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;BACKWARD_CPP&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;LocalZ&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;LocalBZ2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;LZO&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ZSTD&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;GCRYPT&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;NETTLE&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;GNUTLS&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Sybase&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;DBLib&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FreeTDS&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ODBC&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;PYTHON25&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;PYTHON26&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Boost.Chrono&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Boost.Filesystem&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Boost.System&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Boost.Test&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Boost.Thread&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;C-Toolkit&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;NCBICRYPT&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;MESA&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;wxWidgets&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;wx2.8&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Fast-CGI&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FASTCGIPP&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;LocalSSS&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;LocalMSGMAIL2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;SSSUTILS&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;LocalNCBILS&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;NCBILS2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;SSSDB&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;SP&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ORBacus&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ICU&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;SABLOT&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Xerces&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Xalan&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Zorba&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;SQLITE3ASYNC&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;VDB&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;NGS&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;OECHEM&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;SGE&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;DRMAA2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;MUPARSER&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;GIF&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;UNGIF&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;GL2PS&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FTGL&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;MAGIC&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;MIMETIC&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;GSOAP&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;AVRO&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Cereal&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;SASL2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;MONGODB&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;MONGODB3&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;LEVELDB&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;LIBURING&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ROCKSDB&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;GMOCK&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;LAPACK&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;LIBSSH2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;CASSANDRA&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;NGHTTP2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;H2O&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;INFLUXDB&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;LIBXLSXWRITER&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;PROTOBUF&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;GRPC&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;MSGSL&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;AWS_SDK&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;CRC32C&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;GOOGLE_CLOUD&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;HIREDIS&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;APACHE_ARROW&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;LIBRDKAFKA&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;CPPKAFKA&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;THRIFT&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;NLohmann_JSON&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;YAML_CPP&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;OPENTRACING&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;JAEGER
PROJECTS:
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;enabled:&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;cgi&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;serial&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;objects&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;dbapi&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;app&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;algo
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;disabled:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bdb&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ctools&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;gui&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;gbench

Tools&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;flags&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;paths:&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;/software/src/build/ncbi-blast-2.16.0+-src/c++/ReleaseMT/build/Makefile.mk
Configuration&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;header:&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;/software/src/build/ncbi-blast-2.15.0+-src/c++/ReleaseMT/inc/ncbiconf_unix.h

To&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;build&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;everything:&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/software/src/build/ncbi-blast-2.15.0+-src/c++/ReleaseMT/build&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/opt/rh/devtoolset-7/root/usr/bin/make&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;all_r
or&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;simply&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;run&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/opt/rh/devtoolset-7/root/usr/bin/make&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;current&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;directory
To&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;build&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;selected&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;projects&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;as&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;listed&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;scripts/projects/blast_core_lib.lst&amp;quot;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;:
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/software/src/build/ncbi-blast-2.15.0+-src/c++/ReleaseMT/build&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/opt/rh/devtoolset-7/root/usr/bin/make&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;all_p

*******&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;CONFIGURATION&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;SUCCESSFUL&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;*******
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;梳理一下它整个步骤，其实就是 &lt;strong&gt;&lt;code&gt;configure&lt;/code&gt;&lt;/strong&gt; → &lt;strong&gt;生成 &lt;code&gt;Makefile.mk&lt;/code&gt;&lt;/strong&gt; → &lt;strong&gt;&lt;code&gt;make&lt;/code&gt;&lt;/strong&gt;。&lt;/p&gt;
&lt;h2 id=&#34;makefilemk&#34;&gt;Makefile.mk&lt;a class=&#34;headerlink&#34; href=&#34;#makefilemk&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;很不幸的是，个人在 CentOS 6.5 的老破旧服务器上执行 &lt;code&gt;configure&lt;/code&gt; 或者 &lt;code&gt;make&lt;/code&gt; 出现了 &lt;code&gt;Makefile.mk:682: *** missing separator.  Stop.&lt;/code&gt; 的异常。&lt;/p&gt;
&lt;p&gt;对于这个突如其来的错误，本人最开始也想当然的认为这是 &lt;code&gt;Makefile&lt;/code&gt; 语法的一个BUG，很明显 Makefile 中命令的前缀默认要使用 Tab, 不能使用 4 个空格代替，因此需要在 &lt;code&gt;Makefile.mk&lt;/code&gt; 682 行开始用 Tab 替换四个空格开头的行。&lt;/p&gt;
&lt;p&gt;事实上，这个问题的根本原因并非单纯的 &lt;code&gt;Makefile&lt;/code&gt; 语法的问题，而是问题出现在 &lt;strong&gt;&lt;code&gt;configure&lt;/code&gt;&lt;/strong&gt; → &lt;strong&gt;生成 &lt;code&gt;Makefile.mk&lt;/code&gt;&lt;/strong&gt; 这一步。经过对 &lt;strong&gt;&lt;code&gt;configure&lt;/code&gt;&lt;/strong&gt; 源码排查了一下发现，问题就出在 &lt;code&gt;curl-config --static-libs&lt;/code&gt; 的错误输出被直接插入到了 &lt;code&gt;Makefile&lt;/code&gt; 中，导致 &lt;code&gt;make&lt;/code&gt; 误解析这些文本（如 &lt;code&gt;--ca&lt;/code&gt;, &lt;code&gt;--cc&lt;/code&gt; 等）为 &lt;code&gt;Makefile&lt;/code&gt; 规则，从而引发 &lt;code&gt;missing separator&lt;/code&gt; 和 &lt;code&gt;ignoring old recipe&lt;/code&gt; 错误。
&lt;img alt=&#34;blast-curl-config&#34; src=&#34;https://gi.weiyan.tech/2025/07/blast-curl-config.webp&#34; /&gt;&lt;/p&gt;
&lt;p&gt;因此，有几个解决方法。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;方法1，修改 &lt;code&gt;Makefile.mk&lt;/code&gt;，确保正确处理 &lt;code&gt;curl-config&lt;/code&gt; 的输出。例如：
  &lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;# 安全获取静态库链接信息（避免错误输出污染 Makefile）
CURL_STATIC_LIBS := $(shell curl-config --static-libs 2&amp;gt;/dev/null || echo &amp;quot;-lcurl&amp;quot;)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;方法2：如果系统支持 &lt;code&gt;pkg-config&lt;/code&gt;，可以改用更可靠的方式获取 &lt;code&gt;libcurl&lt;/code&gt; 链接信息。
  &lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;CURL_LIBS&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;:&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;shell&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pkg-config&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--libs&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;libcurl&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;
CURL_STATIC_LIBS&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;:&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;shell&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pkg-config&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--static&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--libs&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;libcurl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&amp;gt;/dev/null&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;||&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;-lcurl&amp;quot;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;方法3：在 &lt;code&gt;configure&lt;/code&gt; 一步中通过 &lt;code&gt;--without-curl&lt;/code&gt; 来禁用 &lt;code&gt;libcurl&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;zlib_ver_major&#34;&gt;ZLIB_VER_MAJOR&lt;a class=&#34;headerlink&#34; href=&#34;#zlib_ver_major&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;make&lt;/code&gt; 过程中出现 &lt;code&gt;ZLIB_VER_MAJOR&lt;/code&gt; 相关错误：
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;all_r
Build&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;session&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ID:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;37264a70-80c7-4bfb-857e-3fcc536c2046
/opt/rh/devtoolset-7/root/usr/bin/make&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-C&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;corelib&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;all_r&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;||&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;exit&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;5&lt;/span&gt;
......
/opt/rh/devtoolset-7/root/usr/bin/make&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;Makefile.compress.lib&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Nothing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;be&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;flag-stamps&lt;span class=&#34;s1&#34;&gt;&amp;#39;.&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;/opt/rh/devtoolset-7/root/usr/bin/make -f /software/ncbi-blast-2.16.0+/build/Makefile.lib.tmpl srcdir=/software/ncbi-blast-2.16.0+/src/ncbi-blast-2.16.0+-src/c++/src/util/compress/api TMPL=compress -w all&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;make[4]: Entering directory &amp;#39;&lt;/span&gt;/software/ncbi-blast-2.16.0+/build/util/compress/api&lt;span class=&#34;s1&#34;&gt;&amp;#39;&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;/opt/rh/devtoolset-7/root/usr/bin/g++  -std=gnu++17 -msse4.2 -c  -Wall -Wno-format-y2k  -pthread -fopenmp -O2 -fPIC   -DNDEBUG -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE   -D_MT -D_REENTRANT -D_THREAD_SAFE -I/software/ncbi-blast-2.16.0+/inc -I/software/ncbi-blast-2.16.0+/src/ncbi-blast-2.16.0+-src/c++/include      -DNCBI_BUILD_SESSION_ID=37264a70-80c7-4bfb-857e-3fcc536c2046 /software/ncbi-blast-2.16.0+/src/ncbi-blast-2.16.0+-src/c++/src/util/compress/api/zlib.cpp -o zlib.o&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;/software/ncbi-blast-2.16.0+/src/ncbi-blast-2.16.0+-src/c++/src/util/compress/api/zlib.cpp: In member function ‘virtual ncbi::CVersionInfo ncbi::CZipCompression::GetVersion() const’:&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;/software/ncbi-blast-2.16.0+/src/ncbi-blast-2.16.0+-src/c++/src/util/compress/api/zlib.cpp:333:25: error: ‘ZLIB_VER_MAJOR’ was not declared in this scope&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;     return CVersionInfo(ZLIB_VER_MAJOR, ZLIB_VER_MINOR, ZLIB_VER_REVISION, &amp;quot;zlib&amp;quot;);&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;                         ^~~~~~~~~~~~~~&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;/software/ncbi-blast-2.16.0+/src/ncbi-blast-2.16.0+-src/c++/src/util/compress/api/zlib.cpp:333:25: note: suggested alternative: ‘ZLIB_VERSION’&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;     return CVersionInfo(ZLIB_VER_MAJOR, ZLIB_VER_MINOR, ZLIB_VER_REVISION, &amp;quot;zlib&amp;quot;);&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;                         ^~~~~~~~~~~~~~&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;                         ZLIB_VERSION&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;/software/ncbi-blast-2.16.0+/src/ncbi-blast-2.16.0+-src/c++/src/util/compress/api/zlib.cpp:333:41: error: ‘ZLIB_VER_MINOR’ was not declared in this scope&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;     return CVersionInfo(ZLIB_VER_MAJOR, ZLIB_VER_MINOR, ZLIB_VER_REVISION, &amp;quot;zlib&amp;quot;);&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;                                         ^~~~~~~~~~~~~~&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;/software/ncbi-blast-2.16.0+/src/ncbi-blast-2.16.0+-src/c++/src/util/compress/api/zlib.cpp:333:41: note: suggested alternative: ‘ZLIB_VERSION’&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;     return CVersionInfo(ZLIB_VER_MAJOR, ZLIB_VER_MINOR, ZLIB_VER_REVISION, &amp;quot;zlib&amp;quot;);&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;                                         ^~~~~~~~~~~~~~&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;                                         ZLIB_VERSION&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;/software/ncbi-blast-2.16.0+/src/ncbi-blast-2.16.0+-src/c++/src/util/compress/api/zlib.cpp:333:57: error: ‘ZLIB_VER_REVISION’ was not declared in this scope&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;     return CVersionInfo(ZLIB_VER_MAJOR, ZLIB_VER_MINOR, ZLIB_VER_REVISION, &amp;quot;zlib&amp;quot;);&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;                                                         ^~~~~~~~~~~~~~~~~&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;/software/ncbi-blast-2.16.0+/src/ncbi-blast-2.16.0+-src/c++/src/util/compress/api/zlib.cpp:333:57: note: suggested alternative: ‘ZLIB_VERSION’&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;     return CVersionInfo(ZLIB_VER_MAJOR, ZLIB_VER_MINOR, ZLIB_VER_REVISION, &amp;quot;zlib&amp;quot;);&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;                                                         ^~~~~~~~~~~~~~~~~&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;                                                         ZLIB_VERSION&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;make[4]: *** [/software/ncbi-blast-2.16.0+/build/Makefile.rules:103: zlib.o] Error 1&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;make[4]: Leaving directory &amp;#39;&lt;/span&gt;/software/ncbi-blast-2.16.0+/build/util/compress/api&lt;span class=&#34;s1&#34;&gt;&amp;#39;&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;FAILED: src/util/compress/api/Makefile.compress.lib&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;make[4]: Entering directory &amp;#39;&lt;/span&gt;/software/ncbi-blast-2.16.0+/build/util/compress/api&lt;span class=&#34;s1&#34;&gt;&amp;#39;&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;/bin/rm -f libxcompress.a .xcompress.dep .libxcompress.a.stamp&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;/bin/rm -f /software/ncbi-blast-2.16.0+/lib/libxcompress.a /software/ncbi-blast-2.16.0+/status/.xcompress.dep \&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;    /software/ncbi-blast-2.16.0+/lib/libxcompress-static.a /software/ncbi-blast-2.16.0+/status/.xcompress-static.dep&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;make[4]: Leaving directory &amp;#39;&lt;/span&gt;/software/ncbi-blast-2.16.0+/build/util/compress/api&lt;span class=&#34;s1&#34;&gt;&amp;#39;&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;make[3]: *** [/software/ncbi-blast-2.16.0+/src/ncbi-blast-2.16.0+-src/c++/src/build-system/Makefile.meta_l:336: all.nonusr] Error 2&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;make[3]: Leaving directory &amp;#39;&lt;/span&gt;/software/ncbi-blast-2.16.0+/build/util/compress/api&lt;span class=&#34;s1&#34;&gt;&amp;#39;&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;make[2]: *** [/software/ncbi-blast-2.16.0+/src/ncbi-blast-2.16.0+-src/c++/src/build-system/Makefile.meta_r:41: all_r.real] Error 5&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;make[2]: Leaving directory &amp;#39;&lt;/span&gt;/software/ncbi-blast-2.16.0+/build/util/compress&lt;span class=&#34;s1&#34;&gt;&amp;#39;&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;make[1]: *** [/software/ncbi-blast-2.16.0+/src/ncbi-blast-2.16.0+-src/c++/src/build-system/Makefile.meta_r:41: all_r.real] Error 5&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;make[1]: Leaving directory &amp;#39;&lt;/span&gt;/software/ncbi-blast-2.16.0+/build/util&lt;span class=&#34;err&#34;&gt;&amp;#39;&lt;/span&gt;
make:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;***&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;/software/ncbi-blast-2.16.0+/src/ncbi-blast-2.16.0+-src/c++/src/build-system/Makefile.meta_r:41:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;all_r.real&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Error&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;5&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;最后，想说的是，以上扒拉扒拉折腾了那么多，到最后还是没能完整安装起来，只好先放弃了，后面有时间再慢慢去 debug 看看吧。&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;155&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/tech/discussions-155/</link>
      <pubDate>Sun, 13 Jul 2025 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/tech/discussions-155/</guid>
      
    </item>
    
    <item>
      <title>带着女儿泡星巴克</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;外面将近 40 度的似火艳阳把我们的户外活动彻底给劝退了，今天尝试着带女儿过来家里旁边的星巴克，她在画画做练习题，我在忙自己的一些事情，看起来也算是一个挺好的选择。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;&lt;img alt=&#34;starbucks-20250705&#34; src=&#34;https://gi.weiyan.tech/2025/07/starbucks-20250705.jpg&#34; /&gt;&lt;/p&gt;
&lt;p&gt;虽然有空调的舒适，但小孩子好动，想着应该也呆不了太长时间，但出乎意外的是她居然可以很专注沉浸在自己的玩具时间。&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;154&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-154/</link>
      <pubDate>Sat, 05 Jul 2025 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-154/</guid>
      
    </item>
    
    <item>
      <title>热爱生活</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;blockquote&gt;
&lt;p&gt;世界上只有一种真正的英雄主义，那就是在认清生活的真相后依然热爱生活。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;!-- more --&gt;

&lt;p&gt;前一阵子的一个经历。&lt;/p&gt;
&lt;p&gt;晚上跟一众同事打完球，打车回家的路上，碰到一个很有意思的司机，一路上听着他分享了从 90 年代上大学，进国企，下岗，开公司，前几年公司注销的诸多经历，谈到当下社区大众迷茫，裹挟着压力前行，心中很是感慨。&lt;/p&gt;
&lt;p&gt;对于压力这个问题，近两年感触很深。大环境下的各行各业总有种越卷越烈的感觉，很多公司企业订单腰斩，于是开始内卷，卡各种考核卡各种日报周报月报，卡的让人喘不过气。消费上大家日益谨慎，除了必要的吃喝拉撒，娱乐旅游什么的也越来越提不起兴趣。那种说走就走的旅程，也因为挤不出时间变成了时常挂载嘴边的自我安慰。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;hello-man&#34; src=&#34;https://gi.weiyan.tech/2025/07/hello-man.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;心态这个问题，很多时候都充斥着焦虑，打球、游戏、徒步或许都能暂缓，但也正如 &amp;ldquo;世界上只有一种真正的英雄主义，那就是在认清生活的真相后依然热爱生活&amp;rdquo; 中所说，需要更多积极的勇气。&lt;/p&gt;
&lt;p&gt;抱怨没用，需要给自己信心，需要努力，需要在认清生活的真相后依然热爱生活。&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;153&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-153/</link>
      <pubDate>Mon, 23 Jun 2025 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-153/</guid>
      
    </item>
    
    <item>
      <title>这些年打过的羽毛球线</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;blockquote&gt;
&lt;p&gt;Categories: 博客/好玩&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;打羽毛球这么多年，用过的羽毛球线也就那么几款，从最开始的 NBG95 到现在的 BG80，感觉差不多就认准了 BG80。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;性能维度&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;80线（BG80）&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;80P线（BG80P）&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;95线（NBG95）&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;弹性&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;极致弹性，蓄力强，扣杀球速快&lt;/td&gt;
&lt;td&gt;弹性优异，略优于80线&lt;/td&gt;
&lt;td&gt;弹性良好，平衡性佳&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;击球感&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;硬朗，进攻性强&lt;/td&gt;
&lt;td&gt;硬中带弹，控球精准&lt;/td&gt;
&lt;td&gt;软硬适中，全面均衡&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;耐打性&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;耐用性一般，易断线&lt;/td&gt;
&lt;td&gt;耐磨性提升约20%（聚氨酯涂层）&lt;/td&gt;
&lt;td&gt;耐打性优秀，适合高频使用&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;控球性&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;包裹性强，但易走线&lt;/td&gt;
&lt;td&gt;棱形线芯设计，控球稳定&lt;/td&gt;
&lt;td&gt;平衡性佳，易培养手感&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;适用磅数&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;26-28磅（建议）&lt;/td&gt;
&lt;td&gt;26-30磅（可调）&lt;/td&gt;
&lt;td&gt;24-28磅（通用）&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;img alt=&#34;brave-sword-12n&#34; src=&#34;https://gi.weiyan.tech/2025/06/brave-sword-12n.jpg&#34; /&gt;&lt;/p&gt;
&lt;p&gt;拿到这把亮剑 12N 的时候也用过一段时间 XB63 线，虽然感觉比 80 线更舒服，但总体来说 BG80 性价比更高，XB63 相对价格更高而且也也一定能买得到。&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;152&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-152/</link>
      <pubDate>Sat, 07 Jun 2025 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-152/</guid>
      
    </item>
    
    <item>
      <title>端午节难看龙舟</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;blockquote&gt;
&lt;p&gt;Categories: 博客/乱弹&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;今年的端午节和六一儿童节叠在一起了，但是看龙舟却比往年更难，不只是人多，更多是龙舟排期更加分散。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;端午假期的第一天就去了海珠区的国家湿地公园，公园是极好的，很多荔枝、菠萝蜜、黄皮，还是一堆叫不上名字的水果，环境很好，还能看到一大片叫不出名字的花海。从龙潭地铁站 G 出口出来步行一小段就到了海珠湿地的北门，20 块买个门票进去，就可以开启湿地公园之旅。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://gi.weiyan.tech/2025/06/20250531-1.jpg&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://gi.weiyan.tech/2025/06/20250531-3.jpg&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://gi.weiyan.tech/2025/06/20250531-4.jpg&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://gi.weiyan.tech/2025/06/20250531-boat.jpg&#34; /&gt;&lt;/p&gt;
&lt;p&gt;除了人多，更遗憾的是没看上在爱莲亭举行的龙舟赛，一早蹲守的小伙伴说整个龙舟赛也就持续了 2 分钟左右，还目睹了亚洲飞人苏炳添参加划龙舟的风采。&lt;/p&gt;
&lt;p&gt;不死心。&lt;/p&gt;
&lt;p&gt;第二天，再接再厉，约了 4、5 个娃拖家带口浩浩荡荡往中大北门广场进发，开始第二波看龙舟之旅。没想到被现场人山人海，人头挤人头的场面给狠狠打脸了，费劲九牛二虎之力好不容易挤了进去，连个站的位置都没有。化身人肉梯子抱起娃看了不到十分钟，就跟着大部队匆匆忙忙败兴而归。&lt;/p&gt;
&lt;p&gt;没看上龙舟，看到海珠区老城区一些烟火气息的小巷，看到了补鞋的、补衣服的、小菜市场、小商贩等等，现在高楼大厦和过去传统融合在一起，有种很神奇的感觉。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://gi.weiyan.tech/2025/06/dragon-boat-3.webp&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://gi.weiyan.tech/2025/06/dragon-boat-1.jpg&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://gi.weiyan.tech/2025/06/dragon-boat-2.webp&#34; /&gt;&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;151&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-151/</link>
      <pubDate>Mon, 02 Jun 2025 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-151/</guid>
      
    </item>
    
    <item>
      <title>域名证书端口转发网络存储一站式解决</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;blockquote&gt;
&lt;p&gt;IPv6/IPv4 端口转发、Web 服务、动态域名、语音助手网络唤醒、IPv4 内网穿透、计划任务、自动证书、webdav、ftp、filebrowser、挂载阿里云盘/webdav 等多项功能。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;!-- more --&gt;

&lt;p&gt;使用 &lt;a href=&#34;https://github.com/shenweiyan/Digital-Garden/discussions&#34;&gt;GitHub Discussios&lt;/a&gt; 写作&lt;a href=&#34;https://weiyan.cc/&#34;&gt;博客&lt;/a&gt;一直都有一个很大的痛点就是图床的问题，没有接触 Lucky 的 &lt;strong&gt;&amp;ldquo;网络存储&amp;rdquo;&lt;/strong&gt; 功能前，个人一直在用自搭建的 &lt;a href=&#34;https://github.com/XPoet/picx/tree/v2&#34;&gt;PicX v2&lt;/a&gt; —— 这个方案有一个比较纠结的点：每次上传图片都要触发一次 pages 自动构建，这中间的耗时有点让人受不了。第二个问题是无法自动新创建目录。&lt;/p&gt;
&lt;p&gt;今天来介绍一个好玩的应用：&lt;a href=&#34;https://github.com/gdy666/lucky&#34;&gt;&lt;strong&gt;Lucky&lt;/strong&gt;&lt;/a&gt; —— 一个集合了端口转发、Web 服务、自动证书、WebDAV、FTP 和 FileBrowser 模块等功能的家用软硬路由公网利器。个人在阿里云 99 元/年 2 核 2G 配置的阿里云服务器上用了几个月，体验相当不错。&lt;/p&gt;
&lt;h2 id=&#34;自动证书&#34;&gt;自动证书&lt;a class=&#34;headerlink&#34; href=&#34;#自动证书&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;阿里云、腾讯云各大平台免费 SSL 证书的有效期都调整到 3 个月，及时续签是个问题。Lucky 的 ACME 证书默认启用全自动续签机制，无须人工干预。    &lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;lucky-ssl-tls&#34; src=&#34;https://gi.weiyan.tech/2025/05/lucky-ssl-tls.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;web-服务&#34;&gt;Web 服务&lt;a class=&#34;headerlink&#34; href=&#34;#web-服务&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Cloudflare 对每个托管的域名都有 3 个免费页面规则，例如，通过这个页面规则可以实现 &lt;a href=&#34;https://weiyan.tech&#34;&gt;https://weiyan.tech&lt;/a&gt; 跳转到 &lt;a href=&#34;https://github.com&#34;&gt;https://github.com&lt;/a&gt; 或者 &lt;a href=&#34;https://baidu.com&#34;&gt;https://baidu.com&lt;/a&gt; 任何一个你想要的域名。当然这种跳转通过 &lt;a href=&#34;https://weiyan.cc/blog/discussions-33/&#34;&gt;《使用 meta 实现页面的定时刷新或跳转》&lt;/a&gt; 也可以实现。&lt;/p&gt;
&lt;p&gt;但是这一切在 Lucky 的 Web 服务都是免费一键化配置，再配合上面的自动化证书，可以做很多好玩的事情。    &lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;lucky-web-sub-rule&#34; src=&#34;https://gi.weiyan.tech/2025/05/lucky-web-sub-rule.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;网络存储&#34;&gt;网络存储&lt;a class=&#34;headerlink&#34; href=&#34;#网络存储&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;这是最近个人才摸索到的另外一个好玩的用法。基本上可以让我把自搭建的 &lt;a href=&#34;https://github.com/XPoet/picx/tree/v2&#34;&gt;PicX v2&lt;/a&gt; 抛弃了。&lt;/p&gt;
&lt;p&gt;网络存储包含了&lt;strong&gt;存储管理&lt;/strong&gt;、&lt;strong&gt;WebDAV&lt;/strong&gt;、&lt;strong&gt;FTP&lt;/strong&gt; 和 &lt;strong&gt;FileBrowser&lt;/strong&gt; 模块，它提供了将本地存储、WebDAV 和阿里云盘挂载到 Lucky 内部的各个文件类服务功能。&lt;/p&gt;
&lt;p&gt;个人在阿里云 99 元/年的阿里云服务器上，开启 File Browser 可以完美解决文件上传、下载、分享的问题。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;lucky-file-browser-login&#34; src=&#34;https://gi.weiyan.tech/2025/05/lucky-file-browser-login.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;lucky-file-browser&#34; src=&#34;https://gi.weiyan.tech/2025/05/lucky-file-browser.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;借助 Web 服务下的&lt;strong&gt;文件服务&lt;/strong&gt;，可以实现类似 Pages 的图床服务。
&lt;img alt=&#34;lucky-webdev&#34; src=&#34;https://gi.weiyan.tech/2025/05/lucky-webdev.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;说到图床的应用，网上一搜有很多，但是像 &lt;a href=&#34;https://github.com/Molunerfinn/PicGo&#34;&gt;PicGo&lt;/a&gt;、&lt;a href=&#34;https://github.com/Kuingsmile/PicList&#34;&gt;PicList&lt;/a&gt; 之类都没有提供 Web 端的管理使用，需要下载安装。个人的使用更加注重于是否提供浏览器 Web 端的操作管理，一定要避免切换电脑再次安装带来的繁琐，仅一个浏览器可以完成上传、下载、删除等一系列管理操作。其次，可以上传图片到指定的目录！&lt;/p&gt;
&lt;h2 id=&#34;其他功能&#34;&gt;其他功能&lt;a class=&#34;headerlink&#34; href=&#34;#其他功能&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Lucky 的升级、备份、重新部署也是相当方便，只要备份好配置目录，一切都可以从头再来，基于 Docker 的安装大大降低了折腾的复杂性。&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;150&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-150/</link>
      <pubDate>Mon, 26 May 2025 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-150/</guid>
      
    </item>
    
    <item>
      <title>域名越来越贵了</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;blockquote&gt;
&lt;p&gt;Categories: 博客/乱弹&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;最近的这几天在续费域名的时候，发现在阿里云 com 都涨到 95 一年了，cc 也涨到了 80，有种马上就要突破百元大关的感觉。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;&lt;img alt=&#34;domain-price&#34; src=&#34;https://gi.weiyan.tech/2025/05/domain-price.webp&#34; /&gt;&lt;/p&gt;
&lt;p&gt;更离谱的是 cc 的普通域名，新购 10 年才 320，换成续费要 800，价格相差了 2 倍多。同样的 cc 域名在阿里云续费 80/年，腾讯云 65/年。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;aliyun-cc-domain&#34; src=&#34;https://gi.weiyan.tech/2025/05/aliyun-cc-domain.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;太魔幻了。&lt;/p&gt;
&lt;p&gt;蚊子再小也是肉，为了省那每年 15 块大洋，看来把我那个 WeiYan.CC 转到腾讯云也是不错。&lt;/p&gt;
&lt;p&gt;最后，手头有一个已注册长达 10 年的优质域名 &lt;strong&gt;bioinfo.top&lt;/strong&gt;（到期时间为 2034 年），现打算转让。价格十分实惠，对生物信息领域感兴趣的小伙伴们，欢迎咨询！&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;149&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-149/</link>
      <pubDate>Thu, 08 May 2025 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-149/</guid>
      
    </item>
    
    <item>
      <title>MkDocs Material 大法好</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;blockquote&gt;
&lt;p&gt;Categories: 博客/好玩&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;自从用上了 MkDocs Material，除了可以用作专业的文档生成器，发现其实也可以干些其他的杂活，例如用它自定义一个更加有辨识度的 Homepage，用它搭建一个属于自己的导航站点。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;Hugo 的 &lt;a href=&#34;https://github.com/navpage&#34;&gt;Navpage&lt;/a&gt; 导航虽然颜值上更舒服一些，但是和博客、站内搜索的集成依然有些割裂，自己对 Hugo 越来越缺乏学习的热情。另外一方面，反而更加热衷于在 &lt;a href=&#34;https://github.com/shenweiyan/Digital-Garden/discussions&#34;&gt;GitHub Discussions&lt;/a&gt; 持续记录自己的一些胡言乱语。&lt;/p&gt;
&lt;p&gt;感谢自己省吃俭用薅下来的 4 核 8G 小 VPS，几经折腾下，终于让 Homepage + Documents + Navigation 都集成在了一个 MkDocs Material 里面，先贴几张图，后面可能会开源，也可能会和 &lt;a href=&#34;https://github.com/navpage&#34;&gt;Navpage&lt;/a&gt; 整合在一起付费提供使用。&lt;/p&gt;
&lt;p align=&#34;center&#34;&gt;
    &lt;img src=&#34;https://gi.weiyan.tech/2025/04/home-pages.png&#34; alt&gt;&lt;br&gt;
    &lt;span&gt;Homepage&lt;/span&gt;
&lt;/p&gt;

&lt;p align=&#34;center&#34;&gt;
    &lt;img src=&#34;https://gi.weiyan.tech/2025/04/get-start-pages.png&#34; alt&gt;&lt;br&gt;
    &lt;span&gt;文档页面&lt;/span&gt;
&lt;/p&gt;

&lt;p align=&#34;center&#34;&gt;
    &lt;img src=&#34;https://gi.weiyan.tech/2025/04/docs-pages.png&#34; alt&gt;&lt;br&gt;
    &lt;span&gt;文档页面 - 目录&lt;/span&gt;
&lt;/p&gt;

&lt;p align=&#34;center&#34;&gt;
    &lt;img src=&#34;https://gi.weiyan.tech/2025/04/blog-pages.png&#34; alt&gt;&lt;br&gt;
    &lt;span&gt;博客页面&lt;/span&gt;
&lt;/p&gt;

&lt;p align=&#34;center&#34;&gt;
    &lt;img src=&#34;https://gi.weiyan.tech/2025/04/navigation-pages.png&#34; alt&gt;&lt;br&gt;
    &lt;span&gt;导航页面&lt;/span&gt;
&lt;/p&gt;

&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;110&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-110/</link>
      <pubDate>Fri, 25 Apr 2025 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-110/</guid>
      
    </item>
    
    <item>
      <title>Vim 缩进插入删除使用技巧</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;在服务器环境下，Vim 因其高效、轻量、无需图形界面的特性，确实是开发者最常用的代码编辑工具之一。针对 vim 使用过程中最常遇到的一些操作技巧简单记录一下。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;&lt;img alt=&#34;Vim-editor&#34; src=&#34;https://gi.weiyan.tech/2025/06/vim.webp&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;多行缩进&#34;&gt;多行缩进&lt;a class=&#34;headerlink&#34; href=&#34;#多行缩进&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;没有学会使用技巧前，最常规的做法还是一行行的缩进，针对大片段的长代码简直就是灾难。&lt;/p&gt;
&lt;h3 id=&#34;向前或向后缩进4个空格&#34;&gt;向前或向后缩进4个空格&lt;a class=&#34;headerlink&#34; href=&#34;#向前或向后缩进4个空格&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;按 &lt;code&gt;shift + v&lt;/code&gt; 组合键进入 &lt;code&gt;Visual Line&lt;/code&gt; 模式，可使用方向键选择多行；&lt;/li&gt;
&lt;li&gt;按 &lt;code&gt;&amp;lt;&lt;/code&gt; 或 &lt;code&gt;&amp;gt;&lt;/code&gt;，进行向前或向后缩进。注：有些设置为缩进一个 &lt;code&gt;Tab&lt;/code&gt; 单位。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;向前或向后缩进n个空格&#34;&gt;向前或向后缩进n个空格&lt;a class=&#34;headerlink&#34; href=&#34;#向前或向后缩进n个空格&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;向前缩进，实则是使用 &lt;code&gt;Visual Block&lt;/code&gt; 模式删除多余空格以达到向前缩进的效果。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;按 &lt;code&gt;ctrl + v&lt;/code&gt; 组合键进入&lt;code&gt;Visual Block&lt;/code&gt;模式；&lt;/li&gt;
&lt;li&gt;使用上下方向键可选择多行，使用前后方向键可选择空格大小长度；&lt;/li&gt;
&lt;li&gt;按下 &lt;code&gt;d&lt;/code&gt; 删除选中内容。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;向后缩进，实则是使用 &lt;code&gt;Visual Block&lt;/code&gt; 模式批量添加空格以达到向后缩进的效果。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;按&lt;code&gt;ctrl + v&lt;/code&gt;组合键进入&lt;code&gt;Visual Block&lt;/code&gt;模式；&lt;/li&gt;
&lt;li&gt;使用上下方向键可选择多行；&lt;/li&gt;
&lt;li&gt;按&lt;code&gt;shift + i&lt;/code&gt;组合键进入编辑模式；&lt;/li&gt;
&lt;li&gt;输入需要缩进的空格数量；&lt;/li&gt;
&lt;li&gt;按&lt;code&gt;esc&lt;/code&gt;按键完成操作。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;删除&#34;&gt;删除&lt;a class=&#34;headerlink&#34; href=&#34;#删除&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;d^&lt;/code&gt;：删除光标至行首内容&lt;/li&gt;
&lt;li&gt;&lt;code&gt;d$&lt;/code&gt;：删除光标至行尾内容&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dgg&lt;/code&gt;：删除光标前的所有内容&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dG&lt;/code&gt;：删除光标后的所有内容&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dd&lt;/code&gt;：删除当前行内容&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;多行注释插入与删除&#34;&gt;多行注释插入与删除&lt;a class=&#34;headerlink&#34; href=&#34;#多行注释插入与删除&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&#34;多行注释插入字符&#34;&gt;多行注释插入字符&lt;a class=&#34;headerlink&#34; href=&#34;#多行注释插入字符&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;进入 vi/vim 编辑器，按 &lt;strong&gt;&lt;code&gt;CTRL+V&lt;/code&gt;&lt;/strong&gt; 进入可视化模式（VISUAL BLOCK）；&lt;/li&gt;
&lt;li&gt;移动光标上移或者下移，选中多行的开头，如下图所示&lt;/li&gt;
&lt;li&gt;选择完毕后，按&lt;strong&gt;大写的 &lt;code&gt;I&lt;/code&gt; 键&lt;/strong&gt;，此时下方会提示进入 &amp;ldquo;insert&amp;rdquo; 模式，输入你要插入的注释符，例如 &lt;code&gt;#&lt;/code&gt;；&lt;/li&gt;
&lt;li&gt;最后按 &lt;strong&gt;&lt;code&gt;ESC&lt;/code&gt;&lt;/strong&gt; 键，你就会发现多行代码已经被注释了。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;多行删除注释&#34;&gt;多行删除注释&lt;a class=&#34;headerlink&#34; href=&#34;#多行删除注释&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;方法同上，&lt;strong&gt;&lt;code&gt;Ctrl+v&lt;/code&gt;&lt;/strong&gt; 进入列选择模式，移到光标把注释符选中，按下&lt;strong&gt;小写的 &lt;code&gt;d&lt;/code&gt; 键&lt;/strong&gt;，注释就被删除了。&lt;/li&gt;
&lt;/ol&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;111&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/tech/discussions-111/</link>
      <pubDate>Fri, 25 Apr 2025 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/tech/discussions-111/</guid>
      
    </item>
    
    <item>
      <title>一杯热茶一个下午</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;blockquote&gt;
&lt;p&gt;Categories: 博客/乱弹&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;除了图书馆、自习室，其实星巴克也算的上是一个码字的好地方，如果再点上一杯自己喜欢的热茶，伴随着耳机传来的音乐，也算的上极致的享受。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p align=&#34;center&#34;&gt;
    &lt;img src=&#39;https://gi.weiyan.tech/2025/04/starbuks-red-tea.webp&#39; alt=&#39;starbuks-red-tea&#39; width=600&gt;
&lt;/p&gt;

&lt;p&gt;外面的世界很复杂，陌生人之间的沟通交流已然处处勾心斗角，夫妻家庭之间的摩擦磕碰更是加剧内心的孤独。总希望有人可以关心，总希望能一家人和睦平安，事实上不会事事如意。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“人到中年的男人，时常会觉得孤独，因为他一睁开眼睛，周围都是要依靠他的人，却没有他可以依靠的人。”   &lt;br /&gt;
—— 张爱玲&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;其实说白了，就是人到中年不如狗，不敢老，不敢死，因为上有老下有小。于是开始卖笑：讨老人欢心是孝顺；给儿女做榜样是责任；看老婆脸色过日子是爱情；出门还要迎合所有人。&lt;/p&gt;
&lt;p&gt;圣贤有云：三十而立，四十不惑，五十而知天命。中年男人的人生，就是距离真实的自己最远的时刻。有家的男人是幸福，可有家的男人也辛苦。人到中年可以没有豪情万丈，更不能只剩惆怅，生活本身已经是不能承受之重，那些身外之物更应看透。&lt;/p&gt;
&lt;p&gt;所谓一叶知秋，见好就收。&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;109&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-109/</link>
      <pubDate>Sun, 13 Apr 2025 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-109/</guid>
      
    </item>
    
    <item>
      <title>清明时节雨纷纷</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;blockquote&gt;
&lt;p&gt;Categories: 博客/乱弹&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;自打搬进新家，生活的节奏就像按下了快进键，琐碎的事务如潮水般涌来，让自己始终没能腾出完整的时间，像从前在图书馆那样，沉浸式地做些自己喜欢的事。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;时间匆匆忙忙，难有时间停下来想一些事情，尤其过完年后的这一段时间里，焦虑与躁动忙碌交错。身边人生病的来回折腾，孩子补习班兴趣班辅导的鸡飞狗跳，让整个人下班后、周末的时间被切割得支离破碎。每次刚有点想做喜欢事情的念头，就被各种琐事打断。有时候好不容易抽出点时间，却又觉得缺少了图书馆那种宁静专注的氛围，很难静下心来。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;2025-清明-天鹿湖-徒步&#34; src=&#34;https://gi.weiyan.tech/2025/04/2025-qm-1.jpg&#34; /&gt;&lt;/p&gt;
&lt;p&gt;虽然知道这些都是暂时的，也在等着工作生活慢慢渐入佳境。&lt;/p&gt;
&lt;p&gt;清明时节雨纷纷，趁着这个假期，好不容易在家附近找到一个可以静静呆着一下的小图书馆。接着，把在家里尘封已久的 ThinkPad 小钢炮又翻了出来 —— 破 PC 用久了，切换回已经有 7、8 个年头的 T460p，依然感受到了这个笔记本的倔强 —— 很有一股“老兵不死”的错觉。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;home-library&#34; src=&#34;https://gi.weiyan.tech/2025/04/home-library.jpg&#34; /&gt;&lt;/p&gt;
&lt;p&gt;“世上只有一种英雄主义，就是认清生活的真相之后依然热爱生活。”&lt;/p&gt;
&lt;p&gt;很多人都曾被这句话鼓舞过，特别是在长大之后，我们慢慢发现“生活的真相”其实就是，总会有这样那样的“坏事”发生，但还是得咬紧牙关迎难而上。&lt;/p&gt;
&lt;p&gt;一路披荆斩棘、披星戴月，虽然辛苦，但却在这个过程里变得更加勇敢和坚强。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;2025-清明-天鹿湖-禾雀花&#34; src=&#34;https://gi.weiyan.tech/2025/04/2025-birdwoodiana.webp&#34; /&gt;&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;108&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-108/</link>
      <pubDate>Sat, 05 Apr 2025 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-108/</guid>
      
    </item>
    
    <item>
      <title>Python 3.6 不能产生 libpython3.6m.so 文件</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;在 Python-3.6.9 中测试 &lt;code&gt;Cheetah&lt;/code&gt; 包的时候遇到了找不到 &lt;code&gt;libpython3.6m.so.1.0&lt;/code&gt; 静态库，记录一下填坑。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;python3&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-c&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;import Cheetah._namemapper; print(Cheetah._namemapper.file)&amp;quot;&lt;/span&gt;
Traceback&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;most&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;recent&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;call&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;last&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;:
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;File&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&amp;lt;string&amp;gt;&amp;quot;&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;line&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;lt;module&amp;gt;
ImportError:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;libpython3.6m.so.1.0:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;cannot&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;open&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;shared&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;object&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;No&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;such&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;or&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;directory
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;编译第三方静态库，在 &lt;code&gt;configure&lt;/code&gt; 阶段需要增加 &lt;code&gt;--enable-shared CFLAGS=-fPIC&lt;/code&gt; 参数！
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;./configure&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/python3&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--enable-optimizations&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--enable-shared&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;CFLAGS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;-fPIC
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;在安装后，才会在 &lt;code&gt;/usr/local/python3/lib&lt;/code&gt; 目录下产生 &lt;code&gt;libpython3.6m.so&lt;/code&gt; 和 &lt;code&gt;libpython3.6m.so.1.0&lt;/code&gt; 两个文件。如果不加上面的添加，产生的文件是 &lt;code&gt;libpython3.6m.a&lt;/code&gt;。&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;106&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/tech/discussions-106/</link>
      <pubDate>Fri, 21 Mar 2025 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/tech/discussions-106/</guid>
      
    </item>
    
    <item>
      <title>Galaxy 安装应该选择哪个版本</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2025-03-19&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2025-03-19T00:00:00&#39;&gt;2025-03-19&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2026-03-05&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2026-03-05T10:40:31.447205+00:00&#39;&gt;2026-03-05&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;!--Catories:3.1.x-GalaxyOther--&gt;

&lt;blockquote&gt;
&lt;p&gt;Galaxy  是一个用于生物学研究的工作流程开源平台，用网页作为界面，让不熟悉编程语言的生物科学家更容易将手上的资料做进一步分析。Galaxy 的工作流程包含: 资料筛选与整合、资料分析与发布。虽然最早是为了基因组学研究而开发，但现在通常做为一般的生物资讯学工作流程管理系统。  —— &lt;a href=&#34;https://zh.wikipedia.org/wiki/Galaxy_(%E8%A8%88%E7%AE%97%E7%94%9F%E7%89%A9%E5%AD%B8)&#34;&gt;Galaxy (计算生物学)&lt;/a&gt; · 维基百科&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;随着新技术的更新换代，&lt;a href=&#34;https://github.com/galaxyproject/galaxy&#34;&gt;Galaxy Project&lt;/a&gt; 这个项目现在的变化也是越来越大，不管是 UI 界面还是各种框架技术，好像是越来越复杂。从业务角度出发，面对每年至少 2+ 次的 Release 版本，我们应该怎么选呢？&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;首先，在 UI 上 &lt;a href=&#34;https://docs.galaxyproject.org/en/master/releases/24.0_announce.html&#34;&gt;release_24.0&lt;/a&gt; 和 &lt;a href=&#34;https://docs.galaxyproject.org/en/master/releases/24.1_announce.html&#34;&gt;release_24.1&lt;/a&gt; 是一个分水岭。&lt;/p&gt;
&lt;p&gt;传统三栏界面，以 release_22.x 为例。
&lt;img alt=&#34;galaxy-21.01&#34; src=&#34;https://gi.weiyan.tech/2025/03/galaxy-21.01.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;从 &lt;a href=&#34;https://docs.galaxyproject.org/en/master/releases/24.0_announce.html&#34;&gt;release_24.0&lt;/a&gt; 开始增加了四栏模式（最左侧增加了一栏 &lt;strong&gt;Activity Bar&lt;/strong&gt;），但通过管理员可以通过设置保留传统的左中右三栏模式。到 &lt;a href=&#34;https://docs.galaxyproject.org/en/master/releases/24.1_announce.html&#34;&gt;release_24.1&lt;/a&gt; 后一律强制变成了四栏模式，即 &lt;strong&gt;Activity Bar&lt;/strong&gt; 不再支持隐藏（Activity bar is now enabled by default.）。  &lt;br /&gt;
&lt;img alt=&#34;galaxy-24.1&#34; src=&#34;https://gi.weiyan.tech/2024/10/galaxy-24.1.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;到了 &lt;a href=&#34;https://docs.galaxyproject.org/en/master/releases/24.2_announce.html&#34;&gt;release_24.2&lt;/a&gt;，更是把中间栏头部的 &lt;strong&gt;Masthead Revision&lt;/strong&gt; 导航去掉整合到左侧的 &lt;strong&gt;Activity Bar&lt;/strong&gt; 里面去了。  &lt;br /&gt;
&lt;img alt=&#34;galaxy-24.2.3.dev0&#34; src=&#34;https://gi.weiyan.tech/2025/03/galaxy-24.2.3.dev0.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;第二，release_24.x 在安装过程中对 CPU 要求更高，以前的 2 核 4G 服务器现在基本没法安装。  &lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;galaxy-24-sigkill&#34; src=&#34;https://gi.weiyan.tech/2025/03/galaxy-24-sigkill.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;可以说，从 release_24.x 起 Galaxy 开始真正贯彻 &lt;strong&gt;Galaxy = workflows&lt;/strong&gt; 的理念 - Create complex workflows and deploy via &lt;a href=&#34;https://training.galaxyproject.org/training-material/topics/galaxy-interface/tutorials/workflow-editor/tutorial.html&#34;&gt;UI&lt;/a&gt; or &lt;a href=&#34;https://training.galaxyproject.org/training-material/topics/galaxy-interface/tutorials/workflow-automation/tutorial.html&#34;&gt;CLI&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;galaxy-more-than-you-think&#34; src=&#34;https://gi.weiyan.tech/2025/03/galaxy-more-than-you-think.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;所以，总的来说，如果只是想借助 Galaxy 的平台完成命令行工具(程序)到 UI 可视化操作这一业务需求，可以简单选择 &lt;strong&gt;≤&lt;/strong&gt; release_24.0 的版本；如果更加侧重 &lt;strong&gt;workflows&lt;/strong&gt;，或者两者兼顾，可以选择 release_24.1 或者更高的版本 - 从颜值上个人更喜欢 24.2 这一个对 &lt;strong&gt;Masthead Revision&lt;/strong&gt; 导航优化后的布局。&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;105&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/discussions-105/</link>
      <pubDate>Wed, 19 Mar 2025 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/discussions-105/</guid>
      
    </item>
    
    <item>
      <title>git clone 设置临时代理</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;很多时候我们在国内使用 git 克隆，或者拉取、推送代码时总是显示连接不上，这时我们就需要设定 git 代理解决。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;h2 id=&#34;一次性代理&#34;&gt;一次性代理&lt;a class=&#34;headerlink&#34; href=&#34;#一次性代理&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;git&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;clone&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-c&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;http.proxy&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;http://127.0.0.1:1080&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://github.com/
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;全局设置代理&#34;&gt;全局设置代理&lt;a class=&#34;headerlink&#34; href=&#34;#全局设置代理&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;git&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;config&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--global&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https.proxy&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;http://127.0.0.1:1080
git&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;config&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--global&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https.proxy&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://127.0.0.1:1080
git&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;config&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--global&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--unset&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;http.proxy
git&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;config&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--global&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--unset&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https.proxy
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;参考资料&#34;&gt;参考资料&lt;a class=&#34;headerlink&#34; href=&#34;#参考资料&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://gist.github.com/laispace/666dd7b27e9116faece6&#34;&gt;git 设置和取消代理&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;104&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/tech/discussions-104/</link>
      <pubDate>Mon, 17 Mar 2025 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/tech/discussions-104/</guid>
      
    </item>
    
    <item>
      <title>如何在 Win11 上恢复旧的右键菜单？</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;家里的 Win11 使用了一段时间，最近发现它的这个鼠标右键的 &lt;strong&gt;&amp;lsquo;显示更多选项&amp;rsquo;&lt;/strong&gt; 实在太让人反感了，以至于每次想通过鼠标右键选择其他功能时必须要多点击一次 &lt;strong&gt;&amp;ldquo;显示更多选项&amp;rdquo;&lt;/strong&gt;。因此迫切希望能够将 Win11 显示更多选项这个反人类的设置恢复成 Win10 的状态，或者让 Win11 的鼠标右键的默认打开 &lt;strong&gt;&amp;lsquo;显示更多选项&amp;rsquo;&lt;/strong&gt;。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;&lt;img alt=&#34;shift-f10&#34; src=&#34;https://gi.weiyan.tech/2025/02/shift-f10.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;网上的普遍使用，且很多人反馈完美解决的解决方案。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;步骤1.&lt;/strong&gt; 按 &lt;strong&gt;Win+S&lt;/strong&gt; 打开搜索框，输入 &lt;strong&gt;cmd&lt;/strong&gt; 并以管理员身份运行命令提示符。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;步骤2.&lt;/strong&gt; 输入以下命令并按 &lt;strong&gt;Enter&lt;/strong&gt; 键执行。
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;reg add HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32 /ve /d &amp;quot;&amp;quot; /f
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2025年的更新操作：&lt;/strong&gt; 如果上述命令无效的话，还可以继续执行这个命令：
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;reg.exe add &amp;quot;HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32&amp;quot; /f /ve
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意：&lt;/strong&gt; 如果您想要重新打开 Win11 新样式的右键菜单的话，以同样的方式在命令提示符中执行此命令：
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;reg delete &amp;quot;HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}&amp;quot; /f
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;步骤3.&lt;/strong&gt; 重启资源管理器，运行以下命令：
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;taskkill /f /im explorer.exe &amp;amp; start explorer.exe
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;我刚开始的时候也是按照这样的方法去设置了，后来打开文件夹的时候鼠标右键的确完美解决了，但是一回到桌面，还是原来 Win11 新样式的右键菜单。反反复复试了很多次，包括直接去修改注册列表、尝试 Windows 11 Classic Context Menu v1.2 插件等等，最终都无法解决。&lt;/p&gt;
&lt;p&gt;后来静下心想了一下桌面和打开文件夹有什么不一样的，才发现原来自己在桌面还装了一个腾讯的&lt;a href=&#34;https://guanjia.qq.com/product/zmzl/&#34;&gt;桌面整理&lt;/a&gt;，实话实说，这个的确是个好用的小工具。
&lt;img alt=&#34;zmzl&#34; src=&#34;https://gi.weiyan.tech/2025/02/zmzl.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;这个桌面插件在 &lt;strong&gt;&amp;ldquo;实用功能&amp;rdquo;&lt;/strong&gt; → &lt;strong&gt;&amp;ldquo;设置中心&amp;rdquo;&lt;/strong&gt; 里面居然还有一个 &lt;strong&gt;&amp;ldquo;启用Windows11风格桌面右键菜单&amp;rdquo;&lt;/strong&gt;，只要把这个选项去掉，Win11 右键菜单恢复成 Win10 状态就立马生效了。
&lt;img alt=&#34;zmzl-w11&#34; src=&#34;https://gi.weiyan.tech/2025/02/zmzl-w11.png&#34; /&gt;&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;102&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-102/</link>
      <pubDate>Sat, 01 Mar 2025 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-102/</guid>
      
    </item>
    
    <item>
      <title>DeepSeek 本地部署与使用初探</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;DeepSeek 相关的人工智能现在是火得一塌糊涂，本着学习的心态，基于现在的一些有限资源，也来体验一下。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;h2 id=&#34;参考文章&#34;&gt;参考文章&lt;a class=&#34;headerlink&#34; href=&#34;#参考文章&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://mp.weixin.qq.com/s/kzwOYEMtzzBZH7jD3kNRlA&#34;&gt;用本地文件调教 DeepSeek&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.csdn.net/spiderwower/article/details/138463635&#34;&gt;ollama+open-webui，本地部署自己的大模型&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;注意事项&#34;&gt;注意事项&lt;a class=&#34;headerlink&#34; href=&#34;#注意事项&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&#34;1-依赖的一些问题&#34;&gt;1. 依赖的一些问题&lt;a class=&#34;headerlink&#34; href=&#34;#1-依赖的一些问题&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;open-webui&lt;/code&gt; 安装完成后，在 &lt;code&gt;backend&lt;/code&gt; 目录执行 &lt;code&gt;bash start.sh&lt;/code&gt; 如果出现 &lt;strong&gt;ImportError: libGL.so.1: cannot open shared object file: No such file or directory&lt;/strong&gt; 错误，可以考虑降低 &lt;code&gt;transformers&lt;/code&gt; 版本，个人测试 &lt;code&gt;mamba install transformers=4.36 --force-reinstall&lt;/code&gt; 重装后恢复正常。&lt;/p&gt;
&lt;h3 id=&#34;2-有限的资源也能跑起来&#34;&gt;2. 有限的资源，也能跑起来&lt;a class=&#34;headerlink&#34; href=&#34;#2-有限的资源也能跑起来&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;一台 2 核 4G 的云服务器，跑个 &lt;strong&gt;deepseek-r1:1.5b&lt;/strong&gt; 模型毫无压力，非常流畅，一些简单的问题也能回答出来。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;linux-deepseek-r1-1-5b&#34; src=&#34;https://gi.weiyan.tech/2025/02/linux-deepseek-r1-demo.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;3-交互问题&#34;&gt;3. 交互问题&lt;a class=&#34;headerlink&#34; href=&#34;#3-交互问题&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;ollama serve&lt;/code&gt;，或者 &lt;code&gt;systemctl start ollama&lt;/code&gt; 默认可以通过 &lt;code&gt;http://localhost:11434&lt;/code&gt; 看到 ollama 是否已经在运行，但无法与模型进行交互。《&lt;a href=&#34;https://mp.weixin.qq.com/s/kzwOYEMtzzBZH7jD3kNRlA&#34;&gt;用本地文件调教 DeepSeek&lt;/a&gt;》 一文说在终端运行 &lt;code&gt;ollama serve&lt;/code&gt; 命令启动 Ollama 服务，服务启动后，可以通过访问 &lt;code&gt;http://localhost:11434&lt;/code&gt; 来与模型进行交互。这是不正确的。        &lt;br /&gt;
&lt;img alt=&#34;ollama-service-11434&#34; src=&#34;https://gi.weiyan.tech/2025/02/ollama-service-11434.png&#34; /&gt;    &lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;ollama-is-running&#34; src=&#34;https://gi.weiyan.tech/2025/02/ollama-is-running.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;4-通过网页端访问和使用&#34;&gt;4. 通过网页端访问和使用。&lt;a class=&#34;headerlink&#34; href=&#34;#4-通过网页端访问和使用&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;如果想要通过网页把自己本地部署的 DeepSeek 模型开放给自己或者其他小伙伴使用，&lt;code&gt;open-webui&lt;/code&gt; 是一个比较好的选择，安装和启动都很简单。
&lt;img alt=&#34;open-webui-start&#34; src=&#34;https://gi.weiyan.tech/2025/02/open-webui-start.png&#34; /&gt;   &lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;open-webui-auth&#34; src=&#34;https://gi.weiyan.tech/2025/02/open-webui-auth.png&#34; /&gt;  &lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;deepseek-open-webui&#34; src=&#34;https://gi.weiyan.tech/2025/02/deepseek-open-webui.png&#34; /&gt;    &lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;101&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/tech/discussions-101/</link>
      <pubDate>Fri, 21 Feb 2025 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/tech/discussions-101/</guid>
      
    </item>
    
    <item>
      <title>那些偶尔想起的幸福时刻</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;最近偶尔浮现一些记忆中画面，记忆中是在家附近的金黄的稻田间散步，走在田埂上感受阳光明媚风微凉，脑袋里没有想太多的事情， 只是纯粹的感受美好......&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;&lt;img alt=&#34;golden-rice&#34; src=&#34;https://gi.weiyan.tech/2025/02/golden-rice.jpg&#34; /&gt;&lt;/p&gt;
&lt;p&gt;那段关于童年放牛的记忆，如同一幅幅温馨而生动的画卷，那时的天空总是格外晴朗，阳光透过树叶的缝隙，洒下斑驳陆离的光影，与三两玩伴的欢声笑语交织在一起，构成了最纯粹的快乐。我们在山林间自由穿梭，仿佛整个世界都属于我们这群小小的探险家。&lt;/p&gt;
&lt;p&gt;攀上枝头，与鸟儿嬉戏，那份无畏与好奇，探索那些隐蔽的小径，揭开大自然的神秘面纱，每一处新发现都像是宝藏，让我们的午后时光既舒适又充满了奇幻色彩。那时的我们，心中装满了对未知世界的好奇与向往，每一次探险都是对自我边界的拓宽。&lt;/p&gt;
&lt;p&gt;即使时光荏苒，岁月如梭，那份记忆依旧鲜明如初。当暮色悄然爬上远处的山脊，天边最后一抹夕阳也依依不舍地隐去，我的鼻尖似乎还能捕捉到那熟悉而又遥远的山间篝火炊烟的味道。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;children-cattle&#34; src=&#34;https://gi.weiyan.tech/2025/02/children-cattle.jpg&#34; /&gt;&lt;/p&gt;
&lt;p&gt;高考完的那年暑假，和班上一大堆同学跑到了深圳观澜的一家电子厂打暑假工。白天在车间焊接电子配件，炎热又忙碌，晚上泡网吧，周末爬山、瞎逛，试图着用脚步去丈量着这座城市的每一个角落。那年夏天，第一次体验了打工的新鲜和艰辛，第一次接触手机，第一次注册了自己的 QQ 号，没作业，不知道未来，带着青葱的稚嫩和对未来的憧憬，只有炎炎夏日和蝉叫，以及几个对未来不知所措的少年，刻骨铭心......&lt;/p&gt;
&lt;p align=&#34;center&#34;&gt;
    &lt;img src=&#34;https://gi.weiyan.tech/2025/02/09-aug-09.jpg&#34; alt&gt;&lt;br&gt;
    &lt;span&gt;感受一下AI修复后的旧时照片&lt;/span&gt;
&lt;/p&gt;

&lt;p&gt;那些记忆的画面很简单，但是那感受刻骨铭心。这种感受已经十几年没有过了，尤其在城市里，你甚至找不到一处安静的地方。人大了，事情多了，脑袋里总是有卸不完的事情，卸了一件再来一件。甚至这种回忆也不常有，有点麻木的感觉。&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;99&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-99/</link>
      <pubDate>Mon, 17 Feb 2025 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-99/</guid>
      
    </item>
    
    <item>
      <title>R 语言中的 libpng 版本冲突</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;事情起因是在 R 语言中调用 &lt;code&gt;png&lt;/code&gt; 包的 &lt;code&gt;readPNG&lt;/code&gt; 读取 png 图片的时候，碰到了错误：&lt;strong&gt;libpng error: Incompatible libpng version in application and library&lt;/strong&gt;。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;library&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;png&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;p1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;readPNG&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;/bioinfo/polyA/circos.png&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Error&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;readPNG&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;/bioinfo/polyA/circos.png&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;libpng&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;error&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Incompatible&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;libpng&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;version&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;application&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;and&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;library&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;In&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;addition&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Warning&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;messages&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;
&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;In&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;readPNG&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;/bioinfo/polyA/circos.png&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;libpng&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;warning&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Application&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;was&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;compiled&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;with&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;png.h&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;libpng&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;-1.6&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;37&lt;/span&gt;
&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;In&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;readPNG&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;/bioinfo/polyA/circos.png&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;libpng&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;warning&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Application&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;is&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;running&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;with&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;png.c&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;libpng&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;-1.2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;49&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;这个问题，其实在 《&lt;a href=&#34;https://weiyan.cc/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/R/2019-07-15-r-ramigo/&#34;&gt;RamiGO 安装及库依赖解决备忘&lt;/a&gt;》曾经遇到过，当时的解决方法，在现在看起来其实是并不完善的。所以，在问题解决前，我们先来看看这个问题到底是怎么导致的。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;首先，我的 R 是通过源码编译安装的，而且在安装的过程中 &lt;code&gt;configure&lt;/code&gt; 时候指定了自己安装的 libpng-1.6.37。
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;./configure --prefix=bioinfo/software/r/r-4.4.2 --enable-R-shlib --with-libtiff --with-libpng --with-jpeglib --with-pcre1 \
LDFLAGS=&amp;quot;-L/bioinfo/software/mylibs/zlib-1.2.6/lib \
            -L/bioinfo/software/mylibs/bzip2-1.0.6/lib \
            -L/bioinfo/software/mylibs/pcre-8.40/lib \
            -L/bioinfo/software/mylibs/tiff-4.0.9/lib \
            -L/bioinfo/software/mylibs/jpeg-9c/lib \
            -L/bioinfo/software/mylibs/libpng-1.6.37/lib \
            -L/bioinfo/software/mylibs/xz-5.2.3/lib \
            -L/bioinfo/software/mylibs/curl-7.64.1/lib -fopenmp&amp;quot; \
CPPFLAGS=&amp;quot;-I/bioinfo/software/mylibs/zlib-1.2.6/include \
            -I/bioinfo/software/mylibs/bzip2-1.0.6/include \
            -I/bioinfo/software/mylibs/pcre-8.40/include \
            -I/bioinfo/software/mylibs/tiff-4.0.9/include \
            -I/bioinfo/software/mylibs/jpeg-9c/include \
            -I/bioinfo/software/mylibs/libpng-1.6.37/include \
            -I/bioinfo/software/mylibs/xz-5.2.3/include \
            -I/bioinfo/software/mylibs/curl-7.64.1/include&amp;quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;第二，我使用的 &lt;code&gt;png&lt;/code&gt; 是在 R 里面直接 &lt;code&gt;install.package(&#39;png&#39;)&lt;/code&gt; 安装的。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ldd&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/bioinfo/software/r/r-4.4.2/lib64/R/library/png/libs/png.so
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;linux-vdso.so.1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007fff29dd9000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libpng12.so.0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/lib64/libpng12.so.0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007f1a614bc000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libz.so.1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/bioinfo/software/r-3.3.2/lib/libz.so.1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007f1a612a4000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libm.so.6&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/lib64/libm.so.6&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007f1a61020000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libR.so&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/bioinfo/software/r/r-3.6.1/lib64/R/lib/libR.so&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007f1a6098e000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libgomp.so.1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bioinfo/software/gcc-7.3.0/lib64/libgomp.so.1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007f1a60760000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libpthread.so.0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/lib64/libpthread.so.0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007f1a60543000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libc.so.6&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/lib64/libc.so.6&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007f1a601af000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libRblas.so&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/bioinfo/software/r/r-3.6.1/lib64/R/lib/libRblas.so&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007f1a5ff83000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libgfortran.so.3&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/lib64/libgfortran.so.3&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007f1a5fc91000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libreadline.so.6&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/lib64/libreadline.so.6&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007f1a5fa4e000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libpcre.so.1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/bioinfo/software/r-3.3.2/lib/libpcre.so.1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007f1a5f81b000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;liblzma.so.5&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/bioinfo/software/r-3.3.2/lib/liblzma.so.5&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007f1a5f5f6000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;librt.so.1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/lib64/librt.so.1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007f1a5f3ee000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libdl.so.2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/lib64/libdl.so.2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007f1a5f1e9000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libiconv.so.2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/local/lib/libiconv.so.2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007f1a5ef04000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;/lib64/ld-linux-x86-64.so.2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x0000003636a00000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libtinfo.so.5&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/lib64/libtinfo.so.5&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007f1a5ece2000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;从 &lt;code&gt;ldd&lt;/code&gt; 的结果可以很明显看到，&lt;code&gt;install.package(&#39;png&#39;)&lt;/code&gt; 使用了系统默认的 &lt;code&gt;libpng&lt;/code&gt;，也就是对应的 &lt;code&gt;libpng-1.2.49&lt;/code&gt;。因此最后在调用 &lt;code&gt;png&lt;/code&gt; 的时候就和编译使用的 &lt;code&gt;libpng-1.6.37&lt;/code&gt; 发生了冲突。&lt;/p&gt;
&lt;p&gt;第三，所以最终的解决方法就是，先设置 &lt;code&gt;libpng-1.6.37&lt;/code&gt;的 &lt;code&gt;PATH&lt;/code&gt; 和 &lt;code&gt;LD_LIBRARY_PATH&lt;/code&gt;。 
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;export PATH=/bioinfo/software/mylib/libpng-1.6.37/bin:$PATH
export LD_LIBRARY_PATH=/bioinfo/software/mylib/libpng-1.6.37/lib:$LD_LIBRARY_PATH
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;卸载原来的 &lt;code&gt;png&lt;/code&gt; 包，再重新安装。
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nf&#34;&gt;remove.packages&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;png&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;options&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;repos&amp;quot;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;CRAN&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;https://mirrors.tuna.tsinghua.edu.cn/CRAN/&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;install.packages&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;png&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;总的来说，最开始碰到这个问题的时候，虽然知道问题在哪，也设置过 &lt;code&gt;LD_LIBRARY_PATH&lt;/code&gt; 后去重装 &lt;code&gt;png&lt;/code&gt;，但是一直都没成功，后面尝试了几个方法。&lt;/p&gt;
&lt;p&gt;一是，怎么在 &lt;code&gt;install.packages()&lt;/code&gt; 中指定 libpng-1.6.37 的 &lt;code&gt;LDFLAGS&lt;/code&gt; 和 &lt;code&gt;CPPFLAGS&lt;/code&gt;，因为没搞懂 &lt;code&gt;--configure-args&lt;/code&gt; 具体是怎么用的，这条路没走通。另外，在 &lt;code&gt;HOME/.R/Makevars&lt;/code&gt; 设置了 &lt;code&gt;LDFLAGS&lt;/code&gt; 和 &lt;code&gt;CPPFLAGS&lt;/code&gt; 进行了尝试，也依然不起作用。&lt;/p&gt;
&lt;p&gt;二是，想通过 &lt;code&gt;patchelf&lt;/code&gt; 去直接修改 &lt;code&gt;png.so&lt;/code&gt; 的动态库链接，虽然修改成功，但直接把 &lt;code&gt;png&lt;/code&gt; 搞崩溃。&lt;/p&gt;
&lt;p&gt;直至把 libpng-1.6.37 的 bin 也一起增加到 &lt;code&gt;PATH&lt;/code&gt;，才重装 &lt;code&gt;png&lt;/code&gt; 后，这个问题才最终解决。个人猜测在安装 &lt;code&gt;png&lt;/code&gt; 时检测 libpng 的过程中应该跟 &lt;code&gt;libpng-config&lt;/code&gt; 的可执行文件有关系，因为系统默认的 &lt;code&gt;/usr/bin/libpng-config&lt;/code&gt; 为 1.2.49 版本，而 libpng-1.6.37 的 &lt;code&gt;bin/libpng-config&lt;/code&gt; 默认软连接至 &lt;code&gt;bin/libpng16-config&lt;/code&gt;，对应 1.6.37。&lt;/p&gt;
&lt;p&gt;事后，去 &lt;code&gt;png&lt;/code&gt; 的&lt;a href=&#34;https://github.com/s-u/png&#34;&gt;源码仓库&lt;/a&gt;一看，果然在 &lt;code&gt;src/Makevars&lt;/code&gt; 中发现了链接库和依赖中调用了 &lt;code&gt;libpng-config&lt;/code&gt;：
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;PKG_LIBS=$(PNG_LIBS) `libpng-config --static --ldflags`
PKG_CFLAGS=$(PNG_CFLAGS) `libpng-config --cflags`
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;img alt=&#34;png-src-makevars&#34; src=&#34;https://gi.weiyan.tech/2025/02/png-src-makevars.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;而系统的 &lt;code&gt;libpng-config&lt;/code&gt; 和 libpng-1.6.37 的 &lt;code&gt;bin/libpng-config&lt;/code&gt; 的链接库和依赖：
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/bin/libpng-config&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--static&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--ldflags
-L/usr/lib64&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-lpng12&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-lz&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-lm

$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/bioinfo/software/mylib/libpng-1.6.37/bin/libpng-config&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--static&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--ldflags
-L/bioinfo/software/mylib/libpng-1.6.37/lib&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-lpng16&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-lm&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-lz&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-lm
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;正好印证了在安装 &lt;code&gt;png&lt;/code&gt; 时，的确需要从默认 &lt;code&gt;PATH&lt;/code&gt; 中调用 &lt;code&gt;libpng-config&lt;/code&gt;，从而获取对应的链接库和依赖。&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;98&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/tech/discussions-98/</link>
      <pubDate>Fri, 14 Feb 2025 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/tech/discussions-98/</guid>
      
    </item>
    
    <item>
      <title>Python 包 matplotlib 安装的一些问题</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;Python 的 matplotlib 在安装的过程中一直无法解决 freetype2 自动下载的问题，导致始终安装不成功。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;Python-3.10.16 通过本地（或者是在线）方式安装 matplotlib-3.10.0 的时候，发现对应 &lt;code&gt;freetype2&lt;/code&gt;、&lt;code&gt;qhull&lt;/code&gt; 通过对应的 URL 无法正常下载，以至于 &lt;code&gt;matplotlib&lt;/code&gt; 一直安装不成功，详细信息如下面代码所示。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pip3&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;.
Looking&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;indexes:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://pypi.tuna.tsinghua.edu.cn/simple
Processing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/bioinfo/src/py/matplotlib-3.10.0
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Installing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;build&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;dependencies&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Getting&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;requirements&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;build&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;wheel&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Installing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;backend&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;dependencies&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Preparing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;metadata&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;pyproject.toml&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;error
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;error:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;subprocess-exited-with-error

&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;×&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Preparing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;metadata&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;pyproject.toml&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;did&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;run&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;successfully.
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;│&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;exit&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;code:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;╰─&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;48&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;lines&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;output&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;+&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;meson&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;setup&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/bioinfo/src/py/matplotlib-3.10.0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/bioinfo/src/py/matplotlib-3.10.0/.mesonpy-smx69lrx&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-Dbuildtype&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;release&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-Db_ndebug&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;-release&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-Db_vscrt&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;md&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--native-file&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/bioinfo/src/py/matplotlib-3.10.0/.mesonpy-smx69lrx/meson-python-native-file.ini
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;The&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Meson&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;build&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;system
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;Version:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.7.0
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;Source&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;dir:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/bioinfo/src/py/matplotlib-3.10.0
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;Build&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;dir:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/bioinfo/src/py/matplotlib-3.10.0/.mesonpy-smx69lrx
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;Build&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;type:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;native&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;build
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;Program&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;python3&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;found:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;YES&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;/bioinfo/software/Python-3.10.16/bin/python3&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;Project&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;name:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;matplotlib
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;Project&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;version:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;.10.0
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;C&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;compiler&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;host&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;machine:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;cc&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;gcc&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4&lt;/span&gt;.4.7&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;cc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-4)&amp;quot;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;C&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;linker&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;host&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;machine:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;cc&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ld.bfd&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;.20.51.0.2-5
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;C++&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;compiler&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;host&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;machine:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;c++&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;gcc&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4&lt;/span&gt;.4.7&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;c++ (GCC) 4.4.7 20120313 (Red Hat 4.4.7-4)&amp;quot;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;C++&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;linker&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;host&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;machine:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;c++&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ld.bfd&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;.20.51.0.2-5
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;Host&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;machine&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;cpu&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;family:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;x86_64
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;Host&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;machine&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;cpu:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;x86_64
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;Program&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;python&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;found:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;YES&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;/bioinfo/software/Python-3.10.16/bin/python3.10&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;Found&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pkg-config:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;YES&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;/usr/bin/pkg-config&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;.23
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;Run-time&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;dependency&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;python&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;found:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;YES&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;.10
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;pybind11-config&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;found:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;YES&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;/tmp/pip-build-env-gf0psrg8/overlay/bin/pybind11-config&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;.13.6
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;Run-time&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;dependency&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pybind11&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;found:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;YES&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;.13.6
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;Downloading&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;freetype-2.6.1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://download.savannah.gnu.org/releases/freetype/freetype-old/freetype-2.6.1.tar.gz
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&amp;lt;urlopen&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;error&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;SSL:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;CERTIFICATE_VERIFY_FAILED&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;certificate&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;verify&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;failed:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;unable&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;get&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;local&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;issuer&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;certificate&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;_ssl.c:1007&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&amp;gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;WARNING:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;failed&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;download&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;error:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;could&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;get&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://download.savannah.gnu.org/releases/freetype/freetype-old/freetype-2.6.1.tar.gz&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;is&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;internet&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;available?.&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Trying&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;after&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;a&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;delay...
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&amp;lt;urlopen&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;error&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;SSL:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;CERTIFICATE_VERIFY_FAILED&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;certificate&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;verify&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;failed:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;unable&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;get&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;local&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;issuer&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;certificate&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;_ssl.c:1007&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&amp;gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;WARNING:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;failed&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;download&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;error:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;could&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;get&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://download.savannah.gnu.org/releases/freetype/freetype-old/freetype-2.6.1.tar.gz&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;is&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;internet&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;available?.&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Trying&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;after&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;a&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;delay...
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&amp;lt;urlopen&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;error&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;SSL:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;CERTIFICATE_VERIFY_FAILED&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;certificate&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;verify&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;failed:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;unable&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;get&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;local&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;issuer&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;certificate&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;_ssl.c:1007&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&amp;gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;WARNING:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;failed&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;download&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;error:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;could&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;get&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://download.savannah.gnu.org/releases/freetype/freetype-old/freetype-2.6.1.tar.gz&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;is&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;internet&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;available?.&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Trying&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;after&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;a&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;delay...
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&amp;lt;urlopen&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;error&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;SSL:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;CERTIFICATE_VERIFY_FAILED&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;certificate&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;verify&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;failed:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;unable&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;get&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;local&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;issuer&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;certificate&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;_ssl.c:1007&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&amp;gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;WARNING:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;failed&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;download&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;error:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;could&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;get&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://download.savannah.gnu.org/releases/freetype/freetype-old/freetype-2.6.1.tar.gz&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;is&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;internet&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;available?.&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Trying&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;after&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;a&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;delay...
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&amp;lt;urlopen&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;error&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;SSL:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;CERTIFICATE_VERIFY_FAILED&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;certificate&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;verify&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;failed:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;unable&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;get&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;local&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;issuer&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;certificate&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;_ssl.c:1007&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&amp;gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;WARNING:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;failed&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;download&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;error:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;could&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;get&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://download.savannah.gnu.org/releases/freetype/freetype-old/freetype-2.6.1.tar.gz&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;is&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;internet&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;available?.&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Trying&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;after&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;a&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;delay...
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&amp;lt;urlopen&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;error&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;SSL:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;CERTIFICATE_VERIFY_FAILED&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;certificate&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;verify&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;failed:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;unable&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;get&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;local&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;issuer&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;certificate&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;_ssl.c:1007&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&amp;gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;Downloading&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;freetype-2.6.1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://downloads.sourceforge.net/project/freetype/freetype2/2.6.1/freetype-2.6.1.tar.gz
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&amp;lt;urlopen&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;error&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;SSL:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;CERTIFICATE_VERIFY_FAILED&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;certificate&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;verify&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;failed:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;unable&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;get&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;local&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;issuer&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;certificate&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;_ssl.c:1007&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&amp;gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;WARNING:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;failed&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;download&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;error:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;could&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;get&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://downloads.sourceforge.net/project/freetype/freetype2/2.6.1/freetype-2.6.1.tar.gz&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;is&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;internet&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;available?.&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Trying&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;after&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;a&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;delay...
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&amp;lt;urlopen&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;error&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;SSL:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;CERTIFICATE_VERIFY_FAILED&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;certificate&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;verify&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;failed:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;unable&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;get&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;local&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;issuer&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;certificate&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;_ssl.c:1007&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&amp;gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;WARNING:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;failed&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;download&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;error:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;could&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;get&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://downloads.sourceforge.net/project/freetype/freetype2/2.6.1/freetype-2.6.1.tar.gz&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;is&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;internet&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;available?.&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Trying&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;after&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;a&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;delay...
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&amp;lt;urlopen&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;error&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;SSL:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;CERTIFICATE_VERIFY_FAILED&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;certificate&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;verify&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;failed:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;unable&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;get&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;local&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;issuer&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;certificate&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;_ssl.c:1007&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&amp;gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;WARNING:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;failed&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;download&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;error:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;could&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;get&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://downloads.sourceforge.net/project/freetype/freetype2/2.6.1/freetype-2.6.1.tar.gz&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;is&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;internet&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;available?.&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Trying&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;after&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;a&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;delay...
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&amp;lt;urlopen&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;error&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;SSL:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;CERTIFICATE_VERIFY_FAILED&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;certificate&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;verify&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;failed:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;unable&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;get&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;local&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;issuer&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;certificate&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;_ssl.c:1007&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&amp;gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;WARNING:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;failed&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;download&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;error:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;could&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;get&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://downloads.sourceforge.net/project/freetype/freetype2/2.6.1/freetype-2.6.1.tar.gz&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;is&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;internet&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;available?.&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Trying&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;after&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;a&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;delay...
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&amp;lt;urlopen&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;error&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;SSL:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;CERTIFICATE_VERIFY_FAILED&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;certificate&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;verify&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;failed:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;unable&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;get&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;local&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;issuer&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;certificate&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;_ssl.c:1007&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&amp;gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;WARNING:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;failed&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;download&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;error:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;could&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;get&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://downloads.sourceforge.net/project/freetype/freetype2/2.6.1/freetype-2.6.1.tar.gz&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;is&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;internet&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;available?.&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Trying&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;after&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;a&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;delay...
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&amp;lt;urlopen&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;error&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;SSL:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;CERTIFICATE_VERIFY_FAILED&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;certificate&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;verify&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;failed:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;unable&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;get&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;local&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;issuer&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;certificate&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;_ssl.c:1007&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&amp;gt;

&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;../extern/meson.build:18:18:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ERROR:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;could&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;get&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://downloads.sourceforge.net/project/freetype/freetype2/2.6.1/freetype-2.6.1.tar.gz&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;is&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;internet&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;available?

&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;A&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;full&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;log&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;can&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;be&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;found&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;at&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/bioinfo/src/py/matplotlib-3.10.0/.mesonpy-smx69lrx/meson-logs/meson-log.txt
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;end&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;output&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;

&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;note:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;This&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;error&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;originates&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;a&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;subprocess,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;and&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;is&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;likely&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;a&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;problem&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pip.
error:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;metadata-generation-failed

×&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Encountered&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;error&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;while&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;generating&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;metadata.
╰─&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;See&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;above&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;output.

note:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;This&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;is&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;an&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;issue&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mentioned&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;above,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pip.
hint:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;See&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;above&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;details.

&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;notice&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;A&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;new&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;release&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pip&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;is&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;available:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;23&lt;/span&gt;.0.1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;25&lt;/span&gt;.0.1
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;notice&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;To&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;update,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;run:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pip3&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--upgrade&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pip
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;对于这种情况，可以：
1. 根据提示给出的 URL 下载好相应的依赖（这个 URL 也可以在 &lt;code&gt;matplotlib-3.10.0/subprojects/*.wrap&lt;/code&gt; 中找到），并把依赖包保存的服务器任何一个目录下。        &lt;br /&gt;
   - &lt;a href=&#34;https://github.com/matplotlib/matplotlib/blob/v3.10.x/subprojects/freetype-2.6.1.wrap&#34;&gt;freetype-2.6.1.wrap&lt;/a&gt;：&lt;code&gt;/bioinfo/src/py/freetype-2.6.1.tar.gz&lt;/code&gt;；       &lt;br /&gt;
   - &lt;a href=&#34;https://github.com/matplotlib/matplotlib/blob/v3.10.x/subprojects/qhull.wrap&#34;&gt;qhull.wrap&lt;/a&gt;：&lt;code&gt;/bioinfo/src/py/qhull-8.0.2.tar.gz&lt;/code&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;修改 &lt;code&gt;matplotlib-3.10.0/subprojects/*.wrap&lt;/code&gt;。      &lt;/li&gt;
&lt;li&gt;
&lt;p&gt;freetype-2.6.1.wrap
   &lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;[wrap-file]
source_url = file:///bioinfo/src/py/freetype-2.6.1.tar.gz
source_fallback_url = file:///bioinfo/src/py/freetype-2.6.1.tar.gz
source_filename = freetype-2.6.1.tar.gz
source_hash = 0a3c7dfbda6da1e8fce29232e8e96d987ababbbf71ebc8c75659e4132c367014

patch_directory = freetype-2.6.1-meson

[provide]
freetype-2.6.1 = freetype_dep
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;qhull.wrap
   &lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;[wrap-file]
# Also bump the cache key in `.circleci/config.yml`.
# Also update the docs in `docs/devel/dependencies.rst`.
directory = qhull-8.0.2
source_url = file:///bioinfo/src/py/qhull-8.0.2.tar.gz
source_filename = qhull-8.0.2.tgz
source_hash = 8774e9a12c70b0180b95d6b0b563c5aa4bea8d5960c15e18ae3b6d2521d64f8b

patch_directory = qhull-8.0.2
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;最后，再次执行安装。
   &lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;pip3&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
   &lt;img alt=&#34;pip3-matplotlib&#34; src=&#34;https://gi.weiyan.tech/2025/02/pip3-matplotlib.png&#34; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;97&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/tech/discussions-97/</link>
      <pubDate>Wed, 12 Feb 2025 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/tech/discussions-97/</guid>
      
    </item>
    
    <item>
      <title>我的 2024 年总结</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;2024 年已过去，距离农历新年还有将近半个月的时间，趁着这个时间简单来盘点一下 2024 年走过的一些坑坑洼洼。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;h2 id=&#34;工作那些事&#34;&gt;工作那些事&lt;a class=&#34;headerlink&#34; href=&#34;#工作那些事&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;工作上的事情，早在公司层面已经梳理了一次，到了这里实在是乏善可陈，也不太想再来这里赘述了，只想聊聊一些想法。&lt;/p&gt;
&lt;p&gt;当一个人一年到头安装、测试过上百款软件/包，在 configure/make/make install 这条路上趟过太多坑后，会对 mamba/conda/virtualenv 一类的解决方案更加关注，但是对于老旧服务器甚至是集群 docker/singularity 却又是另一个可望不可及的痛 —— 想用却用不上。总的来说，软件这条路，依旧是源码加 conda 流混合双打的局面，借助 Google 或者是 AI 还是能打上几个回合的。&lt;/p&gt;
&lt;p&gt;在另外一个赛道上，AI 火的一塌糊涂的今天，PyTorch/TensorFlow，AlphaFold 3/HelixFold 3，&amp;hellip; 成为了个人的另外一个选择和挑战，2024 年没能真正躬身入局，2025 年的路还会远吗？GPU 带来的问题仿佛还在耳边，路漫漫看不见脚下的路。&lt;/p&gt;
&lt;p&gt;都说这是艰难的一年，&lt;a href=&#34;https://weiyan.cc/blog/discussions-81/&#34;&gt;寒冬将至&lt;/a&gt;，2025 年又何尝不会更加艰难！&lt;/p&gt;
&lt;h2 id=&#34;享受生活&#34;&gt;享受生活&lt;a class=&#34;headerlink&#34; href=&#34;#享受生活&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;2024 年绝对是陪娃打卡室外活动最多的一年。在爬山和徒步这条路上，从华峰寺、南香山、油麻山、火炉山，到博物馆、儿童公园、黄埔欢乐跑、玉岩书院徒步，萌鸡小队一年以来可谓战绩辉煌，欢乐满满。&lt;/p&gt;
&lt;p&gt;2024 年 7 月中旬，经历了公司体检后，成功带领公司的小伙伴们入坑羽毛球。把公司附近大大小小的球馆打过一遍后，羽毛球成为了每周的常态，养生局和对抗局轮流转。随着周围羽毛球馆越开越多，打球虽然越来越方便，但人却越来越分散，价格也越加参差不齐。&lt;/p&gt;
&lt;h2 id=&#34;聊聊其他&#34;&gt;聊聊其他&lt;a class=&#34;headerlink&#34; href=&#34;#聊聊其他&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;2024 年是全面游走在黄埔、增城两区的一年，通勤、生活日渐适应，完美的过渡。&lt;/p&gt;
&lt;p&gt;2024 年家人经历了一些职场变动，经历了一些健康困扰，幸运的是这一年大家一路扶持一路鼓励，让包容给了这个家更多温暖。&lt;/p&gt;
&lt;h2 id=&#34;愿你所愿&#34;&gt;愿你所愿&lt;a class=&#34;headerlink&#34; href=&#34;#愿你所愿&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;2025 年，愿你所愿 —— 这盛世每一天，山河无恙，烟火寻常。&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;96&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-96/</link>
      <pubDate>Wed, 15 Jan 2025 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-96/</guid>
      
    </item>
    
    <item>
      <title>生活跌宕，羽球向阳</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;羽毛球这项运动真是很神奇，就想多巴胺一样，过程总能让人乐此不疲，就像平常生活中的一束光或是一拂尘，拂去生活的阴霾与不快。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;blockquote&gt;
&lt;p&gt;生活无非就是上班下班，过了初出茅庐的迷茫与昂扬，一切都开始变得按部就班有条不紊，也经历了没遇到过的波折与离别，很多事情都只能放在心里，让别人放心。就这样不知不觉间成为了一些人事物的支撑，俗称高个的。但只有自己才知道，自己也需要一个支撑，一个途径，一个宣泄口，一个目标让自己能扛得下去，于是我说生活跌宕，羽球向阳。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src=&#39;https://gi.weiyan.tech/2025/05/badminton202505.webp&#39; width=800 alt=&#34;badminton202505&#34;&gt;&lt;/p&gt;
&lt;p&gt;或许这正是羽毛球的治愈力，它让疲惫的灵魂暂时抽离现实，在攻防的博弈里，找回对生活的掌控感与热忱。&lt;/p&gt;
&lt;p&gt;年龄增长，体力也在以肉眼可见在退步，周围的球馆关了开开了关，身边的球搭子换了一批又一批，林林总总的背后总有神伤的时候。生活也总是这样，不能让人处处都满意。不同阶段有不同问题，生活态度也随之起起落落。但流过了汗，短暂的宣泄过后，咬咬牙，一切总能过去。&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;95&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-95/</link>
      <pubDate>Tue, 03 Dec 2024 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-95/</guid>
      
    </item>
    
    <item>
      <title>手机流量与套餐</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;都到 2024 年了，还在为手机流量和套餐的事情纠结。身处广东，不管移动联通电信，还是新出来的广电，就想问一下现在还有比较便宜的套餐吗？&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;起源是老母亲现在用的移动 39 元/月的套餐，老人觉得费用太高，想要换一个费用低一点的套餐。所以问题就来了。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;主要给老人（未满 60 周岁）用。&lt;/li&gt;
&lt;li&gt;平时就用微信、抖音。&lt;/li&gt;
&lt;li&gt;在不换号码前提下有没有比较便宜的套餐（例如，19 元的套餐挺好）。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;看到一些建议，说给老人买一张副卡，把主卡转为 8 元保号套餐，这也是一个方法，但这样一来，问题就变成了：哪些副卡比较划算？&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;china-mobile-operators&#34; src=&#34;https://gi.weiyan.tech/2024/11/china-mobile-operators.jpg&#34; /&gt;&lt;/p&gt;
&lt;p&gt;家里有老人的，不知道大家都是怎么给他们选择套餐的，现在的套餐五花八门，一时间还真不知道该怎么选。&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;94&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-94/</link>
      <pubDate>Fri, 22 Nov 2024 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-94/</guid>
      
    </item>
    
    <item>
      <title>GitHub Actions 更新 Submodule</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;怎么通过 GitHub Actions 实时更新 Git 仓库中的子模块（submodules）。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l l-Scalar l-Scalar-Plain&#34;&gt;Send submodule updates to parent repo&lt;/span&gt;

&lt;span class=&#34;nt&#34;&gt;on&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;push&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;branches&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;p p-Indicator&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l l-Scalar l-Scalar-Plain&#34;&gt;main&lt;/span&gt;

&lt;span class=&#34;nt&#34;&gt;jobs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;update&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;runs-on&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l l-Scalar l-Scalar-Plain&#34;&gt;ubuntu-latest&lt;/span&gt;

&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;steps&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;p p-Indicator&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;uses&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l l-Scalar l-Scalar-Plain&#34;&gt;actions/checkout@v2&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;with&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;repository&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l l-Scalar l-Scalar-Plain&#34;&gt;xxx/parent_xxx&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;token&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l l-Scalar l-Scalar-Plain&#34;&gt;${{ secrets.PRIVATE_TOKEN_GITHUB }}&lt;/span&gt;

&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;p p-Indicator&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l l-Scalar l-Scalar-Plain&#34;&gt;Pull &amp;amp; update submodules recursively&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;run&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p p-Indicator&#34;&gt;|&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;no&#34;&gt;git submodule update --init --recursive&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;no&#34;&gt;git submodule update --recursive --remote&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;p p-Indicator&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l l-Scalar l-Scalar-Plain&#34;&gt;Commit&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;run&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p p-Indicator&#34;&gt;|&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;no&#34;&gt;git config user.email &amp;quot;actions@github.com&amp;quot;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;no&#34;&gt;git config user.name &amp;quot;GitHub Actions - update submodules&amp;quot;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;no&#34;&gt;git add --all&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;no&#34;&gt;git commit -m &amp;quot;Update submodules&amp;quot; || echo &amp;quot;No changes to commit&amp;quot;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;no&#34;&gt;git push&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;git submodule update --init --recursive&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;这个命令用于初始化并更新仓库中的子模块。具体来说：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;--init&lt;/code&gt; 参数会初始化在 &lt;code&gt;.gitmodules&lt;/code&gt; 文件中指定的每个子模块的配置信息，但不会更新子模块的内容。这个步骤是必须的，因为 Git 不会自动初始化子模块的配置信息。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--recursive&lt;/code&gt; 参数确保命令递归地应用于任何嵌套的子模块。这意味着如果子模块本身还包含子模块，这些子模块也会被初始化。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;简而言之，这个命令会初始化仓库中所有（包括嵌套的）子模块的配置，并更新它们到在父仓库中记录的提交。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;git submodule update --recursive --remote&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;这个命令用于更新仓库中的子模块到它们的远程仓库中的最新状态（或指定的分支/标签）。具体来说：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;--recursive&lt;/code&gt; 的作用与上述命令相同，确保命令递归地应用于所有嵌套的子模块。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--remot&lt;/code&gt;e 参数指示 Git 更新每个子模块到其远程仓库的当前分支的最新提交。如果没有指定分支，则默认为在 &lt;code&gt;.gitmodules&lt;/code&gt; 文件中为每个子模块指定的分支。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;注意，这个命令并不会改变父仓库中记录的子模块的提交。它只是更新了子模块的工作目录和索引，以匹配远程仓库的最新状态。如果你想在父仓库中记录这些更新，你需要在子模块中执行提交，然后回到父仓库中，添加子模块的变更并提交。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;总结&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;git submodule update --init --recursive&lt;/code&gt; 用于初始化并更新子模块到父仓库中记录的提交。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;git submodule update --recursive --remote&lt;/code&gt; 用于将子模块更新到其远程仓库的最新状态，但不会在父仓库中记录这些更新。&lt;/li&gt;
&lt;/ol&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;93&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/tech/discussions-93/</link>
      <pubDate>Wed, 06 Nov 2024 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/tech/discussions-93/</guid>
      
    </item>
    
    <item>
      <title>Follow 初体验</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;在 2024 年国庆前后的这一段时间，&lt;a href=&#34;https://follow.is/&#34;&gt;Follow&lt;/a&gt; 的这个号称 Next-Gen Information Browser 的 RSS 阅读器在各大平台相当的火，各种疯抢激活码的帖子也是起此彼伏。直到 10 月 24，开始公测，上去体验了一下，发现也就跟其它 RSS 软件没啥太大区别，并没有说的那么玄乎。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;h2 id=&#34;卡顿&#34;&gt;卡顿&lt;a class=&#34;headerlink&#34; href=&#34;#卡顿&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;有人提到的公测遇到的第一个问题 &lt;strong&gt;&amp;ldquo;卡&amp;rdquo;&lt;/strong&gt;，加载缓慢。这个问题，我也感受到了，我一直用的 Web 版本，刚开始的时候的确不够流畅。有人说这跟代理工具和节点有关，通过更换工具和节点解决。&lt;/p&gt;
&lt;h2 id=&#34;解析异常&#34;&gt;解析异常&lt;a class=&#34;headerlink&#34; href=&#34;#解析异常&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;一个 RSS 最核心的还是要能订阅并正常获取并解析订阅源的内容。这一点 Follow 给我的感觉不好。在订阅 &lt;a href=&#34;https://yuanfan.rbind.io/&#34;&gt;袁凡&lt;/a&gt; 老师的博客，就出现了无法正常解析。   &lt;br /&gt;
&lt;img alt=&#34;follow-earfanfan&#34; src=&#34;https://gi.weiyan.tech/2024/10/follow-earfanfan.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;同样的订阅，在 &lt;a href=&#34;https://github.com/shenweiyan/Knowledge-Garden/discussions/73&#34;&gt;QiReader&lt;/a&gt; 上却表现很好。   &lt;br /&gt;
&lt;img alt=&#34;qireader-earfanfan&#34; src=&#34;https://gi.weiyan.tech/2024/10/qireader-earfanfan.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;列表赚钱&#34;&gt;列表赚钱&lt;a class=&#34;headerlink&#34; href=&#34;#列表赚钱&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;之前为什么水军这么多到处发订阅列表，今天用了下才知道原来 RSS 列表真的可以赚钱。第一次见到这种创新，和之前的饥饿营销绝配了。然而阅读器本身做得不怎样。    &lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;很同意这个评论，对于这一种赚钱方式，的确第一次见到。&lt;/p&gt;
&lt;h2 id=&#34;其他看法&#34;&gt;其他看法&lt;a class=&#34;headerlink&#34; href=&#34;#其他看法&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;在细节处理，希望这一款 &lt;strong&gt;Next-Gen Information Browser&lt;/strong&gt; 继续打磨。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;follow-joe-hou&#34; src=&#34;https://gi.weiyan.tech/2024/10/follow-joe-hou.png&#34; /&gt;&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;92&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-92/</link>
      <pubDate>Tue, 29 Oct 2024 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-92/</guid>
      
    </item>
    
    <item>
      <title>hisat2-build RAM 不足</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;在 96G RAM 的节点跑 T2T-CHM13v2.0 的 HISAT2 index 时候，发现任务居然被系统 Killed 掉了。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;排查一下才发现是因为 RAM 内存不够！    &lt;br /&gt;
&lt;img alt=&#34;hisat2-resource-usage-summary&#34; src=&#34;https://gi.weiyan.tech/2024/10/hisat2-resource.png&#34; /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Note: If you use &lt;a href=&#34;https://open.bioqueue.org/home/knowledge/showKnowledge/sig/hisat2-build#--snp&#34;&gt;&amp;ndash;snp&lt;/a&gt;, &lt;a href=&#34;https://open.bioqueue.org/home/knowledge/showKnowledge/sig/hisat2-build#--ss&#34;&gt;&amp;ndash;ss&lt;/a&gt;, and/or &lt;a href=&#34;https://open.bioqueue.org/home/knowledge/showKnowledge/sig/hisat2-build#--exon&#34;&gt;&amp;ndash;exon&lt;/a&gt;, hisat2-build will need about &lt;strong&gt;200 GB&lt;/strong&gt; RAM for the human genome size as index building involves a graph construction. Otherwise, you will be able to build an index on your desktop with 8GB RAM.&lt;/p&gt;
&lt;p&gt;From &lt;a href=&#34;https://open.bioqueue.org/home/knowledge/showKnowledge/sig/hisat2-build&#34;&gt;hisat2-build manual with usage examples | BioQueue Encyclopedia&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;91&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/tech/discussions-91/</link>
      <pubDate>Wed, 23 Oct 2024 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/tech/discussions-91/</guid>
      
    </item>
    
    <item>
      <title>Galaxy 平台 release_24.x 升级之路</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2024-10-18&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2024-10-18T00:00:00&#39;&gt;2024-10-18&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2026-03-05&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2026-03-05T10:40:31.447493+00:00&#39;&gt;2026-03-05&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;记录一下 Galaxy 分析平台从 &lt;strong&gt;release_20.09&lt;/strong&gt; 升级到 &lt;strong&gt;release_24.0&lt;/strong&gt;，横跨九个发布版本的升级之路。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;h2 id=&#34;为什么要升级&#34;&gt;为什么要升级&lt;a class=&#34;headerlink&#34; href=&#34;#为什么要升级&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;很主要的一个原因是随着新技术的更新，旧版本的使用可能会存在一些安全隐患，尤其对于提供互联网公开访问的平台。新版本的升级有助于捕获并应用所有先前的安全更新，以确保平台的安全性。&lt;/p&gt;
&lt;h2 id=&#34;版本选择&#34;&gt;版本选择&lt;a class=&#34;headerlink&#34; href=&#34;#版本选择&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;最开始选择的是 &lt;a href=&#34;https://docs.galaxyproject.org/en/master/releases/24.1_announce_user.html&#34;&gt;release_24.1&lt;/a&gt; 版本，但好不容易安装完成后才发现，这个新版本中增加了一个常规途径下无法隐藏的 &lt;strong&gt;Activity Bar Interface&lt;/strong&gt;，一时间无法忍受。
&lt;img alt=&#34;23.1-activity-bar&#34; src=&#34;https://gi.weiyan.tech/2024/10/23.1-activity-bar.png&#34; /&gt;   &lt;br /&gt;
&lt;img alt=&#34;galaxy-24.1&#34; src=&#34;https://gi.weiyan.tech/2024/10/galaxy-24.1.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;第二个原因是，后台 PostgreSQL 数据库的升级遇到了 &lt;a href=&#34;https://help.galaxyproject.org/t/database-upgrade-error/13687&#34;&gt;function gen_random_uuid() does not exist&lt;/a&gt; 异常，一下子没法解决也不想去升级 PostgreSQL 版本。&lt;/p&gt;
&lt;p&gt;所以，最终选择了从 &lt;strong&gt;release_20.09&lt;/strong&gt; 升级到次新的 &lt;strong&gt;release_24.0&lt;/strong&gt; 版本方案。&lt;/p&gt;
&lt;h2 id=&#34;安装系统环境&#34;&gt;安装系统环境&lt;a class=&#34;headerlink&#34; href=&#34;#安装系统环境&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;这里以 release_24.1 作为示例，该环境要求同样适用于 release_24.0。&lt;/p&gt;
&lt;p&gt;Galaxy release_24.1 默认安装 node-v18.12.1，参考：&lt;code&gt;run.sh&lt;/code&gt; → &lt;code&gt;./scripts/common_startup_functions.sh&lt;/code&gt; → &lt;code&gt;./scripts/common_startup.sh&lt;/code&gt; → &lt;code&gt;nodeenv -n &#34;$NODE_VERSION&#34; -p&lt;/code&gt; 的安装代码。&lt;/p&gt;
&lt;p&gt;node-v18.12.1 下载地址：&lt;a href=&#34;https://nodejs.org/download/release/v18.12.1/&#34;&gt;https://nodejs.org/download/release/v18.12.1/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;node-v18.12.1 要求 g++ 8.3.0 or clang++ 8.0.0：  &lt;br /&gt;
&lt;img alt=&#34;node-v18.12.1-gcc&#34; src=&#34;https://gi.weiyan.tech/2024/10/node-v18.12.1-gcc.webp&#34; /&gt;&lt;/p&gt;
&lt;p&gt;可以通过安装 Devtoolset 的方式解决：    &lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;手动调整  CentOS 7 的 SCL YUM 源（也可以 yum 安装），注意变更 &lt;code&gt;baseurl&lt;/code&gt; 为阿里云或者其他的源链接。
   &lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 会默认在 /etc/yum.repos.d 下生成 2 个 repo 源文件&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# CentOS-SCLo-scl.repo&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# CentOS-SCLo-scl-rh.repo&lt;/span&gt;
yum&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;centos-release-scl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;centos-release-scl-rh
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;更新 yum 源的缓存。
   &lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/etc/yum.repos.d
yum&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;clean&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;all
yum&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;makecache
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;安装 scl-utils，scl-utils 是管理 SCL (Software Collection) 环境设置和运行软件的一套软件工具。
   &lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;yum&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;scl-utils
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;安装 devtoolset-9。
   &lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;yum&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;devtoolset-9
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;激活 devtoolset-9。
   &lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/opt/rh/devtoolset-9/enable
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;python-环境&#34;&gt;Python 环境&lt;a class=&#34;headerlink&#34; href=&#34;#python-环境&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Galaxy 要求 Python &amp;gt;= 3.8，node-v18.12.1 要求 3.6&amp;lt;=Python&amp;lt;=3.10，这里选择 Python-3.9.18，安装如下。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;wget&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://www.python.org/ftp/python/3.9.18/Python-3.9.18.tgz
tar&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;zvxf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Python-3.9.18.tgz
&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Python-3.9.18
&lt;span class=&#34;nv&#34;&gt;$enabledevtoolset9&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;TCLTK_LIBS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;-L/home/shenweiyan/software/tcltK-8.5.19/lib -ltcl8.5 -ltk8.5&amp;quot;&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;TCLTK_CFLAGS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;-I/home/shenweiyan/software/tcltK-8.5.19/include&amp;quot;&lt;/span&gt;
./configure&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--enable-optimizations&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/home/shenweiyan/software/python-3.9.18&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--with-openssl&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/home/shenweiyan/software/openssl-1.1.1/&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--with-tcltk-includes&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;-I/home/shenweiyan/software/tcltK-8.5.19/include&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--with-tcltk-libs&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;-L/home/shenweiyan/software/tcltK-8.5.19/lib -ltcl8.5 -ltk8.5&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;
make&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-j&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4&lt;/span&gt;
make&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Python-3.9.18 安装完成后，避免 &lt;code&gt;ssl&lt;/code&gt; 模块无法正常 &lt;code&gt;import&lt;/code&gt; 使用，需要在环境中增加以下设置。
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;LD_LIBRARY_PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/home/shenweiyan/software/openssl-1.1.1/lib:&lt;span class=&#34;nv&#34;&gt;$LD_LIBRARY_PATH&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;h2 id=&#34;node-环境&#34;&gt;Node 环境&lt;a class=&#34;headerlink&#34; href=&#34;#node-环境&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Galaxy 的 &lt;code&gt;sh run.sh&lt;/code&gt; 默认通过 &lt;code&gt;ssl&lt;/code&gt; 的方式安装已经提前编译好的 node-v18.12.1-linux-x64.tar.gz（直接解压即可使用），对于系统版本比较低的服务器（如 CentOS 7）会存在 GLIBC 异常，因此需要调整为 &lt;code&gt;ignore_ssl_certs&lt;/code&gt; 的下载方式 + source 源码安装的方式安装 node-v18.12.1。   &lt;br /&gt;
&lt;img alt=&#34;nodeenv--help&#34; src=&#34;https://gi.weiyan.tech/2024/10/nodeenv-help.webp&#34; /&gt;&lt;/p&gt;
&lt;p&gt;所以，最终的方法为调整 &lt;code&gt;./scripts/common_startup.sh&lt;/code&gt; 中 &lt;code&gt;nodeenv -n &#34;$NODE_VERSION&#34; -p&lt;/code&gt; 的安装代码如下：
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;nodeenv&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-n&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$NODE_VERSION&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-p&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--source&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--ignore_ssl_certs&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--jobs&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;node-v18.12.1 下载地址：&lt;a href=&#34;https://nodejs.org/download/release/v18.12.1/&#34;&gt;https://nodejs.org/download/release/v18.12.1/&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;由于编译非常耗时（4核8G 的服务器编译了 1 个小时左右），且对 Python 版本有要求，建议手动安装，具体安装步骤如下。
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;shenweiyan@centos-vm-7&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;10&lt;/span&gt;:30:34&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/home/shenweiyan/src/node-v18.12.1
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;./configure&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/home/shenweiyan/software/node-v18.12.1
Node.js&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;configure:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Found&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Python&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;.11.6...
Please&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;use&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;python3.10&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;or&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;python3.9&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;or&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;python3.8&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;or&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;python3.7&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;or&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;python3.6.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;wget&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://nodejs.org/download/release/v18.12.1/node-v18.12.1.tar.gz
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tar&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;zvxf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;node-v18.12.1.tar.gz
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;node-v18.12.1
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/opt/rh/devtoolset-9/enable
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;./configure&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/home/shenweiyan/software/node-v18.12.1
Node.js&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;configure:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Found&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Python&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;.9.18...
INFO:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;configure&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;completed&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;successfully
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-j&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;yarn-环境&#34;&gt;Yarn 环境&lt;a class=&#34;headerlink&#34; href=&#34;#yarn-环境&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;注意要先设置 &lt;code&gt;npm&lt;/code&gt; 的路径，如果有多个版本的 &lt;code&gt;npm&lt;/code&gt;，会因为版本混乱导致语法异常。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/home/shenweiyan/software/node-v18.12.1/bin:&lt;span class=&#34;nv&#34;&gt;$PATH&lt;/span&gt;
/home/shenweiyan/software/node-v18.12.1/bin/npm&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--global&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;yarn
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;pip-源&#34;&gt;pip 源&lt;a class=&#34;headerlink&#34; href=&#34;#pip-源&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Galaxy 在安装 &lt;code&gt;requirements.txt&lt;/code&gt; 的时候默认使用下面两个源：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://wheels.galaxyproject.org/simple&#34;&gt;https://wheels.galaxyproject.org/simple&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://pypi.python.org/simple&#34;&gt;https://pypi.python.org/simple&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;对于国内服务器，可以考虑更换为阿里云或者清华大学的 pip 源。可以：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;在 &lt;code&gt;scripts/common_startup.sh&lt;/code&gt; 中修改：
  &lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;PYPI_INDEX_URL&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;https://mirrors.aliyun.com/pypi/simple/&amp;quot;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在 &lt;code&gt;requirements.txt&lt;/code&gt; 头部增加：
  &lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;-i&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://mirrors.aliyun.com/pypi/simple/
--extra-index-url&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://wheels.galaxyproject.org/simple
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;数据库升级&#34;&gt;数据库升级&lt;a class=&#34;headerlink&#34; href=&#34;#数据库升级&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;这是本次 Galaxy 核心版本升级时候遇到的最大问题。&lt;/p&gt;
&lt;p&gt;由于 Galaxy 在 release_21.05 新增加了一个 &lt;a href=&#34;https://github.com/galaxyproject/galaxy/pull/11914&#34;&gt;&lt;code&gt;history_audit&lt;/code&gt;&lt;/a&gt; 数据表，release_20.09 的数据库直接执行 &lt;code&gt;sh manage_db.sh upgrade&lt;/code&gt; 升级的时候 &lt;code&gt;history_audit&lt;/code&gt; 数据表并不会一并创建和更新，因此最终导致在 Galaxy 服务启动的时候发生错误。&lt;/p&gt;
&lt;p&gt;这应该是数据库升级时候的一个bug，经过摸索发现，目前可以参考下面的文章，通过分步升级的方式解决。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://mp.weixin.qq.com/s/arRZ-3mMrpUIsXYuqg4sGQ&#34;&gt;https://mp.weixin.qq.com/s/arRZ-3mMrpUIsXYuqg4sGQ&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;以上解决方法，参考：&lt;a href=&#34;https://github.com/galaxyproject/galaxy/issues/19016&#34;&gt;galaxyproject/galaxy #19016&lt;/a&gt;   &lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;galaxy-issues-19016&#34; src=&#34;https://gi.weiyan.tech/2024/10/galaxy-issues-19016.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;总结&#34;&gt;总结&lt;a class=&#34;headerlink&#34; href=&#34;#总结&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;更新后的 release_24.0 界面看起来比旧版本要更加清爽舒服一些，各个页面的汉化功能也有所改善，新增的 Notifications 功能也挺不错，总之升级之后各个方面还是挺满意的，其他细节和功能还在体验中。&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;90&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/discussions-90/</link>
      <pubDate>Fri, 18 Oct 2024 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/discussions-90/</guid>
      
    </item>
    
    <item>
      <title>上下班听广播</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;自从切换了电动车的通勤方式，同时就打开了广播的大门。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;&lt;img alt=&#34;hello-morning&#34; src=&#34;https://gi.weiyan.tech/2024/09/hello-morning.webp&#34; /&gt;&lt;/p&gt;
&lt;p&gt;符合自己兴趣的电台不好找，尤其是下午下班的这段时间。&lt;/p&gt;
&lt;h2 id=&#34;珠江第一线&#34;&gt;珠江第一线&lt;a class=&#34;headerlink&#34; href=&#34;#珠江第一线&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;珠江第一线，朝朝陪你饮早茶！&lt;/p&gt;
&lt;p&gt;早上的选择中个人尤其喜欢珠江经济台的《珠江第一线》，它的播出时间是周一到周五的 07:30-09:00，是珠江经济台重点打造的一档粤语民生新闻名牌节目，李嘉、淼钧、郑达等一众名嘴的组合，加上独具的广府文化韵味，针砭时弊，作风硬朗，嬉笑怒骂，亦庄亦谐，让人在上班的路上更加放松。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;《珠江第一线》开播之时，就在广东广播界率先提出“打造听众上班路上的新闻资讯大餐”的口号。节目立足民生视觉，着重在内容碎片化上下功夫，让海量资讯更有层次感，更适合伴随性收听的人群；另外增加生活化话题、软性资讯，讲老百姓身边的故事，塑造老百姓“贴心老友”节目品牌形象；同时强化新闻时评的针对性，聘请最强广播评论专家团队，与市民评论员联袂，每天对社会热点话题进行精辟点评；节目主持人也一改传统的新闻节目播报方式，使用个性化的“说新闻”，节目过程还不时插播上班路上的交通、天气状况，使节目更接地气，更具亲和力。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;放工路上&#34;&gt;放工路上&lt;a class=&#34;headerlink&#34; href=&#34;#放工路上&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;下班时间段的选择，要说十分喜欢的节目目前没找到，虽然会听同样是珠江经济台的《珠江晚高峰》，但找不到《珠江第一线》的舒适感。&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;89&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-89/</link>
      <pubDate>Sun, 29 Sep 2024 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-89/</guid>
      
    </item>
    
    <item>
      <title>All in one</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;写笔记，做表格的很多时候，总有一个 All in one 的魔咒在脑海挥之不去，以前用语雀就想当然 All in yuque，后来又想着 All in GitHub，但现实终究是现实。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;没有十全十美的平台，语雀就没有邮箱、日历之类的功能；小记也没有浮墨笔记那么好用。&lt;/p&gt;
&lt;p&gt;GitHub 虽好，但始终有一堵长城横亘在前面，时时刻刻提醒着你小心翼翼。&lt;/p&gt;
&lt;p&gt;现在的飞书，各种功能都很齐全，但是不能实时查看文档的 Markdown，自己也没有能力去造这样一个轮子。有很多的时候，都有一个 All in feishu 的魔咒的诱惑着我，但又一次一次被它的木桶理论劝退。&lt;/p&gt;
&lt;p&gt;知识的沉淀，对于承受的载体没有什么是可以从一而终一成不变的，很多东西虽然分散，但也印证了不要把所有的鸡蛋放进一个篮子。逐渐的，我用上了飞书国际版的邮箱，我用上了语雀（小记/知识库）来记录我的一些碎片想法和文字，最终还是选择 GitHub 来记录这一切。&lt;/p&gt;
&lt;p&gt;不得不说，GitHub 真是个码字的好地方。&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;88&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-88/</link>
      <pubDate>Tue, 24 Sep 2024 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-88/</guid>
      
    </item>
    
    <item>
      <title>GCC 版本不一致导致的 R magick 包安装错误</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;在安装 Y 叔的 &lt;code&gt;yyplot&lt;/code&gt; 时候，发现 &lt;code&gt;magick&lt;/code&gt; 依赖包安装的时候的一些棘手问题，特此记录一下。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;h2 id=&#34;r-403-安装&#34;&gt;R-4.0.3 安装&lt;a class=&#34;headerlink&#34; href=&#34;#r-403-安装&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;library&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;remotes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;remotes&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;install_github&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;GuangchuangYu/yyplot&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;kc&#34;&gt;...&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;installing&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;package&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;‘&lt;span class=&#34;n&#34;&gt;magick&lt;/span&gt;’&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;...&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;**&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;package&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;‘&lt;span class=&#34;n&#34;&gt;magick&lt;/span&gt;’&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;successfully&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;unpacked&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;and&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MD5&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sums&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;checked&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;**&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;using&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;staged&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;installation&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Package&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Magick&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;was&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;not&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;found&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;the&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pkg&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;config&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;search&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;path.&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Perhaps&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;you&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;should&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;add&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;the&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;directory&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;containing&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;`&lt;span class=&#34;n&#34;&gt;Magick&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;+.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pc&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;&lt;/span&gt;
&lt;span class=&#34;s&#34;&gt;to the PKG_CONFIG_PATH environment variable&lt;/span&gt;
&lt;span class=&#34;s&#34;&gt;No package &amp;#39;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Magick&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39; found&lt;/span&gt;
&lt;span class=&#34;s&#34;&gt;Using PKG_CFLAGS=&lt;/span&gt;
&lt;span class=&#34;s&#34;&gt;Using PKG_LIBS=-lMagick++-6.Q16 -lMagickWand-6.Q16 -lMagickCore-6.Q16&lt;/span&gt;
&lt;span class=&#34;s&#34;&gt;--------------------------- [ANTICONF] --------------------------------&lt;/span&gt;
&lt;span class=&#34;s&#34;&gt;Configuration failed to find the Magick++ library. Try installing:&lt;/span&gt;
&lt;span class=&#34;s&#34;&gt; - deb: libmagick++-dev (Debian, Ubuntu)&lt;/span&gt;
&lt;span class=&#34;s&#34;&gt; - rpm: ImageMagick-c++-devel (Fedora, CentOS, RHEL)&lt;/span&gt;
&lt;span class=&#34;s&#34;&gt; - brew: imagemagick or imagemagick@6 (MacOS)&lt;/span&gt;
&lt;span class=&#34;s&#34;&gt;If Magick++ is already installed, check that &amp;#39;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pkg&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;config&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39; is in your&lt;/span&gt;
&lt;span class=&#34;s&#34;&gt;PATH and PKG_CONFIG_PATH contains a Magick++.pc file. If pkg-config&lt;/span&gt;
&lt;span class=&#34;s&#34;&gt;is unavailable you can set INCLUDE_DIR and LIB_DIR manually via:&lt;/span&gt;
&lt;span class=&#34;s&#34;&gt;R CMD INSTALL --configure-vars=&amp;#39;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;INCLUDE_DIR&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;...&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;LIB_DIR&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;...&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;&lt;/span&gt;
&lt;span class=&#34;s&#34;&gt;-------------------------- [ERROR MESSAGE] ---------------------------&lt;/span&gt;
&lt;span class=&#34;s&#34;&gt;&amp;lt;stdin&amp;gt;:1:22: fatal error: Magick++.h: No such file or directory&lt;/span&gt;
&lt;span class=&#34;s&#34;&gt;compilation terminated.&lt;/span&gt;
&lt;span class=&#34;s&#34;&gt;--------------------------------------------------------------------&lt;/span&gt;
&lt;span class=&#34;s&#34;&gt;ERROR: configuration failed for package ‘magick’&lt;/span&gt;
&lt;span class=&#34;s&#34;&gt;* removing ‘/home/shenweiyan/software/R/R-4.0.3/lib64/R/library/magick’&lt;/span&gt;
&lt;span class=&#34;s&#34;&gt;Error: Failed to install &amp;#39;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;yyplot&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt; from GitHub:&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;converted&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;warning&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;installation&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;of&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;package&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;‘&lt;span class=&#34;n&#34;&gt;magick&lt;/span&gt;’&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;had&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;non&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;zero&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;exit&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;status&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;quit&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Save&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;workspace&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;image&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;?&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;n&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;仅在 Bash 环境配置了 &lt;code&gt;PATH&lt;/code&gt; 和 &lt;code&gt;PKG_CONFIG_PATH&lt;/code&gt; 是不够的，安装过程会提示动态库的问题。  &lt;br /&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;# export PATH=/home/shenweiyan/software/ImageMagick-7.0.10/bin:$PATH
# export PKG_CONFIG_PATH=/home/shenweiyan/software/ImageMagick-7.0.10/lib/pkgconfig:$PKG_CONFIG_PATH
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;library&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;remotes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;remotes&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;install_github&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;GuangchuangYu/yyplot&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;kc&#34;&gt;...&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;**&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;R&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;**&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;inst&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;**&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;byte&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;compile&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;and&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;prepare&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;package&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lazy&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;loading&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;**&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;help&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;***&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;installing&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;help&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;indices&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;**&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;building&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;package&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;indices&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;**&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;installing&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;vignettes&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;**&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;testing&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;installed&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;package&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;can&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;be&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;loaded&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;temporary&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;location&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Error&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;package&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;or&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;namespace&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;load&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;failed&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;‘&lt;span class=&#34;n&#34;&gt;magick&lt;/span&gt;’&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;dyn.load&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;DLLpath&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;DLLpath&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;...&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;unable&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;to&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;load&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;shared&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;object&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;/home/shenweiyan/software/R/R-4.0.3/lib64/R/library/00LOCK-magick/00new/magick/libs/magick.so&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;libMagick&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;-7&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;.Q16HDRI.so.4&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cannot&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;open&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;shared&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;object&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;No&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;such&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;or&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;directory&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Error&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;loading&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;failed&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Execution&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;halted&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;ERROR&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;loading&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;failed&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;removing&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;‘&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;home&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;shenweiyan&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;software&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;R&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;R&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;-4.0&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lib64&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;R&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;library&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;magick&lt;/span&gt;’
&lt;span class=&#34;n&#34;&gt;Error&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Failed&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;to&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;install&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;yyplot&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;GitHub&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;converted&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;warning&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;installation&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;of&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;package&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;‘&lt;span class=&#34;n&#34;&gt;magick&lt;/span&gt;’&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;had&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;non&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;zero&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;exit&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;status&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;quit&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Save&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;workspace&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;image&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;?&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;n&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
最终解决方案：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;手动安装 &lt;code&gt;ggimage_0.3.1&lt;/code&gt;。
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;pkg&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;http://cran.r-project.org/src/contrib/Archive/ggimage/ggimage_0.3.1.tar.gz&amp;#39;&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;install.packages&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pkg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;repos&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;NULL&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;source&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;配置必要环境。
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/home/shenweiyan/software/ImageMagick-7.0.10/bin:&lt;span class=&#34;nv&#34;&gt;$PATH&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;PKG_CONFIG_PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/home/shenweiyan/software/ImageMagick-7.0.10/lib/pkgconfig:&lt;span class=&#34;nv&#34;&gt;$PKG_CONFIG_PATH&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;LD_LIBRARY_PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/home/shenweiyan/software/ImageMagick-7.0.10/lib:&lt;span class=&#34;nv&#34;&gt;$LD_LIBRARY_PATH&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;安装。根据提示，先安装缺失的 &lt;code&gt;meme&lt;/code&gt; 包，然后再安装 &lt;code&gt;yyplot&lt;/code&gt;。
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;library&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;remotes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;options&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;repos&amp;quot;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;CRAN&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;https://mirrors.tuna.tsinghua.edu.cn/CRAN/&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;install.packages&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;meme&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;remotes&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;install_github&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;GuangchuangYu/yyplot&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;r-430-安装&#34;&gt;R-4.3.0 安装&lt;a class=&#34;headerlink&#34; href=&#34;#r-430-安装&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;R-4.3.0 安装 &lt;code&gt;magick_2.8.4&lt;/code&gt; 会出现 &lt;a href=&#34;https://github.com/ropensci/magick/issues/166&#34;&gt;ropensci/magick#166&lt;/a&gt; 的问题。根据 &lt;a href=&#34;https://github.com/ropensci/magick/issues/166#issuecomment-457875591&#34;&gt;ropensci/magick#166#issuecomment-457875591&lt;/a&gt; 的描述，&lt;strong&gt;编译 ImageMagick 的 gcc 需要跟编译 R 的 gcc 保持版本一致&lt;/strong&gt;。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;重新编译安装 ImageMagick
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;wget&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://download.imagemagick.org/archive/releases/ImageMagick-7.0.10-24.tar.xz
extract&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ImageMagick-7.0.10-24.tar.xz
&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ImageMagick-7.0.10-24
./configure&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;CC&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/home/shenweiyan/software/gcc-7.3.0/bin/gcc&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;CXX&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/home/shenweiyan/software/gcc-7.3.0/bin/g++&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/home/shenweiyan/software/ImageMagick-7.0.10-24
make&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;
make&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;安装 &lt;code&gt;magick&lt;/code&gt; 包
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# export PATH=/home/shenweiyan/software/ImageMagick-7.0.10-24/bin:$PATH&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# export PKG_CONFIG_PATH=/home/shenweiyan/software/ImageMagick-7.0.10-24/lib/pkgconfig:$PKG_CONFIG_PATH&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# export LD_LIBRARY_PATH=/home/shenweiyan/software/ImageMagick-7.0.10-24/lib:$LD_LIBRARY_PATH&lt;/span&gt;
/home/shenweiyan/software/R/R-4.3.0/bin/R
&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;options&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;repos&amp;quot;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;c&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;CRAN&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;https://mirrors.tuna.tsinghua.edu.cn/CRAN/&amp;quot;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;))&lt;/span&gt;
&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install.packages&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;magick&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
...
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;根据提示，先安装缺失的 &lt;code&gt;meme&lt;/code&gt; 包，然后再安装 &lt;code&gt;yyplot&lt;/code&gt;。
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;library&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;remotes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;options&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;repos&amp;quot;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;CRAN&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;https://mirrors.tuna.tsinghua.edu.cn/CRAN/&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;install.packages&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;meme&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;remotes&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;install_github&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;GuangchuangYu/yyplot&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;87&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/tech/discussions-87/</link>
      <pubDate>Tue, 10 Sep 2024 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/tech/discussions-87/</guid>
      
    </item>
    
    <item>
      <title>Linux 下 PostgreSQL 源码编译安装</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;PostgreSQL 是一个功能强大的开源对象关系数据库管理系统(ORDBMS)，它从伯克利写的 POSTGRES 软件包发展而来（1995 年几个 UCB 的学生为 Post-Ingres 开发了 SQL 的接口，正式发布了 PostgreSQL95，随后一步步在开源社区中成长起来），经过十几年的发展， PostgreSQL 已经成为世界上发展最快最受欢迎的数据库系统之一。&lt;/p&gt;
&lt;p&gt;本文章主要介绍在 CentOS 下源码编码安装 PostgreSQL-10.0 的一些简单步骤，以供参考。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;h2 id=&#34;1-新增用户组及用户&#34;&gt;1. 新增用户组及用户&lt;a class=&#34;headerlink&#34; href=&#34;#1-新增用户组及用户&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;PostgreSQL 默认是通过 &lt;code&gt;postgres:postgres&lt;/code&gt; 来启动和使用的，因此在安装 PostgreSQL 前需要先创建 &lt;code&gt;postgres&lt;/code&gt; 用户组及 &lt;code&gt;postgres&lt;/code&gt; 用户。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 在root权限下进行&lt;/span&gt;
groupadd&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;postgres&lt;span class=&#34;w&#34;&gt;                    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 添加postgres用户组&lt;/span&gt;
useradd&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;postgres&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-g&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;postgres&lt;span class=&#34;w&#34;&gt;         &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 添加postgres用户&lt;/span&gt;
passwd&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;postgres&lt;span class=&#34;w&#34;&gt;                      &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 设置postgres用户密码&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;2-安装&#34;&gt;2. 安装&lt;a class=&#34;headerlink&#34; href=&#34;#2-安装&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$ wget https://ftp.postgresql.org/pub/source/v10.0/postgresql-10.0.tar.gz
$ tar zvxf postgresql-10.0.tar.gz
$ cd postgresql-10.0
$ ./configure --prefix=/data/softwares/pgsql
$ make
$ make install
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;解决依赖：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;FAQ1：configure: error: readline library not found
$ yum install readline-devel

FAQ2：configure: error: zlib library not found
$ yum install zlib-devel
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;3-启动&#34;&gt;3. 启动&lt;a class=&#34;headerlink&#34; href=&#34;#3-启动&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;＃ 新建数据库数据文件目录
$ mkdir /data/softwares/pgsql/data

# 新建数据库 log 文件目录
$ mkdir /data/softwares/pgsql/log

# 修改目录拥有者
$ chown postgres:postgres /data/softwares/pgsql/data -R
$ chown postgres:postgres /data/softwares/pgsql/log -R

# 执行数据库初始化脚本
$ su postgres
$ /data/softwares/pgsql/bin/initdb --encoding=utf8 -D /data/softwares/pgsql/data

# 启动 PostgreSQL 服务
$ /data/softwares/pgsql/bin/pg_ctl -D /data/softwares/pgsql/data -l /data/softwares/pgsql/log/postgresql.log start    #postgres 用户下执行

# 登录 PostgreSQL 数据库
$ psql
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;psql-db-list&#34; src=&#34;https://gi.weiyan.tech/2024/09/psql-db-list.webp&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;4-重启&#34;&gt;4. 重启&lt;a class=&#34;headerlink&#34; href=&#34;#4-重启&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$ su postgres
$ /data/softwares/pgsql/bin/pg_ctl -D /data/softwares/pgsql/data -l /data/softwares/pgsql/log/postgresql.log restart
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;5-设置开机启动&#34;&gt;5. 设置开机启动&lt;a class=&#34;headerlink&#34; href=&#34;#5-设置开机启动&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;解压后的 postgresql-x.x.x 下提供了基于 freebsd、linux、osx 3 个系统的 &lt;code&gt;postgresql&lt;/code&gt; 启动命令。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1）对于通过源码自定义安装的 pgsql，需要修改相关启动脚本：&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;postgresql-10.0/postgresql-10.0/contrib/start-scripts
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;vi&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;linux
......
......
&lt;span class=&#34;c1&#34;&gt;# Installation prefix&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;prefix&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/data/softwares/pgsql

&lt;span class=&#34;c1&#34;&gt;# Data directory&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;PGDATA&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;/data/softwares/pgsql/data&amp;quot;&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# Who to run the postmaster as, usually &amp;quot;postgres&amp;quot;.  (NOT &amp;quot;root&amp;quot;)&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;PGUSER&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;postgres

&lt;span class=&#34;c1&#34;&gt;# Where to keep a log file&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;PGLOG&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PGDATA&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;/serverlog&amp;quot;&lt;/span&gt;
......
......
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;2）设置数据库开机启动：&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;cp&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/data/softwares/source/postgresql-10.0/postgresql-10.0/contrib/start-scripts/linux&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/etc/init.d/postgresql

&lt;span class=&#34;c1&#34;&gt;# 添加执行权限&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;chmod&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;a+x&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/etc/init.d/postgresql

&lt;span class=&#34;c1&#34;&gt;# 添加至开机启动&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;chkconfig&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--add&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;postgresql
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;chkconfig&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;postgresql&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;on
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;3）查看 postgresql 状态&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;service&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;postgresql&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;status
pg_ctl:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;server&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;is&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;running&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;PID:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;32586&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
/data/softwares/pgsql/bin/postgres&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;-D&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;/data/softwares/pgsql/data&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;6-禁止管理员空密码登录&#34;&gt;6. 禁止管理员空密码登录&lt;a class=&#34;headerlink&#34; href=&#34;#6-禁止管理员空密码登录&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;在 PostgreSQL 中，如果你想禁止管理员（通常是 &lt;code&gt;postgres&lt;/code&gt; 用户）使用空密码登录（正常情况下 &lt;code&gt;postgres&lt;/code&gt; 用户可以直接使用 &lt;code&gt;psql&lt;/code&gt; 命令直接登录 PostgreSQL），你可以通过修改 &lt;code&gt;pg_hba.conf&lt;/code&gt; 文件来实现。&lt;/p&gt;
&lt;p&gt;第一步，找到你的 &lt;code&gt;pg_hba.conf&lt;/code&gt; 文件。这个文件通常位于 PostgreSQL 的数据目录中，例如 &lt;code&gt;/var/lib/pgsql/data&lt;/code&gt; 或 &lt;code&gt;/etc/postgresql/&amp;lt;version&amp;gt;/main&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;第二步，修改 &lt;code&gt;pg_hba.conf&lt;/code&gt; 文件，将管理员的登录方式从 &lt;code&gt;trust&lt;/code&gt; 更改为 &lt;code&gt;md5&lt;/code&gt; 或 &lt;code&gt;password&lt;/code&gt;。这意味着所有连接，包括 &lt;code&gt;postgres&lt;/code&gt; 用户的，都需要提供密码。&lt;/p&gt;
&lt;p&gt;例如，将以下行：
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;local   all             postgres                                trust
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;修改为：
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;local   all             postgres                                md5
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;第三步，重新加载或重启 PostgreSQL 服务以应用更改。&lt;/p&gt;
&lt;p&gt;重新加载配置的命令通常是：
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;pg_ctl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;reload
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;或者重启服务：
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;systemctl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;restart&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;postgresql
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;或者在不同的系统中可能是：
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;service&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;postgresql&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;restart
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;完成这些步骤后，&lt;code&gt;postgres&lt;/code&gt; 用户将不能再使用空密码登录数据库。其他用户如果想登录数据库，也需要提供密码。&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;86&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/tech/discussions-86/</link>
      <pubDate>Tue, 03 Sep 2024 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/tech/discussions-86/</guid>
      
    </item>
    
    <item>
      <title>R 包安装指定 GCC 和 G++ 并开启 C++11 支持</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;如果你的 R 是使用比较低版本的 GCC（如 Red Hat 6.5 + GCC/G++ 4.4.7），但安装的 R 包需要开启 C++11 支持，或者需要更高版本的 GCC 和 G++，可以参考一下这个方法。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;首先，在 &lt;code&gt;home&lt;/code&gt; 目录创建一个 &lt;code&gt;~/.R/Makevars&lt;/code&gt; 文件。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;mkdir&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~/.R
vi&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~/.R/Makevars
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;然后，在 &lt;code&gt;Makevars&lt;/code&gt; 文件中加入以下内容。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nv&#34;&gt;CXX11&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/opt/rh/devtoolset-7/root/usr/bin/g++&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-std&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;c++11&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-fPIC
&lt;span class=&#34;nv&#34;&gt;CXX14&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/opt/rh/devtoolset-7/root/usr/bin/g++
&lt;span class=&#34;nv&#34;&gt;CXX14FLAGS&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-g&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-O2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;LTO&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;CXX14PICFLAGS&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-fpic
&lt;span class=&#34;nv&#34;&gt;CXX14STD&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-std&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;gnu++14
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;最后，重新打开 R，执行对应包安装。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nf&#34;&gt;options&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;repos&amp;quot;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;CRAN&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;https://mirrors.tuna.tsinghua.edu.cn/CRAN/&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;install.packages&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;gridtext&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;install-packages-gridtext&#34; src=&#34;https://gi.weiyan.tech/2024/08/install-packages-gridtext.webp&#34; /&gt;&lt;/p&gt;
&lt;p&gt;参考资料：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/wilkelab/gridtext/issues/7&#34;&gt;ERROR: compilation failed for package &amp;lsquo;gridtext&amp;rsquo; - wilkelab/gridtext#7&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;85&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/tech/discussions-85/</link>
      <pubDate>Fri, 30 Aug 2024 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/tech/discussions-85/</guid>
      
    </item>
    
    <item>
      <title>诛仙</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;闲来看剧，无意中在腾讯视频看了几集《诛仙》动漫，虽然个别人物在建模还不算特别满意，但总体还是很不错，而且冲着对原著的高度还原，瞬间有种入坑不能自拔的感觉。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;第一次接触诛仙小说应该也是十几年前的事情，高一高二一度沉迷网络小说，一发不可收拾，断断续续的看了不少。惊叹于作者对于诛仙世界架构和故事逻辑，主副线也很完整，人物鲜活丰满，而且文笔也不错。最引人瞩目的当属主人公的感情纠葛，碧瑶的虽死不悔的爱，陆雪琪的温婉素雅和为了张小凡的付出都是让那时的我特别特别感动的，从当时来说，诛仙确实是非常可以带给人一种震撼的感觉的。      &lt;/p&gt;
&lt;p&gt;如今从动漫入局，又把原小说看了一遍，梦回青春年少的仙侠错觉，总有种说不清道不明的神奇滋味。&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;84&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-84/</link>
      <pubDate>Tue, 20 Aug 2024 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-84/</guid>
      
    </item>
    
    <item>
      <title>解决 GitHub 提交次数多导致仓库体积过大的问题</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;提交代码要控制节奏，不能随心所欲，尤其是团队协作开发；如果发现 &lt;code&gt;.git&lt;/code&gt; 目录太大，推荐使用 Git LFS 来管理大文件。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;参考以下几篇文章的解决方案：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&#34;https://www.cnblogs.com/chengxy-nds/p/17306115.html&#34;&gt;被吐槽 GitHub仓 库太大，直接 600M 瘦身到 6M，这下舒服了&lt;/a&gt; - 博客园&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.zhihu.com/question/29769130&#34;&gt;如何解决 GitHub 提交次数过多 .git 文件过大的问题？&lt;/a&gt; - 知乎&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;完全重建版本库&#34;&gt;完全重建版本库&lt;a class=&#34;headerlink&#34; href=&#34;#完全重建版本库&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;rm&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-rf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;.git
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;git&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;config&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--global&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;init.defaultBranch&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;main
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;git&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;init
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;git&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;add&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--all
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;git&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;commit&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-m&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;Initial commit&amp;quot;&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;git&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;remote&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;add&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;origin&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://&amp;lt;github_token&amp;gt;@github.com/shenweiyan/Digital-Garden.git
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;git&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;push&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-f&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-u&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;origin&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;main
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;83&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-83/</link>
      <pubDate>Mon, 12 Aug 2024 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-83/</guid>
      
    </item>
    
    <item>
      <title>巴黎奥运</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;2024 年的巴黎奥运会各项比赛正在如火如荼进行，但是在个人感官上，这一届的奥运会热度好像有点低。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;对于开幕式，有两点切身的感受比较深刻。一个是时间定于 7 月 27 日（星期六）凌晨，第二个是可以在电影院观看 2024 年巴黎奥运会开幕式直播。这些信息基于都是来源于自己在上班路上的听广播习惯，广州可进行奥运会开幕式观影预约的影院仅有 4 家，但需要达到最低拼场人数才可 &amp;ldquo;开团&amp;rdquo;！&lt;/p&gt;
&lt;p&gt;作为史上第一次把开幕式放在室外搞，也是首次摈弃以往步行进入体育场的传统，让运动员乘船沿着巴黎的&amp;rdquo;主干道&amp;rdquo; ——塞纳河前进。这届奥运会的确有点别出心裁。个人对于开幕式并没有什么特别值得期待的，也就事后通过各种短视频看了一下中国代表团出场、点燃圣火，以及其他零零散散的一些画面，感觉相比上一届的日本奥运会，巴黎奥运会给人印象更加深刻，文化底蕴、开放性、包容性都很不错，但也不可否认开幕式过后的各种两极分化评论，这的确也是争议性相当大的异常奥运会。&lt;/p&gt;
&lt;p&gt;奥运会最大的看点还是比赛。作为四年难得一遇的体育盛宴，各项赛程都很吸引人。&lt;/p&gt;
&lt;p&gt;个人最大的期待，还是在于羽毛球，小组赛的赛程也追了很多场，接下来依旧值得期待。跳水、游泳、排球、篮球，时间允许下肯定也是不能错过的。&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;记录一下那些自己看过的一些赛事，为这个夏天的运动健儿们加油。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;7 月 28 - 19:30 - 周日  篮球 | 女子小组赛 - A组(1)：西班牙（90） VS 中国（89）   &lt;br /&gt;
  没顶住！女篮首战憾负西班牙！     &lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;7 月 29 - 21:40 - 周一  羽毛球 | 男子双打小组赛 - D组(5)：丹麦（2） VS 中国（0）        &lt;br /&gt;
  &lt;img src=&#39;https://gi.weiyan.tech/2024/08/badminton-0729.png&#39; width=600 alt=&#39;badminton-0729&#39;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;7 月 30 - 20:30 - 周二 乒乓球 | 混合双打金牌赛：中国（4） VS 朝鲜（2）   &lt;br /&gt;
  乒乓球中国的首个奥运混双金牌！终于到手！   &lt;br /&gt;
  &lt;img src=&#39;https://gi.weiyan.tech/2024/08/ping-pong-china-korea-2024.jpg&#39; width=600 alt=&#39;ping-pong-china-korea-2024&#39;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;7 月 30 - 21:40 - 周二 羽毛球 | 男子双打小组赛 - D组(8)：中国（2） VS 日本（0）   &lt;br /&gt;
  保木卓朗/小林优吾 vs  欧烜屹/刘雨辰，图欧组合终于赢了，不容易。     &lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;7 月 31 - 19:30 - 周三 篮球 | 女子小组赛 - A组(4)：塞尔维亚（81） VS 中国（59）   &lt;br /&gt;
  两连败！中国女篮22分惨负塞尔维亚，看的揪心，后面两节完全被碾压！   &lt;br /&gt;
  &lt;img src=&#39;https://gi.weiyan.tech/2024/08/basketball-0731.png&#39; width=600 alt=&#39;basketball-0731&#39;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;8 月 1 - 19:00 - 周四 羽毛球 | 男子双打1/4决赛(2)：中国（2） VS 印尼（0）       &lt;br /&gt;
  梁王（梁伟铿/王昶） 2 比 0 胜双阿（阿尔菲安/阿迪安托），晋级巴黎奥运会 4 强！   &lt;br /&gt;
  &lt;img src=&#39;https://gi.weiyan.tech/2024/08/badminton-lw-paris-2024.jpg&#39; width=600 alt=&#39;badminton-lw-paris-2024&#39;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;8 月 1 - 21:20 - 周四 羽毛球 | 男子单打16强赛(5)：中国（0） VS 新加坡（2）  &lt;br /&gt;
  李诗沣 0 比 2 不敌骆建佑，脑子不够叠加勇气不够，战术执行不起来，输得不冤。。。  &lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;8 月 2 - 22:10 - 周五 羽毛球 | 混合双打金牌赛：中国（2）VS 韩国（0）      &lt;br /&gt;
  雅思组合（黄雅琼/郑思维）2:0 胜韩国金银组合（金元昊/郑那银），成就大满贯，圆梦巴黎！这场决赛不得不说，郑思维状态是真的好，打疯了！    &lt;br /&gt;
  &lt;img src=&#39;https://gi.weiyan.tech/2024/08/zheng-huang-paris-gold.jpg&#39; width=600 alt=&#39;zheng-huang-paris-gold&#39;&gt;    &lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;8 月 3 - 00:45 - 周六 羽毛球 | 男子单打1/4决赛(2)  &lt;br /&gt;
  爆冷，石宇奇 0-2 昆拉武特·威提讪，无缘羽毛球男单四强。第一次熬夜看的比赛，石头状态不好，战术上完全被压制，真的破防了！         &lt;br /&gt;
  &lt;img src=&#39;https://gi.weiyan.tech/2024/08/badminton-shiyuqi-paris-2024.jpg&#39; width=600 alt=&#39;badminton-shiyuqi-paris-2024&#39;&gt;     &lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;8 月 3 - 22:10 - 周六 羽毛球 | 女子双打金牌赛：中国（2）VS 中国（0）   &lt;br /&gt;
  凡尘组合（陈清晨/贾一凡）2:0 圣坛组合（谭宁/刘圣书），正如赛后她们身披国旗大喊 &lt;strong&gt;&amp;ldquo;中国女双第一&amp;rdquo;&lt;/strong&gt;！   &lt;br /&gt;
  &lt;img src=&#39;https://gi.weiyan.tech/2024/08/badminton-women-gold-paris-2024.jpg&#39; width=600 alt=&#39;badminton-women-gold-paris-2024&#39;&gt;      &lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;8 月 4 - 20:30 - 周日 乒乓球 | 男子单打金牌赛  &lt;br /&gt;
  4-1！樊振东击败莫雷加德勇夺男单冠军，成国乒第11位大满贯得主！  &lt;br /&gt;
  &lt;img src=&#39;https://gi.weiyan.tech/2024/08/fanzhendong-gold-paris-2024.webp&#39; width=600 alt=&#39;fanzhendong-gold-paris-2024&#39;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;8 月 4 - 22:30 - 周日 羽毛球 | 男子双打金牌赛   &lt;br /&gt;
  梁王组合（王昶/梁伟铿）1-2 惜败羚羊组合（李洋/王齐麟），遗憾摘银。接发球失误太多，加上随意挑战，顶着夺冠压力和政治压力打到决胜局的 19-21，也算尽力了！   &lt;br /&gt;
  &lt;img src=&#39;https://gi.weiyan.tech/2024/08/badminton-lw-silver-paris-2024.jpg&#39; width=600 alt=&#39;badminton-lw-silver-paris-2024&#39;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;82&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-82/</link>
      <pubDate>Mon, 29 Jul 2024 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-82/</guid>
      
    </item>
    
    <item>
      <title>寒冬将至</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;经济不景气，就像一股寒风，吹得人心颤颤，市场更是进入严冬，就业、消费和投资都变得如履薄冰。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;从最近身边的很多人身上，由于大环境不景气带来的裁员比比皆是，IVD 行业、生信行业订单以肉眼可见的速度越来越少，小公司首先扛不住开启裁员，大公司从考核到绩效各种手段轮番上阵。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#39;https://gi.weiyan.tech/2024/07/you-are-fired.webp&#39; width=600&gt;&lt;/p&gt;
&lt;p&gt;好一点的公司 N+1 赔偿，但凤毛麟角；次一点的公司礼仪性的赔偿 1、2 个月的工资；更多的是领完当月工资走人；更有甚者，老板跑路，变相裁人的 ......&lt;/p&gt;
&lt;p&gt;裁人失业年年有，今年的暴风雨可能会更加猛烈些。铁打的营盘，流水的兵，除了比比谁更卷，还是要多思考一下自身的选择和规划。&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;81&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-81/</link>
      <pubDate>Mon, 15 Jul 2024 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-81/</guid>
      
    </item>
    
    <item>
      <title>晒桌面</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;文艺男青年对于烟火气息的干净整洁桌面总有一种迷之吸引，热衷于各种晒桌面带来的解压感，其中的细节让我觉得这才是生活应该有的部分，尤其在这样的桌面上摆上各种我喜欢的影音娱乐设备，更能点亮我的生活。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;80&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-80/</link>
      <pubDate>Mon, 08 Jul 2024 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-80/</guid>
      
    </item>
    
    <item>
      <title>Python 陷阱之 strip、lstrip、rstrip 可以删除比预期更多的内容</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;blockquote&gt;
&lt;p&gt;本文章内容来源于 《&lt;a href=&#34;https://andrewwegner.com/python-gotcha-strip-functions-unexpected-behavior.html&#34;&gt;Python Gotcha: strip, lstrip, rstrip can remove more than expected&lt;/a&gt;》，由作者翻译，仅供个人学习使用，如有内容侵犯了你的权益，请联系管理员删除相关内容。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;介绍&#34;&gt;介绍&lt;a class=&#34;headerlink&#34; href=&#34;#介绍&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;作为一名软件工程师，你处理过不少脏字符串。删除用户输入中的前导或尾随空格可能是最常见的工作之一。&lt;/p&gt;
&lt;p&gt;在 Python 中，这是通过 &lt;code&gt;.strip()&lt;/code&gt; 、 &lt;code&gt;.lstrip()&lt;/code&gt; 或 &lt;code&gt;.rstrip()&lt;/code&gt; 函数完成的，通常如下所示：
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;     Andrew Wegner     &amp;quot;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lower&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;strip&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;&amp;#39;andrew wegner&amp;#39;&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;     Andrew Wegner     &amp;quot;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lower&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lstrip&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;&amp;#39;andrew wegner     &amp;#39;&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;     Andrew Wegner     &amp;quot;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lower&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rstrip&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;&amp;#39;     andrew wegner&amp;#39;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;这非常简单，并且没有什么意外的事情发生。&lt;/p&gt;
&lt;h2 id=&#34;陷阱&#34;&gt;陷阱&lt;a class=&#34;headerlink&#34; href=&#34;#陷阱&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;陷阱在于，这些函数中的每一个都可以接受一个要删除的字符列表。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;Andrew Wegner&amp;quot;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lower&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rstrip&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot; wegner&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;&amp;#39;and&amp;#39;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;发生了什么？为什么结果不只是：
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;andrew&amp;#39;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;h2 id=&#34;解释&#34;&gt;解释&lt;a class=&#34;headerlink&#34; href=&#34;#解释&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;再次仔细阅读文档中的这行说明：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;A list of &lt;strong&gt;characters&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;不是字符串列表 (Not a list of strings.)。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://docs.python.org/3/library/stdtypes.html#str.rstrip&#34;&gt;str.rstrip([chars])&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Return a copy of the string with trailing characters removed. The chars argument is a string specifying the set of characters to be removed. If omitted or &lt;code&gt;None&lt;/code&gt;, the chars argument defaults to removing whitespace. The chars argument is &lt;strong&gt;not a suffix&lt;/strong&gt;; rather, &lt;strong&gt;all combinations of its values are stripped&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;From &lt;a href=&#34;https://docs.python.org/3/library/stdtypes.html&#34;&gt;Built-in Types — Python 3.12.4 documentation&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;文档中已经明确并举例说明了这一行为及其含义。然而，对于新开发者来说，这是出乎意料的行为。毕竟，这些函数看起来都很直观。&lt;/p&gt;
&lt;p&gt;我的示例执行以下操作：
- 接收要删除的字符列表。在本例中，删除的字符是我姓氏中的所有字母，加上空格： &lt;code&gt;wegner&lt;/code&gt;。
- 将输入字符串中的所有字母都转成小写，结果为 &lt;code&gt;andrew wegner&lt;/code&gt;。
- 从字符串的右侧开始，删除输入列表中的字符。遇到列表中不存在的字符时停止。在本例中，这意味着从右到左删除了 &lt;code&gt;rengew wer&lt;/code&gt;，然后遇到 &lt;code&gt;andrew&lt;/code&gt; 中的 &lt;code&gt;d&lt;/code&gt; ， &lt;code&gt;rstrip&lt;/code&gt; 函数停止。
- 返回剩余的字符串 &lt;code&gt;and&lt;/code&gt;。&lt;/p&gt;
&lt;h2 id=&#34;解决方法&#34;&gt;解决方法&lt;a class=&#34;headerlink&#34; href=&#34;#解决方法&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Python 有两个可以正确删除&lt;strong&gt;字符串&lt;/strong&gt;的函数 - &lt;a href=&#34;https://docs.python.org/3.10/library/stdtypes.html#str.removesuffix&#34;&gt;&lt;code&gt;.removesuffix()&lt;/code&gt;&lt;/a&gt; 和 &lt;a href=&#34;https://docs.python.org/3.10/library/stdtypes.html#str.removeprefix&#34;&gt;&lt;code&gt;.removeprefix()&lt;/code&gt;&lt;/a&gt; 分别用于删除右侧和左侧的字符串。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;Andrew Wegner&amp;quot;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lower&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;removesuffix&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot; wegner&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;&amp;#39;andrew&amp;#39;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;这两个函数是作为 &lt;a href=&#34;https://peps.python.org/pep-0616/&#34;&gt;&lt;strong&gt;PEP-616&lt;/strong&gt;&lt;/a&gt; 的一部分在 Python 3.9 中引入的。该 PEP 明确指出了用户对 &lt;code&gt;*strip()&lt;/code&gt; 函数及其行为方式的困惑。引入这两个函数是为了实现所需的行为。&lt;/p&gt;
&lt;p&gt;需要注意的是，这两个 &lt;code&gt;remove*&lt;/code&gt; 函数最多只会删除字符串的一个实例。
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;Andrew Wegner Wegner&amp;quot;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lower&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;removesuffix&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot; wegner&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;&amp;#39;andrew wegner&amp;#39;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;79&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/tech/discussions-79/</link>
      <pubDate>Wed, 03 Jul 2024 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/tech/discussions-79/</guid>
      
    </item>
    
    <item>
      <title>手机</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;手机对大部分人来说，现在更像是一个外置的私密部位：能随意触碰的人只有自己，伴侣想碰也得防着，只有万不得已的时候，才能交到专业人士手上（指修手机的）。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;78&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-78/</link>
      <pubDate>Tue, 25 Jun 2024 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-78/</guid>
      
    </item>
    
    <item>
      <title>最舒服的字号和字体大小</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;最舒服的字号目前没有确切的定论，默认的微软雅黑还能接受。但是在字体大小这一块，个人对小字体情有独钟。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;在手机端一直都会把系统(或者是常用 APP)的字体设置为最小，很重要的一个原因就是能在一页上容纳更多的信息，排版布局看起来更加舒服。在知乎看到有人说喜欢用小字体的人，其性格可能会相对内向，日常生活中并不是特别外向开放的人，或许也有一定的道理。&lt;/p&gt;
&lt;p&gt;浏览器端最常用的 Google Chrome 和备用的 Edge 用的也是 &lt;strong&gt;14px&lt;/strong&gt; 的字体大小。    &lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;chrome-14px&#34; src=&#34;https://gi.weiyan.tech/2024/06/chrome-14px.png&#34; /&gt;&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;77&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-77/</link>
      <pubDate>Tue, 18 Jun 2024 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-77/</guid>
      
    </item>
    
    <item>
      <title>生活的后花园</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;年纪越大，越期待短暂的一些独处时光，安静且惬意。&lt;/p&gt;
&lt;p&gt;不知道大家的后花园都是什么，在 V2EX 看到，对有些人来说，备菜+做饭的一个小时，不接收外界信息，完全沉浸在只有自己的世界里，是他近几年找到了最好的放松方式了。对我自己可能就在于游戏+看电影，但是能有这样时间的机会确实不多。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;看到有人说家里玩游戏会有压力，这一点是同意的，尤其有了娃以后，放空自己的机会就更少了。所以，建立自己的精神后花园，去运运动其实也是一个不错的选择。&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;76&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-76/</link>
      <pubDate>Wed, 12 Jun 2024 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-76/</guid>
      
    </item>
    
    <item>
      <title>使用 Python 的 argparse 构建命令行界面</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;blockquote&gt;
&lt;p&gt;原文：&lt;a href=&#34;https://realpython.com/command-line-interfaces-python-argparse/&#34;&gt;Build Command-Line Interfaces With Python&amp;rsquo;s argparse&lt;/a&gt;     &lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;命令行应用在普通用户空间中可能并不常见，但它们存在于开发、数据科学、系统管理和许多其他操作中。每个命令行应用都需要一个用户友好的命令行界面 （CLI），以便你可以与应用本身进行交互。在 Python 中，您可以使用标准库中的 &lt;code&gt;argparse&lt;/code&gt; 模块创建功能齐全的 CLI。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;在本文中，你将了解如何：    &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;命令行界面入门；&lt;/li&gt;
&lt;li&gt;在 Python 中组织和布局命令行应用项目；&lt;/li&gt;
&lt;li&gt;使用 Python &lt;code&gt;argparse&lt;/code&gt; 创建命令行界面（command-line interfaces）；&lt;/li&gt;
&lt;li&gt;使用 &lt;code&gt;argparse&lt;/code&gt; 一些强大的功能深度自定义您的 CLI；&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;若要充分利用本教程，应熟悉 Python 编程，包括面向对象编程、脚本开发和执行以及 Python 包和模块等概念。如果您熟悉与使用命令行或终端相关的一般概念和主题，这也将很有帮助。&lt;/p&gt;
&lt;h2 id=&#34;了解命令行界面&#34;&gt;了解命令行界面&lt;a class=&#34;headerlink&#34; href=&#34;#了解命令行界面&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;自从计算机发明以来，人类一直需要并找到与这些机器交互和共享信息的方法。信息交换在人、计算机软件和硬件组件之间流动。其中任意两个元素之间的共享边界通常称为接口(&lt;a href=&#34;https://en.wikipedia.org/wiki/Interface_(computing)&#34;&gt;interface&lt;/a&gt;)。&lt;/p&gt;
&lt;p&gt;在软件开发中，接口是给定软件的特殊部分，它允许计算机系统组件之间的交互。当涉及到人机交互和软件交互时，这个重要的组件被称为用户界面（&lt;a href=&#34;https://en.wikipedia.org/wiki/User_interface&#34;&gt;user interface&lt;/a&gt;）。&lt;/p&gt;
&lt;p&gt;您会在编程中找到不同类型的用户界面。图形用户界面 （GUI） 可能是当今最常见的。但是，您还可以找到为其用户提供命令行界面 （CLI） 的应用和程序。在本教程中，你将了解 CLI 以及如何在 Python 中创建它们。&lt;/p&gt;
&lt;h2 id=&#34;命令行界面-cli&#34;&gt;命令行界面 （CLI）&lt;a class=&#34;headerlink&#34; href=&#34;#命令行界面-cli&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;命令行界面允许您通过操作系统命令行、终端或控制台与应用程序或程序进行交互。&lt;/p&gt;
&lt;p&gt;要了解命令行界面及其工作原理，请考虑此实际示例。假设您有一个名为 sample 包含三个示例文件的目录。如果您使用的是类 Unix 操作系统，例如 Linux 或 macOS，请继续在父目录中打开命令行窗口或终端，然后执行以下命令：  &lt;br /&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ls&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sample/
hello.txt&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;lorem.md&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;realpython.md
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;Unix 的 &lt;code&gt;ls&lt;/code&gt; 命令列出目标目录中包含的文件和子目录，该目录默认为当前工作目录。上面的命令调用没有显示有关 的内容 sample 的太多信息。它只在屏幕上显示文件名。&lt;/p&gt;
&lt;p&gt;假设你想要获取有关目录及其内容的更丰富信息，那么你不需要寻找其他程序，因为 ls 命令有一个功能齐全的命令行界面，并且提供了一组有用的选项，可以用来定制命令的行为。&lt;/p&gt;
&lt;p&gt;例如，继续执行带有 &lt;code&gt;-l&lt;/code&gt; 选项的 &lt;code&gt;ls&lt;/code&gt; 命令：  &lt;br /&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ls&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-l&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sample/
total&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;24&lt;/span&gt;
-rw-r--r--@&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;user&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;staff&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;83&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Aug&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;22&lt;/span&gt;:15&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;hello.txt
-rw-r--r--@&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;user&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;staff&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2609&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Aug&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;22&lt;/span&gt;:15&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;lorem.md
-rw-r--r--@&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;user&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;staff&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;428&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Aug&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;22&lt;/span&gt;:15&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;realpython.md
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;现在，&lt;code&gt;ls&lt;/code&gt; 命令的输出完全不同了。该命令显示了有关 sample 目录中文件的更多信息，包括权限、所有者、组、日期和大小。它还显示了这些文件在你计算机磁盘上使用的总空间。&lt;/p&gt;
&lt;p&gt;这种更丰富的输出结果是由于使用了 &lt;code&gt;-l&lt;/code&gt; 选项，这是 Unix &lt;code&gt;ls&lt;/code&gt; 命令行界面的一部分，它启用了详细的输出格式。&lt;/p&gt;
&lt;h2 id=&#34;命令参数选项参数和子命令&#34;&gt;命令、参数、选项、参数和子命令&lt;a class=&#34;headerlink&#34; href=&#34;#命令参数选项参数和子命令&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;在本教程中，您将深入了解&lt;strong&gt;命令&lt;/strong&gt;(commands)及其&lt;strong&gt;子命令&lt;/strong&gt;(subcommands)，同时还会学习到&lt;strong&gt;命令行参数&lt;/strong&gt;(command-line arguments)、&lt;strong&gt;选项&lt;/strong&gt;(options)和&lt;strong&gt;参数&lt;/strong&gt;(parameters)的相关知识。因此，建议您将这些术语纳入您的技术词汇库中。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;命令(Command)&lt;/strong&gt;：在命令行或终端窗口中运行的程序或例程。通常，您可以通过其背后的程序(underlying program)或例程(routine)的名称来识别一个命令。     &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;参数(Argument)&lt;/strong&gt;：命令在执行其预期操作时所需或可选的信息片段。命令通常接受一个或多个参数，您可以在命令行中以空格分隔或逗号分隔的列表形式提供这些参数。     &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;选项(Option)&lt;/strong&gt;，也称为 &lt;strong&gt;flag&lt;/strong&gt; 或 &lt;strong&gt;switch&lt;/strong&gt;：一种可选的参数，用于修改命令的行为。选项通过特定的名称（如前一个示例中的 &lt;code&gt;-l&lt;/code&gt;）传递给命令。     &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;参数(Parameter)&lt;/strong&gt;：一个选项用于执行其预期操作或动作时所使用的参数。     &lt;/li&gt;
&lt;li&gt;子命令(Subcommand)**：一个预定义的名称，可以传递给应用程序来执行特定的操作。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;参考上一节中的示例命令结构：
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ls&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-l&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sample/
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;在这个例子中，您组合了命令行界面（CLI）的以下组件：    &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ls&lt;/strong&gt;：命令的名称或应用的名称；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;-l&lt;/strong&gt;：启用详细输出的选项(option)、开关(switch)或标志(flag)；    &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;sample&lt;/strong&gt;：为命令执行提供附加信息的参数(argument)；    &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;现在，让我们来看下面的命令结构，它展示了 Python 包管理器 &lt;code&gt;pip&lt;/code&gt; 的命令行界面（CLI）：  &lt;br /&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pip&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-r&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;requirements.txt
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;这是一个常见的 &lt;code&gt;pip&lt;/code&gt; 命令结构，您可能之前已经见过。它允许您使用 &lt;code&gt;requirements.txt&lt;/code&gt; 文件来给指定的 Python 项目安装依赖项。在这个例子中，您使用了以下命令行界面（CLI）组件：   &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;pip&lt;/strong&gt;：命令的名称；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;install&lt;/strong&gt;：&lt;code&gt;pip&lt;/code&gt; 的子命令(subcommand)名称；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;-r&lt;/strong&gt;：&lt;code&gt;install&lt;/code&gt; 子命令的选项(option)；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;requirements.txt&lt;/strong&gt;：一个参数，特别是 &lt;code&gt;-r&lt;/code&gt; 选项的参数。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;现在您已经了解了命令行界面（CLI）是什么以及其主要部分或组件有哪些。接下来，是时候学习如何在 Python 中创建自己的 CLI 了。&lt;/p&gt;
&lt;h2 id=&#34;python-中的-cli-入门&#34;&gt;Python 中的 CLI 入门&lt;a class=&#34;headerlink&#34; href=&#34;#python-中的-cli-入门&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Python 附带了一些工具，这些工具可帮助您为程序和应用程序编写命令行界面（CLI）。若您需要快速为小型程序构建一个简洁的 CLI，那么可以利用 &lt;a href=&#34;https://docs.python.org/3/library/sys.html#module-sys&#34;&gt;&lt;code&gt;sys&lt;/code&gt;&lt;/a&gt; 模块中的 &lt;a href=&#34;https://docs.python.org/3/library/sys.html#sys.argv&#34;&gt;&lt;code&gt;argv&lt;/code&gt;&lt;/a&gt; 属性。这个属性会自动存储您在命令行中传递给特定程序的参数。&lt;/p&gt;
&lt;h3 id=&#34;使用-sysargv-构建最小的-cli&#34;&gt;使用 &lt;code&gt;sys.argv&lt;/code&gt; 构建最小的 CLI&lt;a class=&#34;headerlink&#34; href=&#34;#使用-sysargv-构建最小的-cli&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;以使用 &lt;code&gt;argv&lt;/code&gt; 创建最小命令行界面（CLI）为例，假设您需要编写一个小程序，该程序类似于 &lt;code&gt;ls&lt;/code&gt; 命令，能够列出给定目录下的所有文件。在这种情况下，您可以编写如下代码：  &lt;br /&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# ls_argv.py&lt;/span&gt;

&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;sys&lt;/span&gt;
&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;pathlib&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Path&lt;/span&gt;

&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;args_count&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;len&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sys&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;argv&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
    &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;One argument expected, got &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;args_count&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
    &lt;span class=&#34;k&#34;&gt;raise&lt;/span&gt; &lt;span class=&#34;ne&#34;&gt;SystemExit&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;k&#34;&gt;elif&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;args_count&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
    &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;You must specify the target directory&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
    &lt;span class=&#34;k&#34;&gt;raise&lt;/span&gt; &lt;span class=&#34;ne&#34;&gt;SystemExit&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;target_dir&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sys&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;argv&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;

&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;target_dir&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;is_dir&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;():&lt;/span&gt;
    &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;The target directory doesn&amp;#39;t exist&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
    &lt;span class=&#34;k&#34;&gt;raise&lt;/span&gt; &lt;span class=&#34;ne&#34;&gt;SystemExit&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;entry&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;target_dir&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;iterdir&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;():&lt;/span&gt;
    &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;entry&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;该程序通过手动处理命令行提供的参数来实现了一个简单的命令行界面（CLI），这些参数会自动存储在 &lt;code&gt;sys.argv&lt;/code&gt; 中。&lt;code&gt;sys.argv&lt;/code&gt; 的第一个元素始终是程序名称，第二个元素则是目标目录。由于应用程序不应接受超过一个目标目录，因此 &lt;code&gt;args_count&lt;/code&gt; 不得超过 2。&lt;/p&gt;
&lt;p&gt;在检查 &lt;code&gt;sys.argv&lt;/code&gt; 的内容后，您创建一个&lt;code&gt;pathlib.Path&lt;/code&gt;对象来存储目标目录的路径。如果该目录不存在，您将通知用户并退出程序。接下来的&lt;code&gt;for&lt;/code&gt;循环将列出目录内容，每行一个条目。&lt;/p&gt;
&lt;p&gt;如果从命令行运行该脚本，您将得到以下结果：  &lt;br /&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;python&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ls_argv.py&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sample/
hello.txt
lorem.md
realpython.md

$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;python&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ls_argv.py
You&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;must&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;specify&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;target&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;directory

$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;python&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ls_argv.py&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sample/&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;other_dir/
One&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;argument&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;expected,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;got&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;

$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;python&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ls_argv.py&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;non_existing/
The&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;target&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;directory&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;doesn&lt;span class=&#34;err&#34;&gt;&amp;#39;&lt;/span&gt;t&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;exist
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;您的程序接受一个目录作为参数，并列出其内容。如果您运行命令时没有提供参数，您将收到一个错误消息。如果您运行命令时指定了超过一个目标目录，您同样会收到一个错误消息。如果尝试运行命令并指定一个不存在的目录，程序将输出另一个错误消息。&lt;/p&gt;
&lt;p&gt;虽然您的程序运行正常，但对于更复杂的 CLI 应用程序来说，使用&lt;code&gt;sys.argv&lt;/code&gt;属性手动解析命令行参数并不是一个可扩展的解决方案。如果您的应用需要接受更多的参数和选项，那么解析&lt;code&gt;sys.argv&lt;/code&gt;将变得复杂且容易出错。您需要一个更好的解决方案，这就是 Python 中的&lt;code&gt;argparse&lt;/code&gt;模块所提供的。&lt;/p&gt;
&lt;h3 id=&#34;使用-argparse-创建-cli&#34;&gt;使用 &lt;code&gt;argparse&lt;/code&gt; 创建 CLI&lt;a class=&#34;headerlink&#34; href=&#34;#使用-argparse-创建-cli&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;在 Python 中创建 CLI 应用程序的更便捷方法是使用标准库中的 &lt;a href=&#34;https://docs.python.org/3/library/argparse.html?highlight=argparse#module-argparse&#34;&gt;&lt;code&gt;argparse&lt;/code&gt;&lt;/a&gt; 模块。该模块首次在 Python 3.2 中随 &lt;a href=&#34;https://www.python.org/dev/peps/pep-0389/&#34;&gt;PEP-389&lt;/a&gt; 一同发布，是快速创建 Python CLI 应用程序的利器，无需安装如 Typer 或 Click 这样的第三方库。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;argparse&lt;/code&gt; 模块是作为较旧的 &lt;a href=&#34;https://docs.python.org/3/library/getopt.html&#34;&gt;&lt;code&gt;getopt&lt;/code&gt;&lt;/a&gt; 和 &lt;a href=&#34;https://docs.python.org/3/library/optparse.html&#34;&gt;&lt;code&gt;optparse&lt;/code&gt;&lt;/a&gt; 模块的替代品而发布的，因为它们缺乏一些重要的功能。&lt;/p&gt;
&lt;p&gt;Python 的 &lt;code&gt;argparse&lt;/code&gt; 模块允许您：     &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;解析命令行&lt;strong&gt;参数&lt;/strong&gt;(arguments)和&lt;strong&gt;选项&lt;/strong&gt;(options)；&lt;/li&gt;
&lt;li&gt;在一个单一选项中接受&lt;strong&gt;可变数量的参数&lt;/strong&gt;(variable number of parameters)；&lt;/li&gt;
&lt;li&gt;在 CLI 中提供子命令(subcommands)。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这些特性使 &lt;code&gt;argparse&lt;/code&gt; 成为了一个强大的 CLI 框架，您在创建 CLI 应用程序时可以放心地依赖它。要使用 Python 的 &lt;code&gt;argparse&lt;/code&gt;，您需要遵循以下四个简单的步骤：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;导入 &lt;code&gt;argparse&lt;/code&gt;；&lt;/li&gt;
&lt;li&gt;通过实例化 &lt;a href=&#34;https://docs.python.org/3/library/argparse.html#argparse.ArgumentParser&#34;&gt;&lt;code&gt;ArgumentParser&lt;/code&gt;&lt;/a&gt; 创建&lt;strong&gt;参数解析器&lt;/strong&gt;(argument parser)；&lt;/li&gt;
&lt;li&gt;使用 &lt;a href=&#34;https://docs.python.org/3/library/argparse.html#argparse.ArgumentParser.add_argument&#34;&gt;&lt;code&gt;.add_argument()&lt;/code&gt;&lt;/a&gt; 方法向解析器添加&lt;strong&gt;参数&lt;/strong&gt;(arguments)和&lt;strong&gt;选项&lt;/strong&gt;(options)；&lt;/li&gt;
&lt;li&gt;在解析器上调用 &lt;a href=&#34;https://docs.python.org/3/library/argparse.html?highlight=argparse#argparse.ArgumentParser.parse_args&#34;&gt;&lt;code&gt;.parse_args()&lt;/code&gt;&lt;/a&gt; 以获取参数 &lt;a href=&#34;https://docs.python.org/3/library/argparse.html#namespace&#34;&gt;&lt;code&gt;Namespace&lt;/code&gt;&lt;/a&gt;。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;例如，您可以使用 &lt;code&gt;argparse&lt;/code&gt; 来改进您的 &lt;code&gt;ls_argv.py&lt;/code&gt; 脚本。现在，您可以创建一个名为 &lt;code&gt;ls.py&lt;/code&gt; 的脚本，并编写以下代码：
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# ls.py v1&lt;/span&gt;

&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;argparse&lt;/span&gt;
&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;pathlib&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Path&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;parser&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;argparse&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ArgumentParser&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;parser&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;add_argument&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;path&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;args&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;parser&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;parse_args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;target_dir&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;args&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;target_dir&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;exists&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;():&lt;/span&gt;
    &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;The target directory doesn&amp;#39;t exist&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
    &lt;span class=&#34;k&#34;&gt;raise&lt;/span&gt; &lt;span class=&#34;ne&#34;&gt;SystemExit&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;entry&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;target_dir&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;iterdir&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;():&lt;/span&gt;
    &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;entry&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;随着 &lt;code&gt;argparse&lt;/code&gt; 的引入，您的代码发生了显著的变化。与之前的版本相比，最明显的不同是，用于检查用户提供的参数的条件语句已经消失了。这是因为 &lt;code&gt;argparse&lt;/code&gt; 会自动为您检查参数的存在性。&lt;/p&gt;
&lt;p&gt;在这个新的实现中，您首先导入 &lt;code&gt;argparse&lt;/code&gt; 并创建一个参数解析器。要创建解析器，您可以使用 &lt;code&gt;ArgumentParser&lt;/code&gt; 类。接下来，您定义一个名为 &lt;code&gt;path&lt;/code&gt; 的参数，用于获取用户的目标目录。&lt;/p&gt;
&lt;p&gt;接下来，您需要调用 &lt;code&gt;.parse_args()&lt;/code&gt; 方法来解析输入参数，并获取一个包含所有用户参数的 &lt;code&gt;Namespace&lt;/code&gt; 对象。请注意，现在 &lt;code&gt;args&lt;/code&gt; 变量保存了一个 &lt;code&gt;Namespace&lt;/code&gt; 对象，该对象具有从命令行收集的每个参数所对应的属性。&lt;/p&gt;
&lt;p&gt;在这个例子中，您只有一个参数，名为 &lt;code&gt;path&lt;/code&gt;。&lt;code&gt;Namespace&lt;/code&gt; 对象允许您使用点表示法通过 &lt;code&gt;args&lt;/code&gt; 来访问 &lt;code&gt;path&lt;/code&gt;。其余的代码与第一个实现相同。&lt;/p&gt;
&lt;p&gt;现在继续从命令行运行这个新脚本：
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;python&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ls.py&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sample/
lorem.md
realpython.md
hello.txt

$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;python&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ls.py
usage:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ls.py&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-h&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;path
ls.py:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;error:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;following&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;arguments&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;are&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;required:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;path

$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;python&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ls.py&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sample/&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;other_dir/
usage:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ls.py&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-h&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;path
ls.py:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;error:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;unrecognized&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;arguments:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;other_dir/

$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;python&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ls.py&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;non_existing/
The&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;target&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;directory&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;doesn&lt;span class=&#34;err&#34;&gt;&amp;#39;&lt;/span&gt;t&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;exist
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;第一个命令的输出与您的原始脚本 &lt;code&gt;ls_argv.py&lt;/code&gt; 相同。而第二个命令的输出则与 &lt;code&gt;ls_argv.py&lt;/code&gt; 中的输出大不相同。程序现在会显示一个使用说明消息，并发出错误提示，告诉您必须提供 &lt;code&gt;path&lt;/code&gt; 参数。&lt;/p&gt;
&lt;p&gt;在第三个命令中，您传递了两个目标目录，但应用程序并未为此做好准备。因此，它再次显示使用说明消息，并抛出一个错误，告知您潜在的问题。&lt;/p&gt;
&lt;p&gt;最后，如果您运行脚本时传递了一个不存在的目录作为参数，那么您会收到一个错误，告知您目标目录不存在，因此程序无法执行其工作。&lt;/p&gt;
&lt;p&gt;现在，您可以使用一个新的隐式特性。现在，您的程序接受一个可选的 &lt;code&gt;-h&lt;/code&gt; 标志。不妨尝试一下：
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;python&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ls.py&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-h
usage:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ls.py&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-h&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;path

positional&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;arguments:
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;path

options:
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-h,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--help&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;show&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;this&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;help&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;message&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;and&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;exit&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;太棒了，现在您的程序会自动响应 &lt;code&gt;-h&lt;/code&gt; 或 &lt;code&gt;--help&lt;/code&gt; 标志，并为您显示带有使用说明的帮助消息。这真是一个很棒的特性，而且您只需在代码中引入 &lt;code&gt;argparse&lt;/code&gt; 就能轻松获得！&lt;/p&gt;
&lt;p&gt;经过这个快速介绍如何在 Python 中创建 CLI 应用后，您现在就可以深入研究 &lt;code&gt;argparse&lt;/code&gt; 模块及其所有炫酷特性了。&lt;/p&gt;
&lt;h2 id=&#34;使用-python-的-argparse-创建-cli&#34;&gt;使用 Python 的 argparse 创建 CLI&lt;a class=&#34;headerlink&#34; href=&#34;#使用-python-的-argparse-创建-cli&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;您可以使用 &lt;code&gt;argparse&lt;/code&gt; 模块为您的应用程序和项目编写用户友好的命令行界面。该模块允许您定义应用程序所需的参数和选项。然后，&lt;code&gt;argparse&lt;/code&gt; 将负责为您解析 &lt;code&gt;sys.argv&lt;/code&gt; 的参数和选项。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;argparse&lt;/code&gt; 的另一个酷炫特性是它可以自动为您的 CLI 应用程序生成使用说明和帮助消息。该模块还会在参数无效时发出错误提示，并具备更多功能。&lt;/p&gt;
&lt;p&gt;在深入研究 &lt;code&gt;argparse&lt;/code&gt; 之前，您需要知道该模块的文档可识别两种不同类型的命令行参数：     &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;位置参数&lt;/strong&gt;(Positional arguments)，您称为参数(arguments)；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;可选参数&lt;/strong&gt;(Optional arguments)，即选项(options)、标志(flags)或开关(switches)。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;在 &lt;code&gt;ls.py&lt;/code&gt; 的示例中，&lt;code&gt;path&lt;/code&gt; 是一个&lt;strong&gt;位置参数&lt;/strong&gt;(positional argument)。这样的参数之所以被称为位置参数，是因为它在命令构造中的相对位置定义了其作用。&lt;/p&gt;
&lt;p&gt;与位置参数不同，&lt;strong&gt;可选参数&lt;/strong&gt;(Optional arguments)并不是必需的。它们允许你修改命令的行为。以 Unix 命令 &lt;code&gt;ls&lt;/code&gt; 为例，&lt;code&gt;-l&lt;/code&gt; 标志就是一个可选参数，它使得命令以详细模式显示输出。&lt;/p&gt;
&lt;p&gt;在明确了这些概念之后，你就可以着手使用 Python 和 &lt;code&gt;argparse&lt;/code&gt; 库来构建自己的命令行界面（CLI）应用程序了。&lt;/p&gt;
&lt;h3 id=&#34;创建命令行参数解析器&#34;&gt;创建命令行参数解析器&lt;a class=&#34;headerlink&#34; href=&#34;#创建命令行参数解析器&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;命令行参数解析器是任何使用 &lt;code&gt;argparse&lt;/code&gt; 的命令行界面（CLI）中最为关键的部分。你在命令行上提供的所有参数和选项都会经过这个解析器的处理，它会为你完成繁重的解析工作。&lt;/p&gt;
&lt;p&gt;要使用 &lt;code&gt;argparse&lt;/code&gt; 创建命令行参数解析器，您需要实例化 &lt;a href=&#34;https://docs.python.org/3/library/argparse.html#argumentparser-objects&#34;&gt;&lt;code&gt;ArgumentParser&lt;/code&gt;&lt;/a&gt; 类：  &lt;br /&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;argparse&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ArgumentParser&lt;/span&gt;

&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;parser&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ArgumentParser&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;parser&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;ArgumentParser&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;
    &lt;span class=&#34;n&#34;&gt;prog&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
    &lt;span class=&#34;n&#34;&gt;usage&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
    &lt;span class=&#34;n&#34;&gt;description&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
    &lt;span class=&#34;n&#34;&gt;formatter_class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&amp;lt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;argparse&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;HelpFormatter&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;gt;,&lt;/span&gt;
    &lt;span class=&#34;n&#34;&gt;conflict_handler&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;error&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
    &lt;span class=&#34;n&#34;&gt;add_help&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;True&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;ArgumentParser&lt;/code&gt; 的构造函数接受多种不同的参数，你可以利用这些参数来微调你的 CLI 的多个特性。由于所有这些参数都是可选的，因此你可以通过不传入任何参数直接实例化 &lt;code&gt;ArgumentParser&lt;/code&gt; 来创建一个最基本的解析器。&lt;/p&gt;
&lt;p&gt;在本教程中，你将会更深入地了解 &lt;code&gt;ArgumentParser&lt;/code&gt; 构造函数的参数，特别是在定制你的参数解析器的部分。目前，你可以开始使用 &lt;code&gt;argparse&lt;/code&gt; 创建 CLI 的下一步了。这一步就是通过解析器对象来添加参数和选项。&lt;/p&gt;
&lt;h3 id=&#34;添加参数和选项&#34;&gt;添加参数和选项&lt;a class=&#34;headerlink&#34; href=&#34;#添加参数和选项&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;要为 &lt;code&gt;argparse&lt;/code&gt; 的 CLI 添加参数和选项，你将使用 &lt;code&gt;ArgumentParser&lt;/code&gt; 实例的 &lt;a href=&#34;https://docs.python.org/3/library/argparse.html#the-add-argument-method&#34;&gt;&lt;code&gt;.add_argument()&lt;/code&gt;&lt;/a&gt; 方法。请注意，这个方法对参数和选项都是通用的。在 &lt;code&gt;argparse&lt;/code&gt; 的术语中，参数被称为&lt;strong&gt;位置参数&lt;/strong&gt;(positional arguments)，而选项被称为&lt;strong&gt;可选参数&lt;/strong&gt;(optional arguments)。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;.add_argument()&lt;/code&gt; 方法的第一个参数决定了参数和选项之间的区别。这个参数被标识为&lt;a href=&#34;https://docs.python.org/3/library/argparse.html?highlight=argparse#name-or-flags&#34;&gt;名称（name）或标志（flag）&lt;/a&gt;。因此，如果你提供一个 name，那么你将定义一个参数(argument)。相反，如果你使用一个 flag，那么你将添加一个选项(option)。&lt;/p&gt;
&lt;p&gt;你已经在使用 &lt;code&gt;argparse&lt;/code&gt; 时处理过命令行参数了。现在，考虑以下你自定义的 &lt;code&gt;ls&lt;/code&gt; 命令的增强版本，它向 CLI 添加了一个 &lt;code&gt;-l&lt;/code&gt; 选项：   &lt;br /&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# ls.py v2&lt;/span&gt;

&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;argparse&lt;/span&gt;
&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;datetime&lt;/span&gt;
&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;pathlib&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Path&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;parser&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;argparse&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ArgumentParser&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;parser&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;add_argument&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;path&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;parser&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;add_argument&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;-l&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;--long&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;action&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;store_true&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;args&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;parser&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;parse_args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;target_dir&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;args&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;target_dir&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;exists&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;():&lt;/span&gt;
    &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;The target directory doesn&amp;#39;t exist&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
    &lt;span class=&#34;k&#34;&gt;raise&lt;/span&gt; &lt;span class=&#34;ne&#34;&gt;SystemExit&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;build_output&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;entry&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;long&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;False&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;long&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
        &lt;span class=&#34;n&#34;&gt;size&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;entry&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;stat&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;st_size&lt;/span&gt;
        &lt;span class=&#34;n&#34;&gt;date&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;datetime&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;datetime&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fromtimestamp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;
            &lt;span class=&#34;n&#34;&gt;entry&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;stat&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;st_mtime&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;strftime&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;
            &lt;span class=&#34;s2&#34;&gt;&amp;quot;%b &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;%d&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; %H:%M:%S&amp;quot;&lt;/span&gt;
        &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;gt;6d&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;date&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;entry&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;
    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;entry&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;

&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;entry&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;target_dir&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;iterdir&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;():&lt;/span&gt;
    &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;build_output&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;entry&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;long&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;args&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;long&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;在这个例子中，第 11 行代码创建了一个带有 &lt;code&gt;-l&lt;/code&gt; 和 &lt;code&gt;--long&lt;/code&gt; 标志的选项。参数(arguments)和选项(options)在语法上的区别在于，选项名称以短横线 &lt;code&gt;-&lt;/code&gt; 开头表示简写标志，以双短横线 &lt;code&gt;--&lt;/code&gt; 开头表示完整标志。&lt;/p&gt;
&lt;p&gt;请注意，在这个特定例子中，与 &lt;code&gt;-l&lt;/code&gt; 或 &lt;code&gt;--long&lt;/code&gt; 选项一同设置了一个 &lt;code&gt;action&lt;/code&gt; 参数为 &lt;code&gt;&#34;store_true&#34;&lt;/code&gt;，这意味着这个选项将存储一个布尔值。如果你在命令行上提供了这个选项，那么它的值将为 &lt;code&gt;True&lt;/code&gt;。如果你省略了这个选项，那么它的值将为 &lt;code&gt;False&lt;/code&gt;。在 &amp;ldquo;设置 Option 背后的 Action&amp;rdquo; 部分内容中，你将了解更多关于 &lt;code&gt;.add_argument()&lt;/code&gt; 中的 &lt;code&gt;action&lt;/code&gt; 参数的信息。&lt;/p&gt;
&lt;p&gt;在第 21 行的 &lt;code&gt;build_output()&lt;/code&gt; 函数中，当 &lt;code&gt;long&lt;/code&gt; 为 &lt;code&gt;True&lt;/code&gt; 时，它会返回一个详细的输出，否则返回一个简短的输出。详细的输出将包含目标目录中所有条目的大小、修改日期和名称。它使用了诸如 &lt;code&gt;Path.stat()&lt;/code&gt; 这样的工具，以及带有自定义字符串格式的 &lt;code&gt;datetime.datetime&lt;/code&gt; 对象。&lt;/p&gt;
&lt;p&gt;继续在 &lt;code&gt;sample&lt;/code&gt; 上执行您的程序，以检查 &lt;code&gt;-l&lt;/code&gt; 选项如何工作：  &lt;br /&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;python&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ls.py&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-l&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sample/
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2609&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Oct&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;28&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;14&lt;/span&gt;:07:04&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;lorem.md
&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;428&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Oct&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;28&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;14&lt;/span&gt;:07:04&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;realpython.md
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;83&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Oct&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;28&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;14&lt;/span&gt;:07:04&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;hello.txt
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;新增的 &lt;code&gt;-l&lt;/code&gt; 选项允许你生成并显示关于目标目录内容的更详细输出。&lt;/p&gt;
&lt;p&gt;既然你已经知道了如何向 CLI 添加命令行参数和选项，接下来就是深入解析这些参数和选项的时候了。这将是你在接下来部分要探索的内容。&lt;/p&gt;
&lt;h3 id=&#34;解析命令行参数和选项&#34;&gt;解析命令行参数和选项&lt;a class=&#34;headerlink&#34; href=&#34;#解析命令行参数和选项&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;解析命令行参数是基于 &lt;code&gt;argparse&lt;/code&gt; 的任何 CLI 应用中的另一个重要步骤。一旦你解析了参数，你就可以根据它们的值来执行相应的操作。在你自定义的 &lt;code&gt;ls&lt;/code&gt; 命令示例中，参数解析发生在包含 &lt;code&gt;args = parser.parse_args()&lt;/code&gt; 语句的行上。&lt;/p&gt;
&lt;p&gt;这个语句调用了 &lt;a href=&#34;https://docs.python.org/3/library/argparse.html#the-parse-args-method&#34;&gt;&lt;code&gt;.parse_args()&lt;/code&gt;&lt;/a&gt; 方法，并将其返回值赋给 &lt;code&gt;args&lt;/code&gt; 变量。&lt;code&gt;.parse_args()&lt;/code&gt; 的返回值是一个 &lt;a href=&#34;https://docs.python.org/3/library/argparse.html#the-namespace-object&#34;&gt;&lt;code&gt;Namespace&lt;/code&gt;&lt;/a&gt; 对象，其中包含了在命令行上提供的所有参数和选项以及它们对应的值。&lt;/p&gt;
&lt;p&gt;考虑以下简单的示例：    &lt;br /&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;argparse&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ArgumentParser&lt;/span&gt;

&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;parser&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ArgumentParser&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;

&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;parser&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;add_argument&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;site&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;_StoreAction&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;...&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;parser&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;add_argument&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;-c&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;--connect&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;action&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;store_true&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;_StoreTrueAction&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;...&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;args&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;parser&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;parse_args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;Real Python&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;-c&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;args&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Namespace&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;site&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Real Python&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;connect&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;True&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;args&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;site&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;&amp;#39;Real Python&amp;#39;&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;args&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;connect&lt;/span&gt;
&lt;span class=&#34;kc&#34;&gt;True&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;通过在命令行参数解析器上调用 &lt;code&gt;.parse_args()&lt;/code&gt; 方法得到的 &lt;code&gt;Namespace&lt;/code&gt; 对象，你可以使用&lt;strong&gt;点表示法&lt;/strong&gt;(dot notation)访问所有输入参数、选项以及它们对应的值。这样，你就可以检查输入参数和选项的列表，并根据用户在命令行上的选择来执行相应的操作。&lt;/p&gt;
&lt;p&gt;你将在应用程序的主代码中使用这个 &lt;code&gt;Namespace&lt;/code&gt; 对象。这与你在自定义 &lt;code&gt;ls&lt;/code&gt; 命令示例中的 &lt;code&gt;for&lt;/code&gt; 循环下所做的类似。&lt;/p&gt;
&lt;p&gt;到目前为止，你已经了解了创建基于 &lt;code&gt;argparse&lt;/code&gt; 的 CLI 的主要步骤。现在，你可以花些时间学习如何在 Python 中组织和构建 CLI 应用程序的基础知识了。&lt;/p&gt;
&lt;h3 id=&#34;设置-cli-应用程序的布局和构建系统&#34;&gt;设置 CLI 应用程序的布局和构建系统&lt;a class=&#34;headerlink&#34; href=&#34;#设置-cli-应用程序的布局和构建系统&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;在继续你的 &lt;code&gt;argparse&lt;/code&gt; 学习之旅之前，你应该暂停一下，思考如何组织你的代码和规划一个 CLI 项目。首先，你应该考虑以下几点：    &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;你可以创建模块和包来组织代码。&lt;/li&gt;
&lt;li&gt;你可以将 Python 应用的核心包命名为应用本身的名字。&lt;/li&gt;
&lt;li&gt;你会根据每个 Python 模块的具体内容或功能来命名它们。&lt;/li&gt;
&lt;li&gt;如果你希望某个包可以直接执行，你可以在该 Python 包中添加一个 &lt;code&gt;__main__.py&lt;/code&gt; 模块。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;将这些想法铭记于心，并考虑到模型-视图-控制器（MVC）模式是一种有效组织应用程序结构的方法，你在规划 CLI 项目时可以采用以下目录结构：  &lt;br /&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;hello_cli/
│
├── hello_cli/
│   ├── __init__.py
│   ├── __main__.py
│   ├── cli.py
│   └── model.py
│
├── tests/
│   ├── __init__.py
│   ├── test_cli.py
│   └── test_model.py
│
├── pyproject.toml
├── README.md
└── requirements.txt
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;hello_cli/&lt;/code&gt; 目录是项目的根目录。在那里，您将放置以下文件：    &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;pyproject.toml 是一个 TOML 文件，用于指定项目的构建系统(build system)和其他配置(configurations)。&lt;/li&gt;
&lt;li&gt;README.md 文件提供了项目的描述以及安装和运行应用程序的说明。为你的项目添加一个描述性且详细的 README.md 文件是编程中的最佳实践，特别是如果你打算将项目作为开源解决方案发布的话。&lt;/li&gt;
&lt;li&gt;requirements.txt 是一个常规文件，列出了项目的外部依赖项(external dependencies)。你将使用这个文件，结合 &lt;code&gt;pip&lt;/code&gt; 的 &lt;code&gt;-r&lt;/code&gt; 选项，来自动安装这些依赖项。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;接下来是 &lt;code&gt;hello_cli/&lt;/code&gt; 目录，它包含了应用的核心包，该包包含以下模块：    &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;__init__.py&lt;/code&gt; 文件使得 &lt;code&gt;hello_cli/&lt;/code&gt; 可以作为一个 Python 包被识别。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;__main__.py&lt;/code&gt; 文件提供了应用程序的&lt;strong&gt;入口点脚本&lt;/strong&gt;(entry-point script)或可执行文件，这是启动程序的主要入口。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cli.py&lt;/code&gt; 文件为应用提供了命令行界面。在此文件中的代码将扮演基于 MVC 架构中的视图-控制器角色。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;model.py&lt;/code&gt; 文件包含了支持应用主要功能的代码。这部分代码将在你的 MVC 布局中扮演模型角色。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;你还需要一个 &lt;code&gt;tests/&lt;/code&gt; 包，其中包含针对应用程序组件的单元测试文件。在这个具体的项目布局示例中，你有 &lt;code&gt;test_cli.py&lt;/code&gt; 用于检查 CLI 功能的单元测试，以及 &lt;code&gt;test_model.py&lt;/code&gt; 用于检查你的模型代码的单元测试。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;pyproject.toml&lt;/code&gt; 文件允许你定义应用程序的构建系统以及许多其他常规配置。以下是一个如何为你的示例 hello_cli 项目填写此文件的简单示例：  &lt;br /&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# pyproject.toml&lt;/span&gt;

&lt;span class=&#34;k&#34;&gt;[build-system]&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;requires&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;setuptools&amp;gt;=64.0.0&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;wheel&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;build-backend&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;setuptools.build_meta&amp;quot;&lt;/span&gt;

&lt;span class=&#34;k&#34;&gt;[project]&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;hello_cli&amp;quot;&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;version&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;0.0.1&amp;quot;&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;description&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;My awesome Hello CLI application&amp;quot;&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;readme&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;README.md&amp;quot;&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;authors&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;Real Python&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;email&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;info@realpython.com&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}]&lt;/span&gt;

&lt;span class=&#34;k&#34;&gt;[project.scripts]&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;hello_cli&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;hello_cli.__main__:main&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;[build-system]&lt;/code&gt; 表头将 &lt;code&gt;setuptools&lt;/code&gt; 设置为应用程序的构建系统，并指定 Python 需要安装哪些依赖项来构建应用程序。&lt;code&gt;[project]&lt;/code&gt; 表头为你的应用提供了通用元数据。这些元数据在你想要将应用发布到 Python 包索引（PyPI）时非常有用。最后， &lt;code&gt;[project.scripts]&lt;/code&gt; 表头定义了你的应用程序的入口点。&lt;/p&gt;
&lt;p&gt;经过这次对 CLI 项目布局和构建的快速探索，你已经准备好继续学习 &lt;code&gt;argparse&lt;/code&gt; 了，特别是如何自定义你的命令行参数解析器。&lt;/p&gt;
&lt;h2 id=&#34;自定义你的命令行参数解析器&#34;&gt;自定义你的命令行参数解析器&lt;a class=&#34;headerlink&#34; href=&#34;#自定义你的命令行参数解析器&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;在前面的部分中，你已经学习了如何使用 Python 的 &lt;code&gt;argparse&lt;/code&gt; 模块为你的程序或应用实现命令行接口的基础知识。同时，你也了解了如何按照 MVC 模式组织和规划 CLI 应用项目。&lt;/p&gt;
&lt;p&gt;在接下来的部分中，你将更深入地探索 &lt;code&gt;argparse&lt;/code&gt; 的许多其他强大功能。特别是，你将学习如何在 &lt;code&gt;ArgumentParser&lt;/code&gt; 构造函数中使用一些最有用的参数，这将使你能够自定义 CLI 应用的一般行为。&lt;/p&gt;
&lt;h3 id=&#34;调整程序的-help-和-usage-内容&#34;&gt;调整程序的 Help 和 Usage 内容&lt;a class=&#34;headerlink&#34; href=&#34;#调整程序的-help-和-usage-内容&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;向 CLI 应用程序的用户提供使用说明和帮助是一种最佳实践，可以通过出色的用户体验 (UX) 让用户更加愉快。在本节中，你将了解如何利用 &lt;code&gt;ArgumentParser&lt;/code&gt; 的一些参数来微调 CLI 应用程序向用户显示帮助和使用消息的方式。你将学习如何：  &lt;br /&gt;
- 设置程序名称
- 定义程序的描述和结束消息
- 对参数和选项进行分组显示帮助&lt;/p&gt;
&lt;p&gt;首先，你将开始设置你的程序名称，并指定该名称在帮助或使用说明消息中的显示方式。&lt;/p&gt;
&lt;h4 id=&#34;设置程序名称&#34;&gt;设置程序名称&lt;a class=&#34;headerlink&#34; href=&#34;#设置程序名称&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;默认情况下，&lt;code&gt;argparse&lt;/code&gt; 会使用 &lt;code&gt;sys.argv&lt;/code&gt; 中的第一个值来设置程序的名称。这个第一项包含你刚刚执行的 Python 文件的名称。这个文件名在使用说明消息中看起来会有些奇怪。&lt;/p&gt;
&lt;p&gt;例如，继续使用 &lt;code&gt;-h&lt;/code&gt; 选项运行自定义 &lt;code&gt;ls&lt;/code&gt; 命令：
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;python&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ls.py&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-h
usage:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ls.py&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-h&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-l&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;path

positional&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;arguments:
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;path

options:
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-h,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--help&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;show&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;this&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;help&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;message&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;and&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;exit&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-l,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--long
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;命令输出中的高亮行显示 &lt;code&gt;argparse&lt;/code&gt; 正在使用文件名 &lt;code&gt;ls.py&lt;/code&gt; 作为程序的名称。这看起来有些奇怪，因为在使用说明消息中，应用名称很少包含文件扩展名。&lt;/p&gt;
&lt;p&gt;幸运的是，你可以使用 &lt;code&gt;prog&lt;/code&gt; 参数来指定你的程序名称，就像下面的代码片段所示：   &lt;br /&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# ls.py v3&lt;/span&gt;

&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;argparse&lt;/span&gt;
&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;datetime&lt;/span&gt;
&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;pathlib&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Path&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;parser&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;argparse&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ArgumentParser&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;prog&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;ls&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# ...&lt;/span&gt;

&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;entry&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;target_dir&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;iterdir&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;():&lt;/span&gt;
    &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;build_output&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;entry&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;long&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;args&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;long&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;使用 &lt;code&gt;prog&lt;/code&gt; 参数，你可以指定将在使用说明消息中使用的程序名称。在这个例子中，你使用了字符串 &amp;ldquo;ls&amp;rdquo;。现在，继续运行你的应用：   &lt;br /&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;python&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ls.py&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-h
usage:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ls&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-h&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-l&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;path

positional&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;arguments:
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;path

options:
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-h,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--help&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;show&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;this&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;help&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;message&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;and&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;exit&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-l,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--long
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;很好！这个输出的第一行中的使用说明消息显示程序名称为 &lt;code&gt;ls&lt;/code&gt;，而不是 &lt;code&gt;ls.py&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;除了设置程序名称外，&lt;code&gt;argparse&lt;/code&gt; 还允许你定义应用的描述和结尾信息。在接下来的部分中，你将学习如何进行这两方面的操作。&lt;/p&gt;
&lt;h4 id=&#34;定义程序的描述和结语消息&#34;&gt;定义程序的描述和结语消息&lt;a class=&#34;headerlink&#34; href=&#34;#定义程序的描述和结语消息&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;你还可以为你的应用定义一个通用的描述和一个结尾或结束语。为此，你将分别使用 &lt;code&gt;description&lt;/code&gt; 和 &lt;code&gt;epilog&lt;/code&gt; 参数。接下来，请更新 &lt;code&gt;ls.py&lt;/code&gt; 文件，在 &lt;code&gt;ArgumentParser&lt;/code&gt; 构造函数中添加以下内容：   &lt;br /&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# ls.py v4&lt;/span&gt;

&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;argparse&lt;/span&gt;
&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;datetime&lt;/span&gt;
&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;pathlib&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Path&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;parser&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;argparse&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ArgumentParser&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;
    &lt;span class=&#34;n&#34;&gt;prog&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;ls&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
    &lt;span class=&#34;n&#34;&gt;description&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;List the content of a directory&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
    &lt;span class=&#34;n&#34;&gt;epilog&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;Thanks for using &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;%(prog)s&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;! :)&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# ...&lt;/span&gt;

&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;entry&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;target_dir&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;iterdir&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;():&lt;/span&gt;
    &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;build_output&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;entry&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;long&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;args&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;long&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;在这次更新中，&lt;code&gt;description&lt;/code&gt; 参数允许你为应用提供一个通用的描述。这个描述将显示在帮助消息的开头。&lt;code&gt;epilog&lt;/code&gt; 参数则允许你定义一些文本作为应用的结尾或结束语。请注意，你可以使用旧式的字符串格式化操作符(&lt;code&gt;%&lt;/code&gt;)将 &lt;code&gt;prog&lt;/code&gt; 参数插入到 &lt;code&gt;epilog&lt;/code&gt; 字符串中。    &lt;/p&gt;
&lt;p&gt;如果再次运行该应用程序，你将得到如下输出：   &lt;br /&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;python&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ls.py&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-h
usage:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ls&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-h&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-l&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;path

List&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;content&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;a&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;directory

positional&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;arguments:
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;path

options:
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-h,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--help&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;show&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;this&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;help&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;message&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;and&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;exit&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-l,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--long

Thanks&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;using&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ls!&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;:&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;现在，输出会在使用消息之后显示描述消息，并在帮助文本末尾显示结语消息。&lt;/p&gt;
&lt;h4 id=&#34;显示参数和选项的分组帮助&#34;&gt;显示参数和选项的分组帮助&lt;a class=&#34;headerlink&#34; href=&#34;#显示参数和选项的分组帮助&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;帮助分组&lt;/strong&gt;(Help groups)是 &lt;code&gt;argparse&lt;/code&gt; 的另一个有趣特性。它们允许你将相关的命令和参数进行分组，从而帮助你组织应用的帮助消息。要创建这些帮助分组，你将使用 &lt;code&gt;ArgumentParser&lt;/code&gt; 的 &lt;code&gt;.add_argument_group()&lt;/code&gt; 方法。&lt;/p&gt;
&lt;p&gt;作为一个例子，请考虑你自定义的 &lt;code&gt;ls&lt;/code&gt; 命令的以下更新版本：   &lt;br /&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# ls.py v5&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# ...&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;parser&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;argparse&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ArgumentParser&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;
    &lt;span class=&#34;n&#34;&gt;prog&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;ls&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
    &lt;span class=&#34;n&#34;&gt;description&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;List the content of a directory&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
    &lt;span class=&#34;n&#34;&gt;epilog&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;Thanks for using &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;%(prog)s&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;! :)&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;general&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;parser&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;add_argument_group&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;general output&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;general&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;add_argument&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;path&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;detailed&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;parser&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;add_argument_group&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;detailed output&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;detailed&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;add_argument&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;-l&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;--long&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;action&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;store_true&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;args&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;parser&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;parse_args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# ...&lt;/span&gt;

&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;entry&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;target_dir&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;iterdir&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;():&lt;/span&gt;
    &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;build_output&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;entry&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;long&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;args&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;long&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;在这次更新中，你为显示一般输出的参数和选项创建了一个帮助分组，并为显示详细输出的参数和选项创建了另一个分组。&lt;/p&gt;
&lt;p&gt;如果你在命令行中使用 &lt;code&gt;-h&lt;/code&gt; 选项运行应用程序，那么你将获得以下输出： &lt;br /&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;python&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ls.py&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-h
usage:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ls&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-h&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-l&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;path

List&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;content&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;a&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;directory

options:
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-h,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--help&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;show&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;this&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;help&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;message&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;and&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;exit&lt;/span&gt;

general&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;output:
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;path

detailed&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;output:
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-l,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--long

Thanks&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;using&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ls!&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;:&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;现在，你的应用的参数和选项在帮助消息中以描述性的标题进行了方便的分组。这个整洁的特性将帮助你为用户提供更多的上下文，并帮助他们更好地理解应用的工作原理。&lt;/p&gt;
&lt;h3 id=&#34;为参数和选项提供全局设置&#34;&gt;为参数和选项提供全局设置&lt;a class=&#34;headerlink&#34; href=&#34;#为参数和选项提供全局设置&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;除了自定义使用说明和帮助消息外，&lt;code&gt;ArgumentParser&lt;/code&gt; 还允许你对命令行界面（CLI）应用进行其他一些有趣的调整。这些调整包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;为参数和选项定义全局默认值&lt;/li&gt;
&lt;li&gt;从外部文件中加载参数和选项&lt;/li&gt;
&lt;li&gt;允许或禁止选项缩写&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;有时，你可能需要为你的应用的参数和选项指定一个全局默认值。你可以通过在调用 &lt;code&gt;ArgumentParser&lt;/code&gt; 构造函数时，将默认值传递给 &lt;code&gt;argument_default&lt;/code&gt; 参数来实现这一点（注意：实际上 &lt;code&gt;ArgumentParser&lt;/code&gt; 没有 &lt;code&gt;argument_default&lt;/code&gt; 这个参数，但这里是为了说明可以全局设置默认值的概念。在实际应用中，你可能需要为每个参数单独设置默认值）。&lt;/p&gt;
&lt;p&gt;这个特性可能并不常用，因为参数和选项通常具有不同的数据类型或意义，很难找到一个满足所有需求的值。&lt;/p&gt;
&lt;p&gt;然而，&lt;code&gt;argument_default&lt;/code&gt;(尽管 &lt;code&gt;ArgumentParser&lt;/code&gt; 并没有直接提供这个参数，但这里是为了说明概念）的一个常见用例是当你想要避免将参数和选项添加到 &lt;code&gt;Namespace&lt;/code&gt; 对象中。在这种情况下，你可以使用 &lt;code&gt;SUPPRESS&lt;/code&gt; 常量作为默认值。这个默认值将确保只有命令行中提供的参数和选项才会被存储在 &lt;code&gt;arguments&lt;/code&gt; 的 &lt;code&gt;Namespace&lt;/code&gt; 中。&lt;/p&gt;
&lt;p&gt;作为一个例子，请继续修改你的自定义 &lt;code&gt;ls&lt;/code&gt; 命令，如下面的代码片段所示：   &lt;br /&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# ls.py v6&lt;/span&gt;

&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;argparse&lt;/span&gt;
&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;datetime&lt;/span&gt;
&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;pathlib&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Path&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;parser&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;argparse&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ArgumentParser&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;
    &lt;span class=&#34;n&#34;&gt;prog&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;ls&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
    &lt;span class=&#34;n&#34;&gt;description&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;List the content of a directory&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
    &lt;span class=&#34;n&#34;&gt;epilog&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;Thanks for using &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;%(prog)s&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;! :)&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
    &lt;span class=&#34;n&#34;&gt;argument_default&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;argparse&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SUPPRESS&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# ...&lt;/span&gt;

&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;entry&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;target_dir&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;iterdir&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;():&lt;/span&gt;
    &lt;span class=&#34;k&#34;&gt;try&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
        &lt;span class=&#34;n&#34;&gt;long&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;args&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;long&lt;/span&gt;
    &lt;span class=&#34;k&#34;&gt;except&lt;/span&gt; &lt;span class=&#34;ne&#34;&gt;AttributeError&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
        &lt;span class=&#34;n&#34;&gt;long&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;False&lt;/span&gt;
    &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;build_output&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;entry&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;long&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;long&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;通过将 &lt;code&gt;SUPPRESS&lt;/code&gt; 传递给 &lt;code&gt;ArgumentParser&lt;/code&gt; 构造函数，你可以防止未提供的参数被存储在 &lt;code&gt;argparse.Namespace&lt;/code&gt; 对象中。这就是为什么在调用 &lt;code&gt;build_output()&lt;/code&gt; 之前，你需要检查 &lt;code&gt;-l&lt;/code&gt; 或 &lt;code&gt;--long&lt;/code&gt; 选项是否实际被传递了。否则，你的代码会因为 &lt;code&gt;args&lt;/code&gt; 中不存在 &lt;code&gt;long&lt;/code&gt; 属性而引发 &lt;code&gt;AttributeError&lt;/code&gt; 错误。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;ArgumentParser&lt;/code&gt; 的另一个酷炫功能是允许你从外部文件中加载参数值。当你有一个具有冗长或复杂的命令行结构的应用，并希望自动化加载参数值的过程时，这个功能就非常有用。&lt;/p&gt;
&lt;p&gt;在这种情况下，你可以将参数值存储在一个外部文件中，并让你的程序从该文件中加载它们。为了尝试这个功能，请继续创建一个简单的命令行界面（CLI）应用，如下所示：   &lt;br /&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# fromfile.py&lt;/span&gt;

&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;argparse&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;parser&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;argparse&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ArgumentParser&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fromfile_prefix_chars&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;@&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;parser&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;add_argument&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;one&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;parser&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;add_argument&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;two&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;parser&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;add_argument&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;three&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;args&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;parser&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;parse_args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;

&lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;在这里，你向 &lt;code&gt;ArgumentParser&lt;/code&gt; 的 &lt;code&gt;fromfile_prefix_chars&lt;/code&gt; 参数传递 &lt;code&gt;@&lt;/code&gt; 符号。然后，你创建了三个必须在命令行中提供的必需参数。&lt;/p&gt;
&lt;p&gt;现在，假设你经常使用此应用程序，并且总是使用相同的一组参数值。为了简化和优化你的工作流程，你可以创建一个文件，其中包含所有必需参数的适当值，每个参数占一行，就像下面的 &lt;code&gt;args.txt&lt;/code&gt; 文件一样： &lt;br /&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;first
second
third
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;有了这个文件，您现在可以调用您的程序并指示它从 &lt;code&gt;args.txt&lt;/code&gt; 文件加载值，如以下命令运行所示：  &lt;br /&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;python&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;fromfile.py&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;@args.txt
Namespace&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;one&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;first&amp;#39;&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;two&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;second&amp;#39;&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;three&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;third&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;在此命令的输出中，你可以看到 &lt;code&gt;argparse&lt;/code&gt; 已经读取了 &lt;code&gt;args.txt&lt;/code&gt; 的内容，并顺序地将值分配给了 &lt;code&gt;fromfile.py&lt;/code&gt; 程序的每个参数。所有参数及其值都已成功存储在 &lt;code&gt;Namespace&lt;/code&gt; 对象中。&lt;/p&gt;
&lt;p&gt;接受缩写选项名称的能力是 &lt;code&gt;argparse&lt;/code&gt; 命令行界面（CLI）的另一个酷炫特性。这个特性是默认启用的，当你的程序具有长选项名称时非常有用。例如，考虑以下程序，它会在命令行下打印出你在 &lt;code&gt;--argument-with-a-long-name&lt;/code&gt; 选项后指定的值：   &lt;br /&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# abbreviate.py&lt;/span&gt;

&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;argparse&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;parser&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;argparse&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ArgumentParser&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;parser&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;add_argument&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;--argument-with-a-long-name&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;args&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;parser&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;parse_args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;

&lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;args&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;argument_with_a_long_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;这个程序会打印出你在 &lt;code&gt;--argument-with-a-long-name&lt;/code&gt; 选项后传入的任何参数值。现在，请继续运行以下命令来检查 Python 的 &lt;code&gt;argparse&lt;/code&gt; 模块如何处理这些缩写：  &lt;br /&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;python&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;abbreviate.py&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--argument-with-a-long-name&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;42&lt;/span&gt;
&lt;span class=&#34;m&#34;&gt;42&lt;/span&gt;

$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;python&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;abbreviate.py&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--argument&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;42&lt;/span&gt;
&lt;span class=&#34;m&#34;&gt;42&lt;/span&gt;

$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;python&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;abbreviate.py&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--a&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;42&lt;/span&gt;
&lt;span class=&#34;m&#34;&gt;42&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;这些示例展示了如何缩写 &lt;code&gt;--argument-with-a-long-name&lt;/code&gt; 选项的名称，而应用程序仍能正常工作。此功能是默认启用的。如果你希望禁用它并禁止缩写，那么可以在 &lt;code&gt;ArgumentParser&lt;/code&gt; 中使用 &lt;code&gt;allow_abbrev&lt;/code&gt; 参数：  &lt;br /&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# abbreviate.py&lt;/span&gt;

&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;argparse&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;parser&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;argparse&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ArgumentParser&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;allow_abbrev&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;False&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;parser&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;add_argument&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;--argument-with-a-long-name&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;args&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;parser&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;parse_args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;

&lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;args&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;argument_with_a_long_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;将 &lt;code&gt;allow_abbrev&lt;/code&gt; 设置为 &lt;code&gt;False&lt;/code&gt; 会禁用命令行选项中的缩写。从这一点开始，你将需要为程序提供完整的选项名称才能正确工作。否则，你会收到一个错误：   &lt;br /&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;python&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;abbreviate.py&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--argument-with-a-long-name&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;42&lt;/span&gt;
&lt;span class=&#34;m&#34;&gt;42&lt;/span&gt;

$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;python&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;abbreviate.py&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--argument&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;42&lt;/span&gt;
usage:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;abbreviate.py&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-h&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;--argument-with-a-long-name&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;...&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
abbreviate.py:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;error:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;unrecognized&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;arguments:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--argument&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;42&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;第二个示例中的错误消息告诉你 &lt;code&gt;--argument&lt;/code&gt; 选项没有被识别为有效的选项。要使用该选项，你需要提供它的完整名称。&lt;/p&gt;
&lt;h2 id=&#34;微调你的命令行参数和选项&#34;&gt;微调你的命令行参数和选项&lt;a class=&#34;headerlink&#34; href=&#34;#微调你的命令行参数和选项&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;到目前为止，你已经学习了如何定制 &lt;code&gt;ArgumentParser&lt;/code&gt; 类的多个功能，以改善你的命令行界面（CLI）的用户体验。现在，你知道了如何调整你的应用程序的使用说明和帮助信息，以及如何微调命令行参数和选项的一些全局方面。&lt;/p&gt;
&lt;p&gt;在本节中，你将学习如何定制你的 CLI 的命令行参数和选项的其他几个功能。在这种情况下，你将使用 &lt;code&gt;.add_argument()&lt;/code&gt; 方法及其一些最相关的参数，包括 &lt;code&gt;action&lt;/code&gt;、&lt;code&gt;type&lt;/code&gt;、&lt;code&gt;nargs&lt;/code&gt;、&lt;code&gt;default&lt;/code&gt;、&lt;code&gt;help&lt;/code&gt; 等。     &lt;/p&gt;
&lt;h3 id=&#34;设置-option-背后的-action&#34;&gt;设置 Option 背后的 Action&lt;a class=&#34;headerlink&#34; href=&#34;#设置-option-背后的-action&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;当你向命令行界面添加一个选项或标志时，通常需要定义如何将选项的值存储在调用 &lt;code&gt;.parse_args()&lt;/code&gt; 后得到的 &lt;code&gt;Namespace&lt;/code&gt; 对象中。为此，你会使用 &lt;code&gt;.add_argument()&lt;/code&gt; 的 &lt;code&gt;action&lt;/code&gt; 参数。&lt;code&gt;action&lt;/code&gt; 参数的默认值为 &amp;ldquo;store&amp;rdquo;，意味着提供的选项值将原样存储在 &lt;code&gt;Namespace&lt;/code&gt; 中。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;action&lt;/code&gt; 参数可以接受几个可能的值。以下是这些可能值的列表及其含义：&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;75&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/tech/discussions-75/</link>
      <pubDate>Thu, 06 Jun 2024 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/tech/discussions-75/</guid>
      
    </item>
    
    <item>
      <title>Chrome/Edge 地址栏正常显示完整的 URL</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;对于在 Chrome/Edge 使用 IP 或者其他 URL 访问网页，地址栏想复制 IP/URL 非要给我自动加上 &lt;code&gt;http://&lt;/code&gt;(或者 &lt;code&gt;https://&lt;/code&gt;) 前缀。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;h2 id=&#34;chrome&#34;&gt;Chrome&lt;a class=&#34;headerlink&#34; href=&#34;#chrome&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Google Chrome 对于这个问题的解决方法很简单：在 URL 地址栏点击 &amp;ldquo;鼠标右键&amp;rdquo; -&amp;gt; 选择 &amp;ldquo;总是显示完整网址&amp;rdquo;。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;chrome-show-url&#34; src=&#34;https://gi.weiyan.tech/2024/06/chrome-show-url.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;edge&#34;&gt;Edge&lt;a class=&#34;headerlink&#34; href=&#34;#edge&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;右键点击 Microsoft Edge 的桌面快捷方式，选择属性。
   &lt;img alt=&#34;edge-1&#34; src=&#34;https://gi.weiyan.tech/2024/05/edge-1.png&#34; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在启动目标结尾追加空格以及下面这段代码并保存。
   &lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;--disable-features=msHideSteadyStateUrlPath
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
   &lt;img alt=&#34;edge-disable-features&#34; src=&#34;https://gi.weiyan.tech/2024/05/edge-disable-features.png&#34; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;重启浏览器后地址栏就可以显示完整 URL 了。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;74&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-74/</link>
      <pubDate>Wed, 29 May 2024 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-74/</guid>
      
    </item>
    
    <item>
      <title>适合我的 RSS 阅读器</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;好多年前，写过一篇文章《&lt;a href=&#34;https://zhuanlan.zhihu.com/p/42088810&#34;&gt;使用RSS打造你的科研资讯头条&lt;/a&gt;》，但是由于没有趁手的 RSS 阅读器以至于让 RSS 信息聚合的这个念头荒废了好多年。直到最近用上了 &lt;a href=&#34;https://github.com/oxyry/qireader&#34;&gt;QiReader&lt;/a&gt; - 优雅的在线 RSS 阅读器，我的 RSS 信息聚合好像又找到了延续下去的动力。 &lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;不得不说，它很好的满足了我 Web 端+移动端同步的使用需求，而且国内国外通用。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;qireader-twitter&#34; src=&#34;https://gi.weiyan.tech/2024/05/qireader-twitter.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;在价格层面，一年 Pro 会员 ￥38，二年 ￥68，五年 ￥128，也不算贵 —— 于是，果断入手了。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;qireader-plans&#34; src=&#34;https://gi.weiyan.tech/2024/05/qireader-plans.webp&#34; /&gt;&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;73&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-73/</link>
      <pubDate>Tue, 21 May 2024 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-73/</guid>
      
    </item>
    
    <item>
      <title>Twitter</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;相比微博，Twitter 更有意思一些，除了可以获取到很多技术大咖的日常和动态，还能发现不少有意思的人和事。加上推特世界性的，开放性的一些特点，所以可以看到的自然是什么都有也比国内精彩。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;能够翻出来的都是有点认知的人，虽然不一定全对，但也有一定道理。&lt;/p&gt;
&lt;p&gt;微博用的比较少，感觉更加偏向娱乐和一些时事热点。&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;72&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-72/</link>
      <pubDate>Thu, 16 May 2024 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-72/</guid>
      
    </item>
    
    <item>
      <title>mamba 的两个分支 miniforge 和 mambaforge</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;在安装 mamba 的时候在 &lt;a href=&#34;https://github.com/conda-forge/miniforge/releases&#34;&gt;release&lt;/a&gt; 页面和&lt;a href=&#34;https://mamba.readthedocs.io/en/latest/installation/mamba-installation.html&#34;&gt;官方的安装页面&lt;/a&gt; 总是看到关于 miniforge 和 mambaforge 的选择问题，傻傻搞不明白。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;h2 id=&#34;miniforge-和-mambaforge&#34;&gt;Miniforge 和 Mambaforge&lt;a class=&#34;headerlink&#34; href=&#34;#miniforge-和-mambaforge&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;参考：&lt;a href=&#34;https://github.com/conda-forge/miniforge?tab=readme-ov-file#faq&#34;&gt;https://github.com/conda-forge/miniforge?tab=readme-ov-file#faq&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;What&amp;rsquo;s the difference between Mambaforge and Miniforge?&lt;/strong&gt;  &lt;br /&gt;
After the release of Miniforge 23.3.1 in August 2023, Miniforge and Mambaforge are essentially identical. The only difference is the name of the installer and subsequently the default installation path.&lt;/p&gt;
&lt;p&gt;2023 年 8 月发布 Miniforge 23.3.1 后，Miniforge 和 Mambaforge 基本相同。唯一的区别是安装程序的名称以及随后的默认安装路径(一个默认是 miniforge3，一个默认是 mambaforge3)。&lt;/p&gt;
&lt;p&gt;Before that release, Miniforge only shipped conda, while Mambaforge added mamba on top. Since Miniconda started shipping conda-libmamba-solver in July 2023, Miniforge followed suit and started shipping it too in August. At that point, since conda-libmamba-solver depends on libmambapy, the only difference between Miniforge and Mambaforge was the presence of the mamba Python package. To minimize surprises, we decided to add mamba to Miniforge too.    &lt;/p&gt;
&lt;p&gt;在之前的版本中，Miniforge 仅提供 conda，而 Mambaforge 在此基础上增加了 mamba。自 2023 年 7 月 Miniconda 开始提供 conda-libmamba-solver 以来，Miniforge 也紧随其后，于 8 月开始提供此功能。那时，由于 conda-libmamba-solver 依赖于libmambapy，Miniforge 和 Mambaforge 之间的唯一区别就是是否包含 mamba Python 包。为了尽量减少意外情况，我们决定也在 Miniforge 中添加 mamba。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Should I choose one or another going forward at the risk of one of them gettting deprecated?&lt;/strong&gt;   &lt;br /&gt;
Given its wide usage, there are no plans to deprecate Mambaforge. If at some point we decide to deprecate Mambaforge, it will be appropriately announced and communicated with sufficient time in advance.&lt;/p&gt;
&lt;p&gt;鉴于 Mambaforge 的广泛使用，目前没有计划将其弃用。如果未来我们决定弃用 Mambaforge，我们会提前充分公告并通知相关用户。&lt;/p&gt;
&lt;p&gt;That said, if you had to start using one today, we recommend to stick to Miniforge.&lt;/p&gt;
&lt;p&gt;不过，如果你今天需要开始使用其中一个，我们建议你坚持使用 Miniforge。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;miniforge-和-miniconda&#34;&gt;Miniforge 和 Miniconda&lt;a class=&#34;headerlink&#34; href=&#34;#miniforge-和-miniconda&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;参考：&lt;a href=&#34;https://bioconda.github.io/faqs.html#what-s-the-difference-between-anaconda-conda-miniconda-mamba-mambaforge-micromamba&#34;&gt;What’s the difference between Anaconda, conda, Miniconda, mamba, Mambaforge, micromamba?&lt;/a&gt; - bioconda#Faqs&lt;/p&gt;
&lt;p&gt;Miniforge 是社区 (conda-forge) 驱动的简约 conda 安装程序。Miniforge 与 Miniconda 类似，但预配置了 &lt;code&gt;conda-forge&lt;/code&gt; 通道，并且所有包都来自 conda-forge 而不是 &lt;code&gt;defaults&lt;/code&gt; 通道。现在它还包含了 mamba 和 libmamba。&lt;/p&gt;
&lt;p&gt;Miniconda 是公司 (Anaconda) 驱动的简约 conda 安装程序。随后的软件包安装来自 anaconda 频道（默认或其他）。&lt;/p&gt;
&lt;h2 id=&#34;一句话&#34;&gt;一句话&lt;a class=&#34;headerlink&#34; href=&#34;#一句话&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;总的一句话来说，Mambaforge 类似于 Miniforge，但将 mamba 安装到基础环境中。虽然没有严格弃用，但从 &lt;strong&gt;2023 年 9 月&lt;/strong&gt;起不鼓励使用它（请参阅 miniforge 自述 &lt;a href=&#34;https://github.com/conda-forge/miniforge&#34;&gt;README&lt;/a&gt; 文件）。&lt;/p&gt;
&lt;h2 id=&#34;版本选择&#34;&gt;版本选择&lt;a class=&#34;headerlink&#34; href=&#34;#版本选择&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Miniforge3 的 &lt;a href=&#34;https://github.com/conda-forge/miniforge/releases/tag/24.5.0-0&#34;&gt;Release 24.5.0-0&lt;/a&gt; 要求 &lt;strong&gt;Linux-x86_64: glibc &amp;gt;= 2.17&lt;/strong&gt;，也就是对于 CentOS/RHEL 6.x (glibc = 2.12) 的旧服务器将无法正常安装使用。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;lsb_release&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-a
LSB&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Version:&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;:core-4.1-amd64:core-4.1-noarch
Distributor&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ID:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;CentOS
Description:&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;CentOS&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Linux&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;release&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;7&lt;/span&gt;.7.1908&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;Core&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
Release:&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;7&lt;/span&gt;.7.1908
Codename:&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;Core

$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ldd&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--version
ldd&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;GNU&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;libc&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;.17
Copyright&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;C&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2012&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Free&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Software&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Foundation,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Inc.
This&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;is&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;free&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;software&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;see&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;copying&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conditions.&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;There&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;is&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;NO
warranty&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;even&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;MERCHANTABILITY&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;or&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FITNESS&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FOR&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;A&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;PARTICULAR&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;PURPOSE.
Written&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;by&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Roland&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;McGrath&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;and&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Ulrich&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Drepper.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;miniforge3-24.5.0-0&#34; src=&#34;https://gi.weiyan.tech/2025/03/miniforge3-24.5.0-0.webp&#34; /&gt;&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;71&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/tech/discussions-71/</link>
      <pubDate>Sun, 28 Apr 2024 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/tech/discussions-71/</guid>
      
    </item>
    
    <item>
      <title>寻找 GitHub 的替代品</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;与其说是在寻找 GitHub 的替代品，倒不如说在寻找 GitHub 的备用站点 —— 以防万一 GitHub 哪天登不上去了，也不至于把托管在上面的东西都丢了，尤其对于我这种几乎把所有可公开文档都记录在 &lt;a href=&#34;https://github.com/shenweiyan/Knowledge-Garden/discussions&#34;&gt;GitHub Discussions&lt;/a&gt; 上的人，毕竟把所有的鸡蛋放在一个篮子里终究是很危险的。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;h2 id=&#34;代码&#34;&gt;代码&lt;a class=&#34;headerlink&#34; href=&#34;#代码&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;如果纯粹是代码托管，这样的备用平台多的是。&lt;/p&gt;
&lt;p&gt;除去国内的那几家，国外优秀的托管平台更多一些。如 &lt;a href=&#34;https://framagit.org/&#34;&gt;Framagit&lt;/a&gt; 和 &lt;a href=&#34;https://codeberg.org/&#34;&gt;Codeberg&lt;/a&gt;。&lt;a href=&#34;https://framagit.org/&#34;&gt;Framagit&lt;/a&gt; 是一个基于 GitLab 的法国托管平台，而 &lt;a href=&#34;https://codeberg.org/&#34;&gt;Codeberg&lt;/a&gt; 则是一个站点（总部）在德国，由非盈利组织采用自由软件（Gitea）搭建的代码托管平台，两相比较，个人感觉 &lt;a href=&#34;https://codeberg.org/&#34;&gt;Codeberg&lt;/a&gt; 比 &lt;a href=&#34;https://framagit.org/&#34;&gt;Framagit&lt;/a&gt; 体验更友好，最起码文档和各种导航操作更加清晰明了。&lt;/p&gt;
&lt;p&gt;最最重要的一点是，这两个托管平台目前国内都可以直接连接。&lt;/p&gt;
&lt;h2 id=&#34;issues-和-discussions&#34;&gt;Issues 和 Discussions&lt;a class=&#34;headerlink&#34; href=&#34;#issues-和-discussions&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;如果说 Issues 和 Discussions 的备用站点，这个就不好说了。国内的 &lt;a href=&#34;https://gitcode.com/&#34;&gt;GitCode&lt;/a&gt; 和 &lt;a href=&#34;https://atomgit.com/&#34;&gt;AtomGit&lt;/a&gt; 虽然都有类似的功能，但是&lt;strong&gt;都不能搜索内容&lt;/strong&gt;，虽然他们说全文搜索已经&lt;a href=&#34;https://atomgit.com/atomgit_operate/feedback/issues/496&#34;&gt;在路上了&lt;/a&gt;，但是背后的 CSDN 运营和 UI 风格真是让人有点担忧重蹈 CSDN 的尿性体验。&lt;/p&gt;
&lt;p&gt;尤其是最近（2024年6月）这一段时间 GitCode 被曝&lt;a href=&#34;https://www.ithome.com/0/778/049.htm&#34;&gt;批量搬运 Github 项目&lt;/a&gt;的事件，让本来对 CSDN 厌恶至极的我瞬间好感全无，开始对 GitCode 也时刻保持警戒心态。&lt;/p&gt;
&lt;h2 id=&#34;pages&#34;&gt;Pages&lt;a class=&#34;headerlink&#34; href=&#34;#pages&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Gitee Pages 在五一&lt;a href=&#34;https://gitee.com/oschina/git-osc/issues/I9L5FJ&#34;&gt;悄悄关停了&lt;/a&gt; 也终于让人对国内代码托管平台开启 Pages 服务不再抱有期待。虽然最近发现 &lt;a href=&#34;https://atomgit.com/&#34;&gt;AtomGit&lt;/a&gt; 也提供了 &lt;a href=&#34;https://atomgit.com/apps/pages&#34;&gt;AtomGit Pages&lt;/a&gt;，而且也的确能正常的用起来了，但谁能确保未来会不会也跟 Gitee Pages 一个下场！&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;atomgit-pages-for-atomgit&#34; src=&#34;https://gi.weiyan.tech/2024/07/atomgit-pages-for-atomgit.jpg&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;想法&#34;&gt;想法&lt;a class=&#34;headerlink&#34; href=&#34;#想法&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;由于国内监管的一些问题，国内的开源社区大多都让人一言难尽，曾经的极狐也因为收费的问题把个人用户的最后一根稻草给压垮了，总的来说，国内目前为止就还没有一家能跟得上 GitHub/GitLab 的开源平台，不管从开源本身还是功能体验，现在没有，未来也不一定能有。&lt;/p&gt;
&lt;p&gt;用了一段时间 AtomGit，页面 UI 真是无法忍受，一堆的 BUG 毫无修复（&lt;a href=&#34;https://atomgit.com/atomgit_operate/feedback/issues/442&#34;&gt;issues#442&lt;/a&gt;、&lt;a href=&#34;https://atomgit.com/atomgit_operate/feedback/issues/668&#34;&gt;issues#668&lt;/a&gt;），用户体验全无。还是先在 GitCode，继续苟着吧！&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;70&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-70/</link>
      <pubDate>Wed, 24 Apr 2024 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-70/</guid>
      
    </item>
    
    <item>
      <title>我的独立站点 Knowledge-Garden</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;使用 GitHub Discussions 写作文章大半年以来，越来越得心应手，最近起用了新的一个仓库，用于 &lt;a href=&#34;https://github.com/shenweiyan/Knowledge-Garden/discussions&#34;&gt;Knowledge-Garden&lt;/a&gt; 静态资源的保存和使用。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;h2 id=&#34;文章&#34;&gt;文章&lt;a class=&#34;headerlink&#34; href=&#34;#文章&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;所有的文章都是以 markdown 的格式进行保存，实际上就一堆 text 文本，占用不了多少的空间。&lt;/p&gt;
&lt;h2 id=&#34;静态资源&#34;&gt;静态资源&lt;a class=&#34;headerlink&#34; href=&#34;#静态资源&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;文章的静态资源，主要是图片，才是一个最耗流量和存储空间的东西。&lt;/p&gt;
&lt;p&gt;前一段时间经历了&lt;a href=&#34;https://github.com/shenweiyan/Knowledge-Garden/discussions/63&#34;&gt;腾讯云 cos 对象存储被盗刷&lt;/a&gt; 的事件后，对于对象存储的使用也就越来越谨慎，今天终于狠下决心来把 &lt;a href=&#34;https://github.com/shenweiyan/Knowledge-Garden/discussions&#34;&gt;Knowledge-Garden&lt;/a&gt; 这个仓库的所有包括图片在内的静态资源开始保存到另外一个 GitHub 仓库 &lt;a href=&#34;https://github.com/shenweiyan/PicKG&#34;&gt;PicKG&lt;/a&gt;，同时借助 Cloudflare Pages 来为图片提供访问链接。&lt;/p&gt;
&lt;p&gt;也尝试了一下 Cloudflare 的 &lt;a href=&#34;https://www.cloudflare.com/zh-cn/developer-platform/r2/&#34;&gt;R2&lt;/a&gt; 这个号称零出口费用的对象存储，免费额度很有吸引力，但目前 Cloudflare R2 还没能找到一个比较顺手的图片管理工具，例如阿里云的 &lt;a href=&#34;https://github.com/aliyun/oss-browser&#34;&gt;oss-browser&lt;/a&gt;、腾讯云的 &lt;a href=&#34;https://cosbrowser.cloud.tencent.com/&#34;&gt;cos-browser&lt;/a&gt;。虽然尝试了一些折中的方案，如 &lt;a href=&#34;https://github.com/shenweiyan/Picx4R2&#34;&gt;Picx4R2&lt;/a&gt;，但还是不太满意。&lt;/p&gt;
&lt;p&gt;所以目前的解决方法就是 GitHub + &lt;a href=&#34;https://github.com/shenweiyan/Knowledge-Garden/discussions/68&#34;&gt;PicX&lt;/a&gt; + Cloudflare Pages 进行组合，GitHub 单个仓库 5G 的存储空间应该应该也足够使用了，如果实在不够了再来考虑其他方案。&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;69&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-69/</link>
      <pubDate>Mon, 22 Apr 2024 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-69/</guid>
      
    </item>
    
    <item>
      <title>部署 PicX 图床到 Vercel</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;由于 &lt;a href=&#34;https://github.com/XPoet/picx&#34;&gt;PicX&lt;/a&gt; 自 v3.0 起，不再支持自由选择仓库和分支，统一使用内置的仓库和分支。所以出于自定义的仓库和分支使用需求，这里主要对 &lt;a href=&#34;https://github.com/XPoet/picx/tree/v2&#34;&gt;PicX v2.0&lt;/a&gt; 进行 Vercel 自定义部署。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;项目地址：https://github.com/XPoet/picx/tree/v2&lt;/p&gt;
&lt;p&gt;利用 PicX 图床，直接把图片托管到 GitHub 上去。至于安装，参考&lt;a href=&#34;https://zburu.com/&#34;&gt;子舒 Blog&lt;/a&gt;的《&lt;a href=&#34;https://zburu.com/blog/172.html/&#34;&gt;安装一个基于 Github 的静态图床程序&lt;/a&gt;》这两篇文章。可以把程序和图床直接托管在 GitHub 上，也可以把程序搭建在自己的服务器上，但是图片还是只能托管到 GitHub 上。PicX 图床不像简单图床和兰空图床，图片生成的链接可以是自己的域名链接，而因为图片是托管到 GitHub 上，所以 PicX 生成的图片外链接只能是 staticaly 和 cloudfalre 的 CDN 的外链。所以个人感觉也就没有必要再把程序上传到自己的服务器上了，直接使用 GitHub 不是更好嘛。&lt;/p&gt;
&lt;h2 id=&#34;操作步骤&#34;&gt;操作步骤&lt;a class=&#34;headerlink&#34; href=&#34;#操作步骤&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;主要的操作步骤如下： &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1 个 GitHub 账号；&lt;/li&gt;
&lt;li&gt;1 个 Vercel 账号，可能需要科学上网环境；&lt;/li&gt;
&lt;li&gt;Fork PicX v2 源码 (https://github.com/XPoet/picx/tree/v2) 到个人 GitHub 仓库；&lt;/li&gt;
&lt;li&gt;在 Vercel 新建项目，绑定个人 GitHub 仓库的 PicX v2 源码；Framework Preset 选择 &amp;ldquo;Vue.js&amp;rdquo;；&lt;/li&gt;
&lt;li&gt;部署完成后为域名添加一条 CNAME 到 &lt;code&gt;cname-china.vercel-dns.com&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;基于以上的步骤，个人成功部署的一个 PicX 站点，以供参考和使用：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;https://github.com/shenweiyan/PicX&lt;/li&gt;
&lt;li&gt;链接1：&lt;a href=&#34;https://v2picx.vercel.app/&#34;&gt;https://v2picx.vercel.app/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;链接2：&lt;a href=&#34;https://picx.weiyan.cc/&#34;&gt;https://picx.weiyan.cc/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&#34;picx-weiyan-cc&#34; src=&#34;https://gi.weiyan.tech/2024/05/picx-weiyan-cc.webp&#34; /&gt;&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;68&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-68/</link>
      <pubDate>Mon, 22 Apr 2024 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-68/</guid>
      
    </item>
    
    <item>
      <title>国内静态部署与托管平台</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;&lt;a href=&#34;https://gitee.com/help/articles/4136/&#34;&gt;Gitee Pages&lt;/a&gt; 由于审查原因，基本上已经是名存实亡的状态了；之前勉强可以使用的  &lt;a href=&#34;https://webify.cloudbase.net/&#34;&gt;Webbify&lt;/a&gt; 现如今也变成了每月至少 15 块的购买时长模式。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;之前在《&lt;a href=&#34;https://github.com/shenweiyan/Knowledge-Garden/discussions/56&#34;&gt;越来越难用的国内代码托管平台&lt;/a&gt;》吐槽过一波国内所谓开源平台的状况，今天又发现除了代码平台外，原来静态部署的平台也走上了这一条路。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://gitee.com/help/articles/4136/&#34;&gt;Gitee Pages&lt;/a&gt; 就不说了，懂得都懂。&lt;/p&gt;
&lt;p&gt;说一说腾讯云的 &lt;a href=&#34;https://webify.cloudbase.net/&#34;&gt;Webbify&lt;/a&gt;。今天 (2024年4月15) 上去想要部署一个新的站点，居然发现以前的 &lt;strong&gt;&amp;ldquo;按量付费&amp;rdquo;&lt;/strong&gt; 计费模式已经消失，取而代之的是一个每月至少 15 块的购买时长模式。作为一个 2021 年就不再更新的产品，这样的收费模式真是让人瞬间欲望大减。
&lt;img alt=&#34;webify-price-15-pre-month.webp&#34; src=&#34;https://static.weiyan.tech/2024/04/webify-price-15-pre-month.webp&#34; /&gt;&lt;/p&gt;
&lt;p&gt;回过头来看一看国外的 &lt;a href=&#34;https://app.netlify.com/&#34;&gt;Netlify&lt;/a&gt;、&lt;a href=&#34;https://vercel.com/&#34;&gt;Vercel&lt;/a&gt;、&lt;a href=&#34;https://www.cloudflare-cn.com/developer-platform/pages/&#34;&gt;Cloudflare Pages&lt;/a&gt;，甚至是 GitHub Pages，再看一下国内的这些平台，真是一言难尽，除了先培养用户再收割，好像也没剩下什么了。&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;67&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-67/</link>
      <pubDate>Mon, 15 Apr 2024 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-67/</guid>
      
    </item>
    
    <item>
      <title>RSS 订阅插件 mkdocs-rss-plugin 的一些问题</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;聊一下 Mkdocs Material 的默认插件 &lt;a href=&#34;https://github.com/Guts/mkdocs-rss-plugin&#34;&gt;mkdocs-rss-plugin&lt;/a&gt; 在使用上的一些问题。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;对于 blog 插件，默认的 RSS 里边提供的地址有一部分会默认为目录链接(例如 &lt;code&gt;category&lt;/code&gt; 和 &lt;code&gt;archive&lt;/code&gt;)，而非文章地址。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;rss-item.webp&#34; src=&#34;https://static.weiyan.tech/2024/04/rss-item.webp&#34; /&gt;&lt;/p&gt;
&lt;p&gt;针对这一种情况，需要使用 RSS 配置的 &lt;a href=&#34;https://guts.github.io/mkdocs-rss-plugin/configuration/#match_path-filter-pages-to-include-in-feed&#34;&gt;&lt;code&gt;match_path&lt;/code&gt;&lt;/a&gt;，即可解决：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;plugins:
  - rss:
      match_path: &amp;quot;(blog/posts|flinks|galaxy|message|note|readme|tech|yuque)/.*&amp;quot;
      date_from_meta:
        as_creation: date
      categories:
        - categories
        - tags
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;65&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-65/</link>
      <pubDate>Thu, 11 Apr 2024 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-65/</guid>
      
    </item>
    
    <item>
      <title>阿里云域名备案与使用</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;在阿里云注册且完成备案的域名，在使用与解析中遇到的一些问题。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;h2 id=&#34;备案接入信息与实际接入信息不符&#34;&gt;备案接入信息与实际接入信息不符&lt;a class=&#34;headerlink&#34; href=&#34;#备案接入信息与实际接入信息不符&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;在阿里云注册且完成备案的域名，前两天收到了信息：如您的网站备案还要继续使用，请您务必于2024-04-18 09:05:39之前设置解析指向阿里云内地服务器且恢复该网站在阿里云内地节点服务器的正常访问。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;如您的网站备案还要继续使用，请您务必于2024-04-18 09:05:39之前设置解析指向阿里云内地服务器且恢复该网站在阿里云内地节点服务器的正常访问。若在规定时间内未完成整改，可能会导致备案信息被取消接入或被注销，影响您网站的正常访问；若您的备案域名解析IP地址已指向阿里云备案的内地节点（不含香港）服务器，且保持正常访问，请忽略此邮件。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img alt=&#34;beian-weiyan-cc.webp&#34; src=&#34;https://static.weiyan.tech/2024/04/beian-weiyan-cc.webp&#34; /&gt;&lt;/p&gt;
&lt;p&gt;目前，参考知乎《&lt;a href=&#34;https://zhuanlan.zhihu.com/p/516077564&#34;&gt;阿里云服务器备案域名会掉吗&lt;/a&gt;》的方法 —— 先把目前 &lt;code&gt;weiyan.cc&lt;/code&gt; 下的一到两个子域名增加一个 A 记录绑定到阿里云的 ECS 公网 IP，主域名继续按目前的要求通过 CNAME 绑定 &lt;a href=&#34;https://weiyan.netlify.app&#34;&gt;weiyan.netlify.app&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;再看看后续是否有影响。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;2024年11月28日，半年过去了，这个方法好像的确可以。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;已备案域名未使用阿里云中国内地节点服务器&#34;&gt;已备案域名未使用阿里云中国内地节点服务器&lt;a class=&#34;headerlink&#34; href=&#34;#已备案域名未使用阿里云中国内地节点服务器&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;这是 2024-11-19 收到的阿里云消息，发现个人博客类网站现在用起真的是门槛越来越高。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;如您的网站备案还要继续保留阿里云的备案信息，请您务必于&lt;strong&gt;2024-11-25 14:12:51之前设置恢复使用阿里云服务器&lt;/strong&gt;。若在规定时间内未完成整改，可能会导致备案信息被取消接入或被注销，影响您网站的备案状态。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img alt=&#34;beian-aliyun-server&#34; src=&#34;https://gi.weiyan.tech/2024/11/beian-aliyun-server.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;参考了一些人的&lt;a href=&#34;https://blog.csdn.net/qq_36759224/article/details/104210934&#34;&gt;方法&lt;/a&gt;：将你的域名添加一个二级域名，解析到某些阿里云国内节点服务器上就行了。例如我博客域名为 &lt;code&gt;www.abcde.com&lt;/code&gt;，就可以添加一个或者两个 A 记录，记录值为阿里云国内节点服务器的 IP。然后隔一段时间访问一下 &lt;code&gt;1.abcde.com&lt;/code&gt; 或者 &lt;code&gt;2.abcde.com&lt;/code&gt; ，确保有一点儿访问量就行了。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 用最简单的方式在服务器开启一个 HTML &lt;/span&gt;
nohup&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;python3&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-m&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;http.server&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--cgi&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;80&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;也有人说，必须是 &lt;code&gt;www&lt;/code&gt; 和根域名，其他不行，先试试二级域名吧！&lt;/p&gt;
&lt;p&gt;目前尚不清楚这样的做法是否能确保备案不失效，如果备案失效，很可能导致域名被墙的，根据网络上一些人的说法，默认不影响站点访问，但是个别城市的运营商会屏蔽（和你没关系，是他们一刀切了国外 IP 的解析）。&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;66&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-66/</link>
      <pubDate>Thu, 11 Apr 2024 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-66/</guid>
      
    </item>
    
    <item>
      <title>无趣的人</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;有趣的灵魂万里挑一，好看的皮囊千篇一律。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;活得通透的人 ，没有特别想维持的关系 ，也没有特别想要的东西 ，走近的人不抗拒 ，离开的人不强留 ，就连吃亏也懒得计较。&lt;/p&gt;
&lt;p&gt;从统计上来看，成年后还能重塑自我的人太罕见了。年纪越大就越相信命运，其中最大的一个原因就是理解人的改变之难。意图改变不如早早学会接纳。&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;64&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-64/</link>
      <pubDate>Sun, 07 Apr 2024 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-64/</guid>
      
    </item>
    
    <item>
      <title>腾讯云 cos 也被盗刷了</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;我的 &lt;a href=&#34;https://bioit.top/&#34;&gt;WebStack-Hugo&lt;/a&gt; 个人导航站点最开始用的是腾讯云的 cos 对象存储作为所有图片的存储和访问，在 2024 年 3 月底的时候收到腾讯云的通知说 200 万次的标准存储请求已经用掉了 180 多万次。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;&lt;img alt=&#34;cos-warning.webp&#34; src=&#34;https://static.weiyan.tech/2024/03/cos-warning.webp&#34; /&gt;&lt;/p&gt;
&lt;p&gt;收到信息吓了一跳，心想我这一个小破网站不至于这么多的请求吧，肯定被攻击盗刷了。加上之前在网络上看到的阿里云/腾讯云对象存储被刷爆的新闻还历历在目，于是赶紧的上去腾讯云一看发现一天的读写请求居然达到了 25 万多次！&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;cos-y-requests&#34; src=&#34;https://static.weiyan.tech/2024/03/cos-y-requests.webp&#34; /&gt;&lt;/p&gt;
&lt;p&gt;虽然之前一直设置了防盗链，但是一直允许着 &lt;strong&gt;&amp;ldquo;空 referer&amp;rdquo;&lt;/strong&gt;，这无疑是一个巨大的漏洞，参考 《&lt;a href=&#34;https://zhuanlan.zhihu.com/p/660308000&#34;&gt;COS被流量盗刷了&lt;/a&gt;》 的经历，第一时间就把这个 &lt;strong&gt;&amp;ldquo;空 referer&amp;rdquo;&lt;/strong&gt; 设置为了 &lt;strong&gt;&amp;ldquo;拒绝&amp;rdquo;&lt;/strong&gt;，并开启了日志。&lt;/p&gt;
&lt;p&gt;果不其然，一段时间过后从生成的日志文件，发现了这样的一个网址：&lt;a href=&#34;https://123.wqydl.cn/&#34;&gt;https://123.wqydl.cn/&lt;/a&gt;。
&lt;img alt=&#34;123-wqydl-get&#34; src=&#34;https://static.weiyan.tech/2024/03/123-wqydl-get.webp&#34; /&gt;&lt;/p&gt;
&lt;p&gt;这个网站一直在请求获取个人 cos 内的 &lt;code&gt;/webstack/logos/default.webp&lt;/code&gt; 这个图片！为了安全起见，又赶紧第一时间把这个网站加入了黑名单，并且把对应的 cos 权限设置成了 &lt;strong&gt;&amp;ldquo;私有读写&amp;rdquo;&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;但是从源源不断产生的日志可以看到这个恶心的网站还一直不依不饶在每隔几分钟就执行一堆读取请求！
&lt;img alt=&#34;get-requests-by-time.webp&#34; src=&#34;https://static.weiyan.tech/2024/03/get-requests-by-time.webp&#34; /&gt;&lt;/p&gt;
&lt;p&gt;但幸运的是这些请求现在都 &lt;strong&gt;&amp;ldquo;AccessDenied&amp;rdquo;&lt;/strong&gt; 了，但对它的一些后续可能的动作也很是好奇，在持续观察中。
&lt;img alt=&#34;cos-access-denied.webp&#34; src=&#34;https://static.weiyan.tech/2024/03/cos-access-denied.webp&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;cos-log.png&#34; src=&#34;https://static.weiyan.tech/2024/03/cos-log.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;cos-safe.png&#34; src=&#34;https://static.weiyan.tech/2024/03/cos-safe.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;终于，第二天的晚上终于在他们的官网联系上了对应的客服，他们把相应的网站停掉后一切又回归正常。   &lt;br /&gt;
&lt;img alt=&#34;cos-package-free.webp&#34; src=&#34;https://static.weiyan.tech/2024/04/cos-package-free.webp&#34; /&gt;&lt;/p&gt;
&lt;p&gt;最后，以此为鉴，希望大家在提供公共资源的时候擦亮眼睛，避免踩坑。&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;63&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-63/</link>
      <pubDate>Fri, 29 Mar 2024 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-63/</guid>
      
    </item>
    
    <item>
      <title>图床管理与使用</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;随着博客和其他一些站点多了起来，日积月累的访问越来越觉得腾讯云 cos 和阿里云 oss 是远远不够的，于是开始想着寻找可以一劳永逸的图床管理和使用替代者。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;GitHub 的图床虽然不错，但如果文件越来越多，终究不是一个很好的解决方案。&lt;/p&gt;
&lt;p&gt;Cloudflare R2 目前看来是个不错的选项，但是图片的上传、删除和日常管理目前还没有找到一个比较顺手的工具。目前在用的一个 &lt;a href=&#34;https://github.com/shenweiyan/Picx4R2/&#34;&gt;Picx4R2&lt;/a&gt; 还有一些不太满意的地方，即上传的图片无法保留原始的文件名！—— 不过幸运的是借助百度文心一言终于把保留原始文件名的这个问题给解决了。&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;62&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-62/</link>
      <pubDate>Wed, 27 Mar 2024 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-62/</guid>
      
    </item>
    
    <item>
      <title>Python 里面没 if 也能用 else</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;blockquote&gt;
&lt;p&gt;这是来自于 &lt;a href=&#34;https://twitter.com/YangZhou1993&#34;&gt;Yang Zhou&lt;/a&gt; 发表在 &lt;a href=&#34;https://medium.com/techtofreedom/beyond-if-else-leveraging-pythons-versatile-else-statements-9ac260dac102&#34;&gt;Medium&lt;/a&gt; 的一篇文章 《&lt;a href=&#34;https://medium.com/techtofreedom/beyond-if-else-leveraging-pythons-versatile-else-statements-9ac260dac102&#34;&gt;Beyond If-Else: Leveraging Python’s Versatile “Else” Statements&lt;/a&gt;》，作者觉得挺有意思的，拿过来简单翻译了一下在这里分享给大家。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;!-- more --&gt;

&lt;p&gt;当我们说到 &amp;ldquo;else&amp;rdquo;，必须先有 &amp;ldquo;if&amp;rdquo;。&lt;/p&gt;
&lt;p&gt;这对于许多编程语言来说都是正确的，但对于 Python 来说却不然。&lt;/p&gt;
&lt;p&gt;Python 的 else 语句比我们想象的更通用。&lt;/p&gt;
&lt;p&gt;从循环后的 &amp;ldquo;else&amp;rdquo; 到 try- except 块后的 &amp;ldquo;else&amp;rdquo;，本文将探讨 else 语句鲜为人知的功能。&lt;/p&gt;
&lt;p&gt;我们不一定需要在生产中使用这些技巧，尤其是当我们的同事还不知道它们时，但仅仅意识到它们的存在就可以让我们再次感受到 Python 的灵活性和多功能性。&lt;/p&gt;
&lt;h2 id=&#34;1-while-else-结构&#34;&gt;1. While-Else 结构&lt;a class=&#34;headerlink&#34; href=&#34;#1-while-else-结构&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;在 Python 中， &lt;code&gt;while&lt;/code&gt; 循环可以与 &lt;code&gt;else&lt;/code&gt; 块配对。当且仅当循环正常完成时，&lt;code&gt;else&lt;/code&gt; 块才会执行，这意味着它不会通过 &lt;code&gt;break&lt;/code&gt; 语句终止。&lt;/p&gt;
&lt;p&gt;换句话说，如果 &lt;code&gt;while&lt;/code&gt; 循环被 &lt;code&gt;break&lt;/code&gt; 终止，则 &lt;code&gt;else&lt;/code&gt; 块将不会被执行。
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;leaders&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;Elon&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;Tim&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;Warren&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;
&lt;span class=&#34;k&#34;&gt;while&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;len&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;leaders&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;leaders&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;Yang&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
        &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;Yang is a leader!&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
        &lt;span class=&#34;k&#34;&gt;break&lt;/span&gt;
    &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;
&lt;span class=&#34;k&#34;&gt;else&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
    &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;Not found Yang!&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# Not found Yang!&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;如上面的示例所示， &lt;code&gt;while&lt;/code&gt; 循环迭代 &lt;code&gt;leaders&lt;/code&gt; 列表，搜索领导者 &amp;ldquo;Yang&amp;rdquo;。不幸的是，&amp;rdquo;Yang&amp;rdquo; 并不是该名单中真正的领导者。所以 &lt;code&gt;break&lt;/code&gt; 语句没有被执行。因此，&lt;code&gt;else&lt;/code&gt; 语句下的代码就被执行了。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;else&lt;/code&gt; 语句的这种意外用法使我们无需添加额外的标志变量来标记循环是否被破坏。这样我们的 Python 程序就可以精简一些了。&lt;/p&gt;
&lt;h2 id=&#34;2-带有-for-循环的-else-语句&#34;&gt;2. 带有 For 循环的 Else 语句&lt;a class=&#34;headerlink&#34; href=&#34;#2-带有-for-循环的-else-语句&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;For 循环和 &lt;code&gt;while&lt;/code&gt; 循环是编程的孪生兄弟。如果我们可以在 while 循环中利用 else 语句的多功能性，那么毫无疑问它可以用于 for 循环。&lt;/p&gt;
&lt;p&gt;这个想法是完全相同的：      &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The &amp;ldquo;else&amp;rdquo; block only executes when there is no break in the for loop.   &lt;br /&gt;
&amp;ldquo;else&amp;rdquo; 块仅在 for 循环中没有中断时执行。     &lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;让我们用 for 循环重写前面的示例：
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;leaders&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;Elon&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;Tim&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;Warren&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;

&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;leaders&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;Yang&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
        &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;Yang is a leader!&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
        &lt;span class=&#34;k&#34;&gt;break&lt;/span&gt;
&lt;span class=&#34;k&#34;&gt;else&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
    &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;Not found Yang!&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# Not found Yang!&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;代码更简洁了，不是吗？你能用其他编程语言做到这一点吗？&lt;/p&gt;
&lt;h2 id=&#34;3-使用-else-语句进行异常处理&#34;&gt;3. 使用 Else 语句进行异常处理&lt;a class=&#34;headerlink&#34; href=&#34;#3-使用-else-语句进行异常处理&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;异常处理是编写健壮且无错误的代码的一项重要技术。&lt;/p&gt;
&lt;p&gt;在 Python 中，整个异常处理代码块的结构应该如下：
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;k&#34;&gt;try&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
    &lt;span class=&#34;c1&#34;&gt;# Code that might raise an exception&lt;/span&gt;
&lt;span class=&#34;k&#34;&gt;except&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;SomeException&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
    &lt;span class=&#34;c1&#34;&gt;# Code that runs if the try block raised &amp;#39;SomeException&amp;#39;&lt;/span&gt;
&lt;span class=&#34;k&#34;&gt;else&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
    &lt;span class=&#34;c1&#34;&gt;# Code that runs if the try block did NOT raise any exceptions&lt;/span&gt;
&lt;span class=&#34;k&#34;&gt;finally&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
    &lt;span class=&#34;c1&#34;&gt;# Code that always runs no matter what, often for cleanup&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;除了 &lt;code&gt;try&lt;/code&gt; 块之外，所有其他部分都是可选的。&lt;/p&gt;
&lt;p&gt;当 &lt;code&gt;try&lt;/code&gt; 块未引发异常时， &lt;code&gt;else&lt;/code&gt; 块就会执行。这是放置仅当 &lt;code&gt;try&lt;/code&gt; 块成功且无异常时才运行的代码的好地方。这对于阐明代码的意图并防止 &lt;code&gt;except&lt;/code&gt; 块意外捕获非常有用。&lt;/p&gt;
&lt;p&gt;例如，以下程序实现了一个非常简单的除法函数：
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;divide&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
    &lt;span class=&#34;k&#34;&gt;try&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
        &lt;span class=&#34;n&#34;&gt;result&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;
    &lt;span class=&#34;k&#34;&gt;except&lt;/span&gt; &lt;span class=&#34;ne&#34;&gt;ZeroDivisionError&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
        &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;Error: Division by zero.&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
    &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
        &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;Result is &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;result&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
    &lt;span class=&#34;k&#34;&gt;finally&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
        &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;Executing finally clause.&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;如果没有遇到 &lt;code&gt;ZeroDivisionError&lt;/code&gt;，结果如下：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;divide&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2077&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# Result is 2077.0&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# Executing finally clause.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;当然，如果满足定义的异常，则会打印相关的 &lt;code&gt;Error&lt;/code&gt; 消息：
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;divide&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2077&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# Error: Division by zero.&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# Executing finally clause.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;h2 id=&#34;要点总结&#34;&gt;要点总结&lt;a class=&#34;headerlink&#34; href=&#34;#要点总结&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;在 Python 中，else 语句不一定位于 if 语句之后。&lt;/p&gt;
&lt;p&gt;它还有三个额外但鲜为人知的用途：     &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;while-else 循环     &lt;/li&gt;
&lt;li&gt;for-else 循环     &lt;/li&gt;
&lt;li&gt;使用 else 块进行异常处理     &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;但是，我不建议您在生产中频繁应用它们，因为使用鲜为人知的功能可能会降低可读性并使您的同事感到困惑。但理解并随意应用它们会给你的同事留下深刻的印象，并巩固你作为 &amp;ldquo;Python 大师&amp;rdquo; 的地位。 😎&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;61&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/tech/discussions-61/</link>
      <pubDate>Thu, 21 Mar 2024 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/tech/discussions-61/</guid>
      
    </item>
    
    <item>
      <title>RockyLinux 9 基础配置与使用</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;今天终于在阿里云入手了一台 2核(vCPU)+ 2GiB + 3Mbps 的 ECS，安装了最新的 Rocky Linux release 9.3 (Blue Onyx)，记录一下开箱后的一些基础配置。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;&lt;img alt=&#34;aliyun-99-plan&#34; src=&#34;https://gi.weiyan.tech/2024/03/aliyun-99-plan.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;hostname&#34;&gt;Hostname&lt;a class=&#34;headerlink&#34; href=&#34;#hostname&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;[root@r0sasd1bQi ~]# hostnamectl   # 查看一下当前主机名的情况
[root@r0sasd1bQi ~]# hostnamectl set-hostname shen-server --static
[root@r0sasd1bQi ~]# hostnamectl status
[root@r0sasd1bQi ~]# reboot now    # 重启服务器
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;创建新用户&#34;&gt;创建新用户&lt;a class=&#34;headerlink&#34; href=&#34;#创建新用户&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;使用 &lt;code&gt;adduser&lt;/code&gt; 命令将新用户添加到系统中：
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;adduser&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;shenweiyan&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 创建新用户&lt;/span&gt;
passwd&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;shenweiyan&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 修改密码&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;h2 id=&#34;用户添加超级权限&#34;&gt;用户添加超级权限&lt;a class=&#34;headerlink&#34; href=&#34;#用户添加超级权限&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;把 &lt;code&gt;shenweiyan&lt;/code&gt; 用户添加超级权限（&lt;code&gt;/etc/sudoers&lt;/code&gt;）：
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;shenweiyan      ALL=(ALL)       NOPASSWD: ALL
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;h2 id=&#34;自定义快捷方式&#34;&gt;自定义快捷方式&lt;a class=&#34;headerlink&#34; href=&#34;#自定义快捷方式&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;在 &lt;code&gt;~/.bashrc&lt;/code&gt; 最后新增一下用户自定义的快捷方式。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;# User Specific Alias
alias disp=&amp;#39;display&amp;#39;
alias rm=&amp;#39;rm -i&amp;#39;
alias la=&amp;#39;ls -al&amp;#39;
alias ll=&amp;#39;ls -lh&amp;#39;
alias le=&amp;#39;less -S&amp;#39;

# Custom History setting
# HISTFILESIZE 定义了在 .bash_history 中保存命令的记录总数
HISTFILESIZE=3000000
# HISTSIZE 定义了 history 命令输出的记录数
HISTSIZE=3000
# 定义 History 输出格式
export HISTTIMEFORMAT=&amp;#39;%F %T &amp;#39;
# 使用 HISTCONTROL 从命令历史中剔除连续重复的条目
HISTCONTROL=ignoredups
# 将 bash 内存中历史命令追加到 .bash_history 历史命令文件中， 默认只有退出 shell 是才会保存
PROMPT_COMMAND=&amp;quot;history -a&amp;quot;

# Login Style
PS1=&amp;#39;\033[35;1m\u@\h \[\e[m\]\t \[\033[36;1m\]$(pwd) \n$ \[\e[m\]&amp;#39;
clear;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;epel-release&#34;&gt;epel-release&lt;a class=&#34;headerlink&#34; href=&#34;#epel-release&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;企业版 Linux 附加软件包（Extra Packages for Enterprise Linux，以下简称 EPEL）是一个 Fedora 特别兴趣小组，用以创建、维护以及管理针对企业版 Linux 的一个高质量附加软件包集，面向的对象包括但不限于 &lt;a href=&#34;https://fedoraproject.org/wiki/Red_Hat_Enterprise_Linux/zh-cn&#34;&gt;红帽企业版 Linux (RHEL)&lt;/a&gt;、 CentOS、Scientific Linux (SL)、Oracle Linux (OL) 。&lt;/p&gt;
&lt;p&gt;参考：&lt;a href=&#34;https://fedoraproject.org/wiki/EPEL/zh-cn&#34;&gt;EPEL/zh-cn - Fedora Project Wiki&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 下面两个命令都可以安装&lt;/span&gt;
sudo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;dnf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;epel-release
sudo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;dnf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;htop-和-btop&#34;&gt;Htop 和 Btop&lt;a class=&#34;headerlink&#34; href=&#34;#htop-和-btop&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://htop.dev/&#34;&gt;Htop&lt;/a&gt; 是一个基于 C 编写的跨平台的交互式流程查看器，&lt;code&gt;htop&lt;/code&gt; 是 &lt;code&gt;top&lt;/code&gt; 的一个增强替代品，提供了更加友好的用户界面和更多的功能，相比系统自带的 &lt;code&gt;top&lt;/code&gt; 更加直观好用。 &lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;sudo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;dnf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;htop
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;code&gt;btop&lt;/code&gt; 也是一个改进版的 Linux top 命令，这个命令不仅列出了各种系统使用情况，包括内存、磁盘、网络和进程，而且还允许与鼠标互动。即使是在服务器安装上，你也可以在 &lt;code&gt;btop&lt;/code&gt; 上指指点点，以树形方式查看进程，隐藏或显示某些显示，并访问选项菜单，在那里你可以调整显示的外观和感觉。
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;sudo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;dnf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;btop
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;h2 id=&#34;docker-安装与使用&#34;&gt;Docker 安装与使用&lt;a class=&#34;headerlink&#34; href=&#34;#docker-安装与使用&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;主要参考《&lt;a href=&#34;https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-rocky-linux-9&#34;&gt;How To Install and Use Docker on Rocky Linux 9&lt;/a&gt;》，具体步骤如下：     &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;add the official Docker repository
  &lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;sudo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;dnf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;config-manager&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--add-repo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://download.docker.com/linux/centos/docker-ce.repo
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;install Docker
  &lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;sudo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;dnf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;docker-ce&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;docker-ce-cli&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;containerd.io
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;start the Docker daemon
  &lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;sudo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;systemctl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;start&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;docker
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Verify that it’s running
  &lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;sudo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;systemctl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;status&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;docker
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
  &lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Output
● docker.service - Docker Application Container Engine
   Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
   Active: active (running) since Sun 2016-05-01 06:53:52 CDT; 1 weeks 3 days ago
     Docs: https://docs.docker.com
 Main PID: 749 (docker)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;make sure it starts at every server reboot
  &lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;sudo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;systemctl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;enable&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;docker
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;配置非 root 用户使用 Docker
  &lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;sudo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;usermod&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-aG&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;docker&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;username
newgrp&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;docker&lt;span class=&#34;w&#34;&gt;                     &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;#更新docker用户组&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;60&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/tech/discussions-60/</link>
      <pubDate>Fri, 08 Mar 2024 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/tech/discussions-60/</guid>
      
    </item>
    
    <item>
      <title>我的随笔和博客</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;我的站点中把&lt;a href=&#34;https://weiyan.cc/note/&#34;&gt;随笔&lt;/a&gt;和&lt;a href=&#34;https://weiyan.cc/blog/&#34;&gt;博客&lt;/a&gt;分成了两个平行的导航，其实内容是一样的，只是原文托管的平台不一样而已。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;&lt;a href=&#34;https://weiyan.cc/note/&#34;&gt;随笔&lt;/a&gt; 的内容最开始是在语雀的&lt;a href=&#34;https://www.yuque.com/shenweiyan/notebook&#34;&gt;随笔与乱弹&lt;/a&gt;写的，导出来后加到现在的站点中，独立成了现在看到的&lt;a href=&#34;https://weiyan.cc/note/&#34;&gt;随笔&lt;/a&gt;。&lt;a href=&#34;https://weiyan.cc/blog/&#34;&gt;博客&lt;/a&gt; 则是从 2023 年起写在 &lt;a href=&#34;https://github.com/shenweiyan/Knowledge-Garden&#34;&gt;Knowledge-Garden&lt;/a&gt; 的 &lt;a href=&#34;https://github.com/shenweiyan/Knowledge-Garden/discussions/&#34;&gt;discussions&lt;/a&gt; 上的一些非技术相关杂文。&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;59&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-59/</link>
      <pubDate>Mon, 04 Mar 2024 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-59/</guid>
      
    </item>
    
    <item>
      <title>如今迈步从头越</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;2024 年应该是不太平凡的一年，农历新年后经历了很多的事情，生活也好工作也好，都不太平静。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;尤其对于工作而言，有一些更加深入的体会，明白很多人和事都并非表面那么简单。职场多年一路走来，曾经的迷茫不解，焦虑，纠结，吐槽，走到最后不由得越来越小心翼翼、如履薄冰。时间实际上是人的积极存在，它不仅是人的生命的尺度，而且是人的发展的空间。总的来说，更加要学会保护好自己，做事情多留点心，多一些思考。    &lt;br /&gt;
&lt;img src=&#39;https://gi.weiyan.tech/2024/08/forest-road.jpg&#39; width=600 alt=&#39;美丽的林间公路风景&#39;&gt;&lt;/p&gt;
&lt;p&gt;人家说，能力也大，责任越大。对于个人职业和工作，更多的是权限越大，责任越大，任何的权限并非是越大越好。&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;58&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-58/</link>
      <pubDate>Tue, 20 Feb 2024 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-58/</guid>
      
    </item>
    
    <item>
      <title>使用 Planemo 进行 Galaxy 工具开发</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2024-02-04&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2024-02-04T00:00:00&#39;&gt;2024-02-04&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2026-03-05&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2026-03-05T10:40:31.447782+00:00&#39;&gt;2026-03-05&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;说明：本文章原文发布于 《&lt;a href=&#34;https://www.yuque.com/shenweiyan/biox/planemo-for-galaxy&#34;&gt;使用 Planemo 进行 Galaxy 工具开发 - 语雀&lt;/a&gt;》，部分内容已更新。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;文章开始前，我们先了解一下 Planemo 到底是个什么东西。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Command-line utilities to assist in developing &lt;a href=&#34;http://galaxyproject.org/&#34;&gt;Galaxy&lt;/a&gt; and &lt;a href=&#34;https://www.commonwl.org/&#34;&gt;Common Workflow Language&lt;/a&gt; artifacts - including tools, workflows, and training materials.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;说白了，Planemo 就是用于 Galaxy 平台工具和 WDL 通用工作流语言相关产品辅助开发的一个命令行工具，这个程序集可以用于工具、流程，以及培训教材的开发。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;h2 id=&#34;安装-planemo&#34;&gt;安装 Planemo&lt;a class=&#34;headerlink&#34; href=&#34;#安装-planemo&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;无论是 pip 还是 conda 都可以安装 Planemo：
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pip&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;planemo
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pip&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-U&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;git+git://github.com/galaxyproject/planemo.git
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;config&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--add&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;channels&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bioconda
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;config&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--add&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;channels&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conda-forge
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;planemo
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;接下来，进入今天的正题，我们来详细介绍一下怎么使用 Planemo 进行 Galaxy 工具开发。&lt;/p&gt;
&lt;h2 id=&#34;基础用法&#34;&gt;基础用法&lt;a class=&#34;headerlink&#34; href=&#34;#基础用法&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;本指南将演示如何使用 Heng Li 的 &lt;code&gt;Seqtk&lt;/code&gt; 软件包构建命令工具，该软件包用于处理 FASTA 和 FASTQ 文件中的序列数据。&lt;/p&gt;
&lt;p&gt;首先，我们需要先安装 &lt;code&gt;Seqtk&lt;/code&gt; 。在这里，我们使用 &lt;code&gt;conda&lt;/code&gt; 来安装 &lt;code&gt;Seqtk&lt;/code&gt; (你也可以使用其他的方法安装)。
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--force&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--yes&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-c&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conda-forge&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-c&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bioconda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;seqtk&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.2
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;seqtk&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;installation&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;...
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;seqtk&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;seq
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;Usage:&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;seqtk&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;seq&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;options&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;lt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;.fq&amp;gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&amp;lt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;.fa&amp;gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;Options:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-q&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;INT&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;mask&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bases&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;quality&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;lower&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;than&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;INT&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;                 &lt;/span&gt;-X&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;INT&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;mask&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bases&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;quality&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;higher&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;than&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;INT&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;                 &lt;/span&gt;-n&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;CHAR&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;masked&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bases&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;converted&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;CHAR&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;lowercase&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;                 &lt;/span&gt;-l&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;INT&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;number&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;residues&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;per&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;line&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;^32-1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;                 &lt;/span&gt;-Q&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;INT&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;quality&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;shift:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ASCII-INT&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;gives&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;base&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;quality&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;33&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;                 &lt;/span&gt;-s&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;INT&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;random&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;seed&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;effective&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-f&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;11&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;                 &lt;/span&gt;-f&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FLOAT&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;sample&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FLOAT&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;fraction&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sequences&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;                 &lt;/span&gt;-M&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FILE&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;mask&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;regions&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;BED&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;or&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;name&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;list&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FILE&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;null&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;                 &lt;/span&gt;-L&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;INT&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;drop&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sequences&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;length&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;shorter&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;than&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;INT&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;                 &lt;/span&gt;-c&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;mask&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;complement&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;region&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;effective&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-M&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;                 &lt;/span&gt;-r&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;reverse&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;complement
&lt;span class=&#34;w&#34;&gt;                 &lt;/span&gt;-A&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;force&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FASTA&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;output&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;discard&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;quality&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;                 &lt;/span&gt;-C&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;drop&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;comments&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;at&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;header&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;lines
&lt;span class=&#34;w&#34;&gt;                 &lt;/span&gt;-N&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;drop&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sequences&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;containing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ambiguous&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bases
&lt;span class=&#34;w&#34;&gt;                 &lt;/span&gt;-1&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;output&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;2n-1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;reads&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;only
&lt;span class=&#34;w&#34;&gt;                 &lt;/span&gt;-2&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;output&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;2n&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;reads&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;only
&lt;span class=&#34;w&#34;&gt;                 &lt;/span&gt;-V&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;shift&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;quality&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;by&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;(-Q) - 33&amp;#39;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
接下来，我们将下载一个 FASTQ 示例文件，并测试一个简单的 Seqtk 命令 &lt;code&gt;seq&lt;/code&gt; ，该命令将 FASTQ 文件转换为 FASTA。
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;wget&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://raw.githubusercontent.com/galaxyproject/galaxy-test-data/master/2.fastq
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;seqtk&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;seq&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-A&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;.fastq&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;.fasta
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;cat&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;.fasta
&amp;gt;EAS54_6_R1_2_1_413_324
CCCTTCTTGTCTTCAGCGTTTCTCC
&amp;gt;EAS54_6_R1_2_1_540_792
TTGGCAGGCCAAGGCCGATGGATCA
&amp;gt;EAS54_6_R1_2_1_443_348
GTTGCTTCTGGCGTGGGTGGGGGGG
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
有关功能齐全的 Seqtk 包封装，可以在 GitHub 上查看 &lt;a href=&#34;https://github.com/galaxyproject/tools-iuc/tree/master/tools/seqtk&#34;&gt;Helena Rasche&amp;rsquo;s wrappers&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;Galaxy 工具文件只是 XML 文件，因此此时可以打开文本编辑器并开始编写工具。Planemo 有一个命令 &lt;code&gt;tool_init&lt;/code&gt; 可以快速生成一些样板 XML，因此首先开始。
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;planemo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tool_init&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--id&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;seqtk_seq&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--name&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Convert to FASTA (seqtk)&amp;#39;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;code&gt;tool_init&lt;/code&gt; 命令可以采用各种复杂的参数，但如上面展示的 &lt;code&gt;--id&lt;/code&gt; 和 &lt;code&gt;--name&lt;/code&gt; 是其中两个最基本的参数。每个 Galaxy 工具都需要一个 ID（这是 Galaxy 自身用来标识该工具的简短标识符）和一个名称（此名称会显示给 Galaxy 用户，并且应该是该工具的简短描述）。工具名称可以包含空格，但其 ID 不能包含空格。&lt;/p&gt;
&lt;p&gt;上面的命令将生成一个 seqtk_seq.xml 文件，这个文件看起来像这样：
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;tool&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;id=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;seqtk_seq&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;Convert to FASTA (seqtk)&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;version=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;0.1.0&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;python_template_version=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;3.5&amp;quot;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;requirements&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/requirements&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;command&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;detect_errors=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;exit_code&amp;quot;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;&amp;lt;![CDATA[&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;        TODO: Fill in command template.&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;    ]]&amp;gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/command&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;inputs&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/inputs&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;outputs&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/outputs&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;help&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;&amp;lt;![CDATA[&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;        TODO: Fill in help.&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;    ]]&amp;gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/help&amp;gt;&lt;/span&gt;
&lt;span class=&#34;nt&#34;&gt;&amp;lt;/tool&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
这个生成的模板 XML 文件具有了 Galaxy 工具所需的公共部分内容，但你仍然需要打开编辑器并填写命令模板、输入参数描述、工具输出信息、帮助部分信息等。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;tool_init&lt;/code&gt; 命令也可以做得更好。 们可以使用在 &lt;code&gt;seqtk seq -a 2.fastq&amp;gt; 2.fasta&lt;/code&gt; 上面尝试过的测试命令作为示例，通过指定输入和输出来生成命令块，如下所示。
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;planemo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tool_init&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--force&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;                    &lt;/span&gt;--id&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;seqtk_seq&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;                    &lt;/span&gt;--name&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Convert to FASTA (seqtk)&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;                    &lt;/span&gt;--requirement&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;seqtk@1.2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;                    &lt;/span&gt;--example_command&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;seqtk seq -a 2.fastq &amp;gt; 2.fasta&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;                    &lt;/span&gt;--example_input&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;.fastq&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;                    &lt;/span&gt;--example_output&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;.fasta
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
这将生成以下 XML 文件- 该文件具有正确的输入和输出定义以及实际的命令模板。
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;tool&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;id=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;seqtk_seq&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;Convert to FASTA (seqtk)&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;version=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;0.1.0&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;python_template_version=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;3.5&amp;quot;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;requirements&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;requirement&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;type=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;package&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;version=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;1.2&amp;quot;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;seqtk&lt;span class=&#34;nt&#34;&gt;&amp;lt;/requirement&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/requirements&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;command&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;detect_errors=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;exit_code&amp;quot;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;&amp;lt;![CDATA[&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;        seqtk seq -a &amp;#39;$input1&amp;#39; &amp;gt; &amp;#39;$output1&amp;#39;&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;    ]]&amp;gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/command&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;inputs&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;param&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;type=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;data&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;input1&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;format=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;fastq&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/inputs&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;outputs&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;data&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;output1&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;format=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;fasta&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/outputs&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;help&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;&amp;lt;![CDATA[&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;        TODO: Fill in help.&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;    ]]&amp;gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/help&amp;gt;&lt;/span&gt;
&lt;span class=&#34;nt&#34;&gt;&amp;lt;/tool&amp;gt;&lt;/span&gt;(
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
如本节开头所示，命令 &lt;code&gt;seqtk seq&lt;/code&gt; 会为 &lt;code&gt;seq&lt;/code&gt; 命令生成帮助消息。 &lt;code&gt;tool_init&lt;/code&gt; 可以获取该帮助消息，并使用 &lt;code&gt;help_from_command&lt;/code&gt; 选项将其正确粘贴在生成的工具 XML 文件中。&lt;/p&gt;
&lt;p&gt;通常，命令帮助消息并不完全适用于工具，因为它们会提到参数名称和由工具抽象出来的类似细节，但它们可能是一个很好的起点。&lt;/p&gt;
&lt;p&gt;以下 Planemo 的 &lt;code&gt;tool_init&lt;/code&gt; 的调用已增强为使用 &lt;code&gt;--help_from_command&lt;/code&gt;。
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;planemo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tool_init&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--force&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;                    &lt;/span&gt;--id&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;seqtk_seq&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;                    &lt;/span&gt;--name&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Convert to FASTA (seqtk)&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;                    &lt;/span&gt;--requirement&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;seqtk@1.2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;                    &lt;/span&gt;--example_command&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;seqtk seq -a 2.fastq &amp;gt; 2.fasta&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;                    &lt;/span&gt;--example_input&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;.fastq&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;                    &lt;/span&gt;--example_output&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;.fasta&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;                    &lt;/span&gt;--test_case&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;                    &lt;/span&gt;--cite_url&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;https://github.com/lh3/seqtk&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;                    &lt;/span&gt;--help_from_command&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;seqtk seq&amp;#39;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;除了演示 &lt;code&gt;--help_from_command&lt;/code&gt; 之外，这还演示了使用 &lt;code&gt;--test_case&lt;/code&gt; 从我们的示例生成测试用例并为基础工具添加引用。生成的工具 XML 文件为：
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;tool&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;id=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;seqtk_seq&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;Convert to FASTA (seqtk)&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;version=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;0.1.0&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;python_template_version=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;3.5&amp;quot;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;requirements&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;requirement&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;type=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;package&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;version=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;1.2&amp;quot;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;seqtk&lt;span class=&#34;nt&#34;&gt;&amp;lt;/requirement&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/requirements&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;command&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;detect_errors=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;exit_code&amp;quot;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;&amp;lt;![CDATA[&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;        seqtk seq -a &amp;#39;$input1&amp;#39; &amp;gt; &amp;#39;$output1&amp;#39;&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;    ]]&amp;gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/command&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;inputs&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;param&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;type=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;data&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;input1&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;format=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;fastq&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/inputs&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;outputs&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;data&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;output1&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;format=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;fasta&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/outputs&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;tests&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;test&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;param&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;input1&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;value=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;2.fastq&amp;quot;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;output&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;output1&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;file=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;2.fasta&amp;quot;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/test&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/tests&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;help&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;&amp;lt;![CDATA[&lt;/span&gt;

&lt;span class=&#34;cp&#34;&gt;Usage:   seqtk seq [options] &amp;lt;in.fq&amp;gt;|&amp;lt;in.fa&amp;gt;&lt;/span&gt;

&lt;span class=&#34;cp&#34;&gt;Options: -q INT    mask bases with quality lower than INT [0]&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -X INT    mask bases with quality higher than INT [255]&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -n CHAR   masked bases converted to CHAR; 0 for lowercase [0]&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -l INT    number of residues per line; 0 for 2^32-1 [0]&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -Q INT    quality shift: ASCII-INT gives base quality [33]&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -s INT    random seed (effective with -f) [11]&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -f FLOAT  sample FLOAT fraction of sequences [1]&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -M FILE   mask regions in BED or name list FILE [null]&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -L INT    drop sequences with length shorter than INT [0]&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -c        mask complement region (effective with -M)&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -r        reverse complement&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -A        force FASTA output (discard quality)&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -C        drop comments at the header lines&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -N        drop sequences containing ambiguous bases&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -1        output the 2n-1 reads only&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -2        output the 2n reads only&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -V        shift quality by &amp;#39;(-Q) - 33&amp;#39;&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -U        convert all bases to uppercases&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -S        strip of white spaces in sequences&lt;/span&gt;


&lt;span class=&#34;cp&#34;&gt;    ]]&amp;gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/help&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;citations&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;citation&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;type=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;bibtex&amp;quot;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
@misc{githubseqtk,
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;author&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;=&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;{LastTODO,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FirstTODO},
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;year&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;=&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;{TODO},
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;title&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;=&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;{seqtk},
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;publisher&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;=&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;{GitHub},
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;journal&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;=&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;{GitHub&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;repository},
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;url&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;=&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;{https://github.com/lh3/seqtk},
}&lt;span class=&#34;nt&#34;&gt;&amp;lt;/citation&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/citations&amp;gt;&lt;/span&gt;
&lt;span class=&#34;nt&#34;&gt;&amp;lt;/tool&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;至此，我们有了一个功能相当齐全的 Galaxy 工具，它带有测试和帮助。这是一个非常简单的示例——通常，您需要在工具中投入更多工作才能实现这一点， &lt;code&gt;tool_init&lt;/code&gt; 实际上只是为了让您入门而设计的。&lt;/p&gt;
&lt;p&gt;现在让我们检查并测试我们开发的工具。Planemo的 &lt;code&gt;lint&lt;/code&gt;（或仅 &lt;code&gt;l&lt;/code&gt; ）命令将检查工具的 XML 有效性，检查是否有明显的错误以及是否符合 IUC 的最佳做法。
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;planemo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;l
Linting&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tool&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/opt/galaxy/tools/seqtk_seq.xml
Applying&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;linter&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tests...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;CHECK
..&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;CHECK:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;test&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;s&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;found.
Applying&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;linter&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;output...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;CHECK
..&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;INFO:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;outputs&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;found.
Applying&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;linter&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;inputs...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;CHECK
..&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;INFO:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Found&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;input&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;parameters.
Applying&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;linter&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;help...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;CHECK
..&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;CHECK:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Tool&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;contains&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;help&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;section.
..&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;CHECK:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Help&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;contains&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;valid&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;reStructuredText.
Applying&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;linter&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;general...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;CHECK
..&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;CHECK:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Tool&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;defines&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;a&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;version&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;.1.0&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;.
..&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;CHECK:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Tool&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;defines&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;a&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;name&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;Convert&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FASTA&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;seqtk&lt;span class=&#34;o&#34;&gt;)]&lt;/span&gt;.
..&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;CHECK:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Tool&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;defines&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;an&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;id&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;seqtk_seq&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;.
..&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;CHECK:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Tool&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;targets&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;16&lt;/span&gt;.01&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Galaxy&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;profile.
Applying&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;linter&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;command...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;CHECK
..&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;INFO:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Tool&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;contains&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;a&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;command.
Applying&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;linter&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;citations...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;CHECK
..&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;CHECK:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Found&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;likely&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;valid&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;citations.
Applying&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;linter&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tool_xsd...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;CHECK
..&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;INFO:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;File&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;validates&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;against&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;XML&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;schema.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
默认情况下， &lt;code&gt;lint&lt;/code&gt; 会在您当前的工作目录中找到所有工具，但是我们可以使用 &lt;code&gt;planemo lint seqtk_seq.xml&lt;/code&gt; 指定一个特定的工具。&lt;/p&gt;
&lt;p&gt;接下来，我们可以使用 &lt;code&gt;test&lt;/code&gt;（或仅执行 &lt;code&gt;t&lt;/code&gt; ）命令运行工具的功能测试。这将打印很多输出（因为它启动了 Galaxy 实例），但最终应该显示我们通过的一项测试。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;如果你的服务器已经安装了 Galaxy 实例，你可以编辑 ~/.planemo.yml 文件，指定 Galaxy 实例路径。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;## Specify a default galaxy_root for the `test` and `serve` commands here.&lt;/span&gt;
&lt;span class=&#34;nt&#34;&gt;galaxy_root&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l l-Scalar l-Scalar-Plain&#34;&gt;/home/user/galaxy&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;完整的 &lt;code&gt;~/.planemo.yml&lt;/code&gt; 示例，参考：&lt;a href=&#34;https://planemo.readthedocs.io/en/latest/configuration.html&#34;&gt;https://planemo.readthedocs.io/en/latest/configuration.html&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;planemo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;t
...
All&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;test&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;s&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;executed&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;passed.
seqtk_seq&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;passed
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
除了在控制台中将测试结果显示为红色（失败）或绿色（通过）外，Planemo 还默认为测试结果创建 HTML 报告。 还有更多测试报告选项可用，例如 &lt;code&gt;--test_output_xunit&lt;/code&gt;，在某些持续集成环境中很有用。有关更多选项，请参见 &lt;code&gt;planemo test --help&lt;/code&gt; ，以及 &lt;code&gt;test_reports&lt;/code&gt; 命令。&lt;/p&gt;
&lt;p&gt;现在，我们可以使用 &lt;code&gt;serve&lt;/code&gt;（或仅使用 &lt;code&gt;s&lt;/code&gt; ）命令打开 Galaxy。
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;planemo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;s
...
serving&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;on&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;http://127.0.0.1:9090
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;在网络浏览器中打开 &lt;a href=&#34;http://127.0.0.1:9090&#34;&gt;http://127.0.0.1:9090&lt;/a&gt; 以查看您的新工具。&lt;/p&gt;
&lt;p&gt;服务和测试可以通过各种命令行参数传递，例如 &lt;code&gt;--galaxy_root&lt;/code&gt;，以指定要使用的 Galaxy 实例（默认情况下，planemo 将仅为 planemo 下载和管理实例）。&lt;/p&gt;
&lt;h2 id=&#34;简单参数&#34;&gt;简单参数&lt;a class=&#34;headerlink&#34; href=&#34;#简单参数&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;我们为 &lt;code&gt;seqtk seq&lt;/code&gt; 命令构建了一个工具包的封装，但是该工具实际上具有我们可能希望向 Galaxy 用户公开的其他选项。&lt;/p&gt;
&lt;p&gt;让我们从 &lt;code&gt;help&lt;/code&gt; 命令中获取一些参数，并构建 Galaxy 的 &lt;code&gt;param&lt;/code&gt; 块以粘贴到该工具的 &lt;code&gt;input&lt;/code&gt; 块中。
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;-V&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;shift&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;quality&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;by&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;(-Q) - 33&amp;#39;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;在上一节中，我们看到了输入文件在 &lt;code&gt;param&lt;/code&gt; 块中是一个 &lt;code&gt;data&lt;/code&gt; 的类型，除此之外我们还可以使用许多不同种类的参数。如标志参数（例如以上 &lt;code&gt;-V&lt;/code&gt; 参数），通常在 Galaxy 工具的 XML 文件中由 &lt;code&gt;boolean&lt;/code&gt; 来表示。
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;param&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;shift_quality&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;type=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;boolean&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;label=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;Shift quality&amp;quot;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;truevalue=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;-V&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;falsevalue=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;&amp;quot;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;help=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;shift quality by &amp;#39;(-Q) - 33&amp;#39; (-V)&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
然后，我们可以将 &lt;code&gt;$shift_quality&lt;/code&gt; 粘贴在 &lt;code&gt;command&lt;/code&gt; 块中，如果用户选择了此选项，它将扩展为 &lt;code&gt;-V&lt;/code&gt; （因为我们已将其定义为 &lt;code&gt;truevalue&lt;/code&gt; ）。如果用户未选择此选项，则 &lt;code&gt;$shift_quality&lt;/code&gt; 将仅扩展为空字符串，而不会影响生成的命令行。&lt;/p&gt;
&lt;p&gt;现在考虑以下的 &lt;code&gt;seqtk seq&lt;/code&gt; 参数：
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;-q&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;INT&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;mask&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bases&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;quality&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;lower&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;than&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;INT&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
-X&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;INT&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;mask&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bases&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;quality&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;higher&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;than&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;INT&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;这些可以转换为 Galaxy 参数，如下所示：
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;param&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;quality_min&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;type=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;integer&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;label=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;Mask bases with quality lower than&amp;quot;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;value=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;0&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;min=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;0&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;max=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;255&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;help=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;(-q)&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&#34;nt&#34;&gt;&amp;lt;param&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;quality_max&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;type=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;integer&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;label=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;Mask bases with quality higher than&amp;quot;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;value=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;255&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;min=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;0&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;max=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;255&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;help=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;(-X)&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;这些可以作为 &lt;code&gt;-q $quality_min -X $quality_max&lt;/code&gt; 添加到命令标签中。&lt;/p&gt;
&lt;p&gt;此时，该工具将如下所示：
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;tool&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;id=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;seqtk_seq&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;Convert to FASTA (seqtk)&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;version=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;0.1.0&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;python_template_version=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;3.5&amp;quot;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;requirements&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;requirement&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;type=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;package&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;version=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;1.2&amp;quot;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;seqtk&lt;span class=&#34;nt&#34;&gt;&amp;lt;/requirement&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/requirements&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;command&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;detect_errors=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;exit_code&amp;quot;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;&amp;lt;![CDATA[&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;        seqtk seq&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;              $shift_quality&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;              -q $quality_min&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;              -X $quality_max&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;              -a &amp;#39;$input1&amp;#39; &amp;gt; &amp;#39;$output1&amp;#39;&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;    ]]&amp;gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/command&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;inputs&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;param&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;type=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;data&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;input1&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;format=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;fastq&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;param&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;shift_quality&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;type=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;boolean&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;label=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;Shift quality&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;               &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;truevalue=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;-V&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;falsevalue=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;&amp;quot;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;               &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;help=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;shift quality by &amp;#39;(-Q) - 33&amp;#39; (-V)&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;param&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;quality_min&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;type=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;integer&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;label=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;Mask bases with quality lower than&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;               &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;value=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;0&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;min=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;0&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;max=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;255&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;help=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;(-q)&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;param&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;quality_max&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;type=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;integer&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;label=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;Mask bases with quality higher than&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;               &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;value=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;255&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;min=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;0&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;max=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;255&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;help=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;(-X)&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/inputs&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;outputs&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;data&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;output1&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;format=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;fasta&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/outputs&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;tests&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;test&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;param&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;input1&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;value=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;2.fastq&amp;quot;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;output&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;output1&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;file=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;2.fasta&amp;quot;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/test&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/tests&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;help&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;&amp;lt;![CDATA[&lt;/span&gt;

&lt;span class=&#34;cp&#34;&gt;Usage:   seqtk seq [options] &amp;lt;in.fq&amp;gt;|&amp;lt;in.fa&amp;gt;&lt;/span&gt;

&lt;span class=&#34;cp&#34;&gt;Options: -q INT    mask bases with quality lower than INT [0]&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -X INT    mask bases with quality higher than INT [255]&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -n CHAR   masked bases converted to CHAR; 0 for lowercase [0]&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -l INT    number of residues per line; 0 for 2^32-1 [0]&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -Q INT    quality shift: ASCII-INT gives base quality [33]&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -s INT    random seed (effective with -f) [11]&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -f FLOAT  sample FLOAT fraction of sequences [1]&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -M FILE   mask regions in BED or name list FILE [null]&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -L INT    drop sequences with length shorter than INT [0]&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -c        mask complement region (effective with -M)&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -r        reverse complement&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -A        force FASTA output (discard quality)&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -C        drop comments at the header lines&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -N        drop sequences containing ambiguous bases&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -1        output the 2n-1 reads only&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -2        output the 2n reads only&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -V        shift quality by &amp;#39;(-Q) - 33&amp;#39;&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -U        convert all bases to uppercases&lt;/span&gt;


&lt;span class=&#34;cp&#34;&gt;    ]]&amp;gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/help&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;citations&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;citation&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;type=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;bibtex&amp;quot;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
@misc{githubseqtk,
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;author&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;=&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;{LastTODO,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FirstTODO},
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;year&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;=&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;{TODO},
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;title&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;=&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;{seqtk},
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;publisher&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;=&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;{GitHub},
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;journal&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;=&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;{GitHub&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;repository},
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;url&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;=&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;{https://github.com/lh3/seqtk},
}&lt;span class=&#34;nt&#34;&gt;&amp;lt;/citation&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/citations&amp;gt;&lt;/span&gt;
&lt;span class=&#34;nt&#34;&gt;&amp;lt;/tool&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;h2 id=&#34;条件参数&#34;&gt;条件参数&lt;a class=&#34;headerlink&#34; href=&#34;#条件参数&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;以前的参数很简单，因为它们总是出现，现在考虑一下下面的参数。
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;-M&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FILE&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;mask&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;regions&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;BED&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;or&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;name&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;list&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FILE&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;null&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;我们可以通过添加属性 &lt;code&gt;optional =&#34;true&#34;&lt;/code&gt; 将该数据类型参数标记为可选。
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;param&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;mask_regions&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;type=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;data&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;label=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;Mask regions in BED&amp;quot;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;format=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;bed&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;help=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;(-M)&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;optional=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;true&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;然后，不仅可以直接在命令块中使用 &lt;code&gt;$mask_regions&lt;/code&gt;，还可以将其包装在 &lt;code&gt;if&lt;/code&gt; 语句中（因为工具 XML 文件支持 &lt;a href=&#34;https://cheetahtemplate.org/users_guide/index.html&#34;&gt;Cheetah&lt;/a&gt;）。
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;#if&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;$mask_regions
-M&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;#39;$mask_regions&amp;#39;
#end&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;if
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;接着，我们考虑这一组参数：
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;-s&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;INT&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;random&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;seed&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;effective&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-f&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;11&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
-f&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FLOAT&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;sample&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FLOAT&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;fraction&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sequences&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;在这种情况下，只有在设置了样本参数的情况下，才能看到或使用 &lt;code&gt;-s&lt;/code&gt; 随机种子参数。我们可以使用 &lt;code&gt;conditional&lt;/code&gt; 条件块来表达这一点。
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;conditional&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;sample&amp;quot;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;param&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;sample_selector&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;type=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;boolean&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;label=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;Sample fraction of sequences&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;when&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;value=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;true&amp;quot;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;param&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;fraction&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;label=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;Fraction&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;type=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;float&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;value=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;1.0&amp;quot;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;               &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;help=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;(-f)&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;param&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;seed&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;label=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;Random seed&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;type=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;integer&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;value=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;11&amp;quot;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;               &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;help=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;(-s)&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/when&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;when&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;value=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;false&amp;quot;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/when&amp;gt;&lt;/span&gt;
&lt;span class=&#34;nt&#34;&gt;&amp;lt;/conditional&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;在命令块中，我们可以再次使用 &lt;code&gt;if&lt;/code&gt; 语句包括这些参数。
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;#if&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;$sample.sample_selector
-f&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;$sample.fraction&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-s&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;$sample.seed
#end&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;if
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;注意，我们必须使用 &lt;code&gt;sample.&lt;/code&gt; 的前缀来引用这个参数，因为它们是在 &lt;code&gt;sample&lt;/code&gt; 的条件块内定义的。&lt;/p&gt;
&lt;p&gt;现在该工具的最新版本如下：
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;tool&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;id=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;seqtk_seq&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;Convert to FASTA (seqtk)&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;version=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;0.1.0&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;python_template_version=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;3.5&amp;quot;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;requirements&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;requirement&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;type=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;package&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;version=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;1.2&amp;quot;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;seqtk&lt;span class=&#34;nt&#34;&gt;&amp;lt;/requirement&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/requirements&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;command&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;detect_errors=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;exit_code&amp;quot;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;&amp;lt;![CDATA[&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;        seqtk seq&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;              $shift_quality&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;              -q $quality_min&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;              -X $quality_max&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;              #if $mask_regions&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;                  -M &amp;#39;$mask_regions&amp;#39;&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;              #end if&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;              #if $sample.sample&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;                  -f $sample.fraction&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;                  -s $sample.seed&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;              #end if&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;              -a &amp;#39;$input1&amp;#39; &amp;gt; &amp;#39;$output1&amp;#39;&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;    ]]&amp;gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/command&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;inputs&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;param&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;type=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;data&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;input1&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;format=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;fastq&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;param&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;shift_quality&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;type=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;boolean&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;label=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;Shift quality&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;               &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;truevalue=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;-V&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;falsevalue=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;&amp;quot;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;               &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;help=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;shift quality by &amp;#39;(-Q) - 33&amp;#39; (-V)&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;param&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;quality_min&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;type=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;integer&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;label=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;Mask bases with quality lower than&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;               &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;value=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;0&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;min=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;0&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;max=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;255&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;help=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;(-q)&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;param&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;quality_max&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;type=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;integer&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;label=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;Mask bases with quality higher than&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;               &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;value=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;255&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;min=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;0&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;max=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;255&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;help=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;(-X)&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;param&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;mask_regions&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;type=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;data&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;label=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;Mask regions in BED&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;               &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;format=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;bed&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;help=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;(-M)&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;optional=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;true&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;conditional&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;sample&amp;quot;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;param&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;sample&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;type=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;boolean&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;label=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;Sample fraction of sequences&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;when&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;value=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;true&amp;quot;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;param&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;fraction&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;label=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;Fraction&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;type=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;float&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;value=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;1.0&amp;quot;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;                       &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;help=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;(-f)&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;param&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;seed&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;label=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;Random seed&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;type=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;integer&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;value=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;11&amp;quot;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;                       &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;help=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;(-s)&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/when&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;when&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;value=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;false&amp;quot;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/when&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/conditional&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/inputs&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;outputs&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;data&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;output1&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;format=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;fasta&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/outputs&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;tests&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;test&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;param&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;input1&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;value=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;2.fastq&amp;quot;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;output&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;output1&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;file=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;2.fasta&amp;quot;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/test&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/tests&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;help&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;&amp;lt;![CDATA[&lt;/span&gt;

&lt;span class=&#34;cp&#34;&gt;Usage:   seqtk seq [options] &amp;lt;in.fq&amp;gt;|&amp;lt;in.fa&amp;gt;&lt;/span&gt;

&lt;span class=&#34;cp&#34;&gt;Options: -q INT    mask bases with quality lower than INT [0]&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -X INT    mask bases with quality higher than INT [255]&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -n CHAR   masked bases converted to CHAR; 0 for lowercase [0]&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -l INT    number of residues per line; 0 for 2^32-1 [0]&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -Q INT    quality shift: ASCII-INT gives base quality [33]&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -s INT    random seed (effective with -f) [11]&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -f FLOAT  sample FLOAT fraction of sequences [1]&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -M FILE   mask regions in BED or name list FILE [null]&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -L INT    drop sequences with length shorter than INT [0]&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -c        mask complement region (effective with -M)&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -r        reverse complement&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -A        force FASTA output (discard quality)&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -C        drop comments at the header lines&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -N        drop sequences containing ambiguous bases&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -1        output the 2n-1 reads only&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -2        output the 2n reads only&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -V        shift quality by &amp;#39;(-Q) - 33&amp;#39;&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -U        convert all bases to uppercases&lt;/span&gt;


&lt;span class=&#34;cp&#34;&gt;    ]]&amp;gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/help&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;citations&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;citation&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;type=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;bibtex&amp;quot;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
@misc{githubseqtk,
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;author&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;=&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;{LastTODO,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FirstTODO},
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;year&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;=&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;{TODO},
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;title&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;=&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;{seqtk},
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;publisher&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;=&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;{GitHub},
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;journal&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;=&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;{GitHub&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;repository},
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;url&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;=&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;{https://github.com/lh3/seqtk},
}&lt;span class=&#34;nt&#34;&gt;&amp;lt;/citation&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/citations&amp;gt;&lt;/span&gt;
&lt;span class=&#34;nt&#34;&gt;&amp;lt;/tool&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
对于这样的工具，这些工具有很多选项，但在大多数情况下使用默认值是首选——一个常见的习惯用法是使用条件将参数分为简单部分和高级部分。&lt;/p&gt;
&lt;p&gt;使用惯用法，更新此工具后的 XML 如下所示：
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;tool&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;id=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;seqtk_seq&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;Convert to FASTA (seqtk)&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;version=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;0.1.0&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;python_template_version=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;3.5&amp;quot;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;requirements&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;requirement&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;type=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;package&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;version=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;1.2&amp;quot;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;seqtk&lt;span class=&#34;nt&#34;&gt;&amp;lt;/requirement&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/requirements&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;command&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;detect_errors=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;exit_code&amp;quot;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;&amp;lt;![CDATA[&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;        seqtk seq&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;              #if $settings.advanced == &amp;quot;advanced&amp;quot;&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;                  $settings.shift_quality&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;                  -q $settings.quality_min&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;                  -X $settings.quality_max&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;                  #if $settings.mask_regions&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;                      -M &amp;#39;$settings.mask_regions&amp;#39;&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;                  #end if&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;                  #if $settings.sample.sample&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;                      -f $settings.sample.fraction&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;                      -s $settings.sample.seed&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;                  #end if&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;              #end if&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;              -a &amp;#39;$input1&amp;#39; &amp;gt; &amp;#39;$output1&amp;#39;&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;    ]]&amp;gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/command&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;inputs&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;param&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;type=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;data&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;input1&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;format=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;fastq&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;conditional&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;settings&amp;quot;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;param&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;advanced&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;type=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;select&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;label=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;Specify advanced parameters&amp;quot;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;option&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;value=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;simple&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;selected=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;true&amp;quot;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;No,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;use&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;program&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;defaults.&lt;span class=&#34;nt&#34;&gt;&amp;lt;/option&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;option&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;value=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;advanced&amp;quot;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;Yes,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;see&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;full&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;parameter&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;list.&lt;span class=&#34;nt&#34;&gt;&amp;lt;/option&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;when&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;value=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;simple&amp;quot;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/when&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;when&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;value=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;advanced&amp;quot;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;param&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;shift_quality&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;type=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;boolean&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;label=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;Shift quality&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;                       &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;truevalue=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;-V&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;falsevalue=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;&amp;quot;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;                       &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;help=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;shift quality by &amp;#39;(-Q) - 33&amp;#39; (-V)&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;param&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;quality_min&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;type=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;integer&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;label=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;Mask bases with quality lower than&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;                       &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;value=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;0&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;min=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;0&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;max=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;255&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;help=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;(-q)&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;param&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;quality_max&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;type=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;integer&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;label=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;Mask bases with quality higher than&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;                       &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;value=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;255&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;min=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;0&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;max=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;255&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;help=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;(-X)&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;param&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;mask_regions&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;type=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;data&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;label=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;Mask regions in BED&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;                       &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;format=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;bed&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;help=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;(-M)&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;optional=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;true&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;conditional&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;sample&amp;quot;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;                    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;param&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;sample&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;type=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;boolean&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;label=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;Sample fraction of sequences&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;                    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;when&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;value=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;true&amp;quot;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;                        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;param&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;fraction&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;label=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;Fraction&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;type=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;float&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;value=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;1.0&amp;quot;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;                               &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;help=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;(-f)&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;                        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;param&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;seed&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;label=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;Random seed&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;type=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;integer&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;value=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;11&amp;quot;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;                               &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;help=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;(-s)&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;                    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/when&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;                    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;when&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;value=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;false&amp;quot;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;                    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/when&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/conditional&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/when&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/conditional&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/inputs&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;outputs&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;data&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;output1&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;format=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;fasta&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/outputs&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;tests&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;test&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;param&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;input1&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;value=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;2.fastq&amp;quot;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;output&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;output1&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;file=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;2.fasta&amp;quot;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/test&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/tests&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;help&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;&amp;lt;![CDATA[&lt;/span&gt;

&lt;span class=&#34;cp&#34;&gt;Usage:   seqtk seq [options] &amp;lt;in.fq&amp;gt;|&amp;lt;in.fa&amp;gt;&lt;/span&gt;

&lt;span class=&#34;cp&#34;&gt;Options: -q INT    mask bases with quality lower than INT [0]&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -X INT    mask bases with quality higher than INT [255]&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -n CHAR   masked bases converted to CHAR; 0 for lowercase [0]&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -l INT    number of residues per line; 0 for 2^32-1 [0]&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -Q INT    quality shift: ASCII-INT gives base quality [33]&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -s INT    random seed (effective with -f) [11]&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -f FLOAT  sample FLOAT fraction of sequences [1]&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -M FILE   mask regions in BED or name list FILE [null]&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -L INT    drop sequences with length shorter than INT [0]&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -c        mask complement region (effective with -M)&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -r        reverse complement&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -A        force FASTA output (discard quality)&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -C        drop comments at the header lines&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -N        drop sequences containing ambiguous bases&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -1        output the 2n-1 reads only&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -2        output the 2n reads only&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -V        shift quality by &amp;#39;(-Q) - 33&amp;#39;&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -U        convert all bases to uppercases&lt;/span&gt;


&lt;span class=&#34;cp&#34;&gt;    ]]&amp;gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/help&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;citations&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;citation&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;type=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;bibtex&amp;quot;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
@misc{githubseqtk,
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;author&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;=&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;{LastTODO,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FirstTODO},
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;year&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;=&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;{TODO},
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;title&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;=&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;{seqtk},
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;publisher&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;=&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;{GitHub},
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;journal&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;=&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;{GitHub&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;repository},
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;url&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;=&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;{https://github.com/lh3/seqtk},
}&lt;span class=&#34;nt&#34;&gt;&amp;lt;/citation&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/citations&amp;gt;&lt;/span&gt;
&lt;span class=&#34;nt&#34;&gt;&amp;lt;/tool&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;h2 id=&#34;脚本封装&#34;&gt;脚本封装&lt;a class=&#34;headerlink&#34; href=&#34;#脚本封装&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Tool Shed 上已经提供了许多常见的生物信息学应用程序，因此一项常见的开发任务是将各种复杂程度的脚本集成到 Galaxy 中。&lt;/p&gt;
&lt;p&gt;考虑以下小型 Perl 脚本。
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;ch&#34;&gt;#!/usr/bin/perl -w&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# usage : perl toolExample.pl &amp;lt;FASTA file&amp;gt; &amp;lt;output file&amp;gt;&lt;/span&gt;

&lt;span class=&#34;nb&#34;&gt;open&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;IN&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;&amp;lt;$ARGV[0]&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;open&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;OUT&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;&amp;gt;$ARGV[1]&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;span class=&#34;k&#34;&gt;while&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sr&#34;&gt;&amp;lt;IN&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;chop&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sr&#34;&gt;m/^&amp;gt;/&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;sr&#34;&gt;s/^&amp;gt;//&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;$.&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;OUT&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;sprintf&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;%.3f&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$gc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$length&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;\n&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$gc&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$length&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;else&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$gc&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;while&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;sr&#34;&gt;m/[gc]/ig&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$length&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;length&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$_&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;span class=&#34;k&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;OUT&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;sprintf&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;%.3f&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$gc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$length&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;\n&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;close&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;IN&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;close&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;OUT&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;可以按照以下步骤为此脚本构建 Galaxy 工具，并将脚本与工具 XML 文件本身放在同一目录中。这里的特殊值 &lt;code&gt;$__ tool_directory__&lt;/code&gt; 是指工具（即 xml 文件）所在的目录。
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;tool&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;id=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;gc_content&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;Compute GC content&amp;quot;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;description&amp;gt;&lt;/span&gt;for&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;each&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sequence&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;in&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;a&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file&lt;span class=&#34;nt&#34;&gt;&amp;lt;/description&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;command&amp;gt;&lt;/span&gt;perl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;#39;$__tool_directory__/gc_content.pl&amp;#39;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;#39;$input&amp;#39;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;output.tsv&lt;span class=&#34;nt&#34;&gt;&amp;lt;/command&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;inputs&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;param&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;input&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;type=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;data&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;format=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;fasta&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;label=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;Source file&amp;quot;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/inputs&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;outputs&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;data&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;output&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;format=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;tabular&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;from_work_dir=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;output.tsv&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/outputs&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;help&amp;gt;&lt;/span&gt;
This&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tool&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;computes&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;GC&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;content&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;a&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FASTA&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file.
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/help&amp;gt;&lt;/span&gt;
&lt;span class=&#34;nt&#34;&gt;&amp;lt;/tool&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;h2 id=&#34;macros-宏集&#34;&gt;Macros 宏集&lt;a class=&#34;headerlink&#34; href=&#34;#macros-宏集&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;如果您希望为单个相对简单的应用程序或脚本编写工具，则应跳过本节。如果您希望维护一系列相关工具——经验表明，您将意识到有很多重复的 XML 可以很好地做到这一点。Galaxy工具 XML 宏可以帮助减少这种重复。&lt;/p&gt;
&lt;p&gt;通过使用 &lt;code&gt;--macros&lt;/code&gt; 标志，Planemo 的 &lt;code&gt;tool_init&lt;/code&gt; 命令可用于生成适合工具套件的宏文件。我们看一下以前的 &lt;code&gt;tool_init&lt;/code&gt; 命令的变体（唯一的区别是现在我们添加了 &lt;code&gt;--macros&lt;/code&gt; 标志）。
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;planemo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tool_init&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--force&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;                    &lt;/span&gt;--macros&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;                    &lt;/span&gt;--id&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;seqtk_seq&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;                    &lt;/span&gt;--name&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Convert to FASTA (seqtk)&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;                    &lt;/span&gt;--requirement&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;seqtk@1.2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;                    &lt;/span&gt;--example_command&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;seqtk seq -A 2.fastq &amp;gt; 2.fasta&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;                    &lt;/span&gt;--example_input&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;.fastq&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;                    &lt;/span&gt;--example_output&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;.fasta&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;                    &lt;/span&gt;--test_case&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;                    &lt;/span&gt;--help_from_command&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;seqtk seq&amp;#39;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
这将在当前目录中产生两个文件（ &lt;code&gt;seqtk_seq.xml&lt;/code&gt; 和 &lt;code&gt;macros.xml&lt;/code&gt;），而不是一个。
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;tool&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;id=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;seqtk_seq&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;Convert to FASTA (seqtk)&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;version=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;0.1.0&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;python_template_version=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;3.5&amp;quot;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;macros&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;import&amp;gt;&lt;/span&gt;macros.xml&lt;span class=&#34;nt&#34;&gt;&amp;lt;/import&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/macros&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;expand&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;macro=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;requirements&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;command&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;detect_errors=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;exit_code&amp;quot;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;&amp;lt;![CDATA[&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;        seqtk seq -A &amp;#39;$input1&amp;#39; &amp;gt; &amp;#39;$output1&amp;#39;&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;    ]]&amp;gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/command&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;inputs&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;param&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;type=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;data&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;input1&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;format=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;fastq&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/inputs&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;outputs&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;data&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;output1&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;format=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;fasta&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/outputs&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;tests&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;test&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;param&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;input1&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;value=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;2.fastq&amp;quot;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;output&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;output1&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;file=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;2.fasta&amp;quot;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/test&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/tests&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;help&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;&amp;lt;![CDATA[&lt;/span&gt;

&lt;span class=&#34;cp&#34;&gt;Usage:   seqtk seq [options] &amp;lt;in.fq&amp;gt;|&amp;lt;in.fa&amp;gt;&lt;/span&gt;

&lt;span class=&#34;cp&#34;&gt;Options: -q INT    mask bases with quality lower than INT [0]&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -X INT    mask bases with quality higher than INT [255]&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -n CHAR   masked bases converted to CHAR; 0 for lowercase [0]&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -l INT    number of residues per line; 0 for 2^32-1 [0]&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -Q INT    quality shift: ASCII-INT gives base quality [33]&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -s INT    random seed (effective with -f) [11]&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -f FLOAT  sample FLOAT fraction of sequences [1]&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -M FILE   mask regions in BED or name list FILE [null]&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -L INT    drop sequences with length shorter than INT [0]&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -c        mask complement region (effective with -M)&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -r        reverse complement&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -A        force FASTA output (discard quality)&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -C        drop comments at the header lines&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -N        drop sequences containing ambiguous bases&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -1        output the 2n-1 reads only&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -2        output the 2n reads only&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -V        shift quality by &amp;#39;(-Q) - 33&amp;#39;&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -U        convert all bases to uppercases&lt;/span&gt;
&lt;span class=&#34;cp&#34;&gt;         -S        strip of white spaces in sequences&lt;/span&gt;


&lt;span class=&#34;cp&#34;&gt;    ]]&amp;gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/help&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;expand&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;macro=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;citations&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&#34;nt&#34;&gt;&amp;lt;/tool&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;macros&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;xml&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;requirements&amp;quot;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;requirements&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;requirement&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;type=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;package&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;version=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;1.2&amp;quot;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;seqtk&lt;span class=&#34;nt&#34;&gt;&amp;lt;/requirement&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;yield/&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/requirements&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/xml&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;xml&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;citations&amp;quot;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;citations&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;yield&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/citations&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/xml&amp;gt;&lt;/span&gt;
&lt;span class=&#34;nt&#34;&gt;&amp;lt;/macros&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;如您在上面的代码中所看到的，宏是可重用的 XML 块，它们使避免重复和保持 XML 简洁变得更加容易。&lt;/p&gt;
&lt;h2 id=&#34;参考资料&#34;&gt;参考资料&lt;a class=&#34;headerlink&#34; href=&#34;#参考资料&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://wiki.galaxyproject.org/Admin/Tools/ToolConfigSyntax#Reusing_Repeated_Configuration_Elements&#34;&gt;Macros syntax&lt;/a&gt; on the Galaxy Wiki.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/galaxyproject/tools-iuc/tree/master/tools/gatk2&#34;&gt;GATK tools&lt;/a&gt; (example tools making extensive use of macros)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/galaxyproject/tools-iuc/tree/master/tools/gemini&#34;&gt;gemini tools&lt;/a&gt; (example tools making extensive use of macros)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/galaxyproject/tools-iuc/tree/master/tools/bedtools&#34;&gt;bedtools tools&lt;/a&gt; (example tools making extensive use of macros)&lt;/li&gt;
&lt;li&gt;Macros implementation details - &lt;a href=&#34;https://bitbucket.org/galaxy/galaxy-central/pull-request/129/implement-macro-engine-to-reduce-tool/diff&#34;&gt;Pull Request #129&lt;/a&gt; and &lt;a href=&#34;https://bitbucket.org/galaxy/galaxy-central/pull-request/140/improvements-to-tool-xml-macroing-system/diff&#34;&gt;Pull Request #140&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.galaxyproject.org/en/latest/dev/schema.html&#34;&gt;Galaxy’s Tool XML Syntax&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://galaxyproject.org/develop/resources-tools/&#34;&gt;Big List of Tool Development Resources&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cheetahtemplate.org/users_guide/index.html&#34;&gt;Cheetah templating&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;57&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/discussions-57/</link>
      <pubDate>Sun, 04 Feb 2024 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/discussions-57/</guid>
      
    </item>
    
    <item>
      <title>越来越难用的国内代码托管平台</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;国内的代码平台对个人用户极其不友好，GitHub 可用的情况下，还是继续用着 GitHub 吧。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;h2 id=&#34;码云&#34;&gt;码云&lt;a class=&#34;headerlink&#34; href=&#34;#码云&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Gitee 的 Issues 永远都无法搜索内容 - &lt;a href=&#34;https://gitee.com/oschina/git-osc/issues/I7T4W6&#34;&gt;https://gitee.com/oschina/git-osc/issues/I7T4W6&lt;/a&gt;，感觉社区版本已经在摆烂了，现在他们的重点已经放在了企业版本，但是企业版本又难用的要死！&lt;/p&gt;
&lt;h2 id=&#34;扣钉&#34;&gt;扣钉&lt;a class=&#34;headerlink&#34; href=&#34;#扣钉&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Coding 现在的页面逻辑我是已经搞不明白了，注销的组织名称永远无法释放不说，在代码仓库更是连 Issues 都去掉了......&lt;/p&gt;
&lt;h2 id=&#34;极狐&#34;&gt;极狐&lt;a class=&#34;headerlink&#34; href=&#34;#极狐&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;单是从体验上来说，背靠着 Gitlab 的 &lt;a href=&#34;https://gitlab.cn/&#34;&gt;极狐(GitLab)&lt;/a&gt; 其实做的还不错，虽然也还没有 APP。      &lt;br /&gt;
- &lt;a href=&#34;https://gitlab.cn/is-it-any-good/&#34;&gt;极狐 GitLab 怎么样好不好_极狐 GitLab 优势有哪些-极狐 GitLab&lt;/a&gt;      &lt;br /&gt;
- &lt;a href=&#34;https://gitlab.cn/comparison/&#34;&gt;极狐 GitLab vs GitLab vs GitHub vs Gitee&lt;/a&gt;      &lt;br /&gt;
&lt;img alt=&#34;gitlab-jh&#34; src=&#34;https://gi.weiyan.tech/2024/02/jihulab-vs-github-gitee.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;但是，现在问题来了，极狐从&lt;a href=&#34;https://gitlab.cn/blog/2023/11/29/saas-adjustment/&#34;&gt;2024年1月2日起开始要收费了&lt;/a&gt;，这又是一个昙花一现可以放弃的托管平台，即使付费也总让人感觉这个平台套路不少。&lt;/p&gt;
&lt;h2 id=&#34;最后&#34;&gt;最后&lt;a class=&#34;headerlink&#34; href=&#34;#最后&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;最后，对于国内的代码托管平台的一个感受 —— 对个人用户极其不友好，都热衷去倒腾企业的版本了，所以，GitHub 可用的情况下，还是继续用着 GitHub 吧；某些情况下登录不上 GitHub 了，国内的 GitCode 作为备用暂时凑合着用吧；至于 Gitee/Coding/Jihulab，还是不要浪费时间去折腾了。&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;56&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-56/</link>
      <pubDate>Fri, 02 Feb 2024 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-56/</guid>
      
    </item>
    
    <item>
      <title>从公众号到个人独立站点</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;从 2023 年下半年以来 &amp;ldquo;&lt;strong&gt;BioIT爱好者&lt;/strong&gt;&amp;rdquo; 这个公众号基本上很少更新了，这一点在《&lt;a href=&#34;https://github.com/shenweiyan/Knowledge-Garden/discussions/28&#34;&gt;公众号许久没有更新了&lt;/a&gt;》就提到过，现在唯一有所区别的是在 &lt;a href=&#34;https://github.com/shenweiyan/Knowledge-Garden/discussions/&#34;&gt;GitHub Discussions&lt;/a&gt; 的基础上又多了一个个人的独立站点。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;&lt;img alt=&#34;weiyan-cc-home&#34; src=&#34;https://gi.weiyan.tech/2024/01/weiyan-cc-home.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;weiyan-cc-hblog&#34; src=&#34;https://gi.weiyan.tech/2024/01/weiyan-cc-blog.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;全面拥抱 GitHub 的感觉真的很好，加上手机 APP 的加持，更加如虎添翼。回归了最原始 markdown 的编辑和写作，也终于不用再担心在《&lt;a href=&#34;https://github.com/shenweiyan/Knowledge-Garden/discussions/26&#34;&gt;富文本编辑器与 md 语法的一些困惑&lt;/a&gt;》中所顾虑的问题。&lt;/p&gt;
&lt;p&gt;从 GitHub 到选择 Material for MkDocs 作为个人博客+文档独立站点，有很多的影响因素，但数据可控算是比较核心的一个出发点。这半年来混迹 GitHub 的确也收获良多，发现了很多&lt;a href=&#34;https://github.com/shenweiyan/Knowledge-Garden/discussions/41&#34;&gt;有意思的博客和站点&lt;/a&gt;，学习到了很多优秀的项目。很多时候阅读别人的博客（站点），总能发现一些好玩的人和事物。&lt;/p&gt;
&lt;p&gt;2023 年被&lt;a href=&#34;https://blog.douchi.space/&#34;&gt;椒盐豆豉&lt;/a&gt;的一篇《&lt;a href=&#34;https://blog.douchi.space/2023-why-you-need-a-blog/&#34;&gt;2023 年了你为什么需要写博客&lt;/a&gt;》所吸引，尤其是 &amp;ldquo;博客是赛博空间的另一个你，也能反过来定义你&amp;rdquo; 这一句，写出了很多心声。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;比较反感 &amp;ldquo;个人品牌&amp;rdquo; 这个过于商业化的说法，不写技术不写学术的非实名博客甚至起不到简历作用。但它确是比简历更 &amp;ldquo;像个人&amp;rdquo;，比碎片化社交网络更全面展现我是怎样一个人的网络门面。当然这是我这个博客的用法，网上靠博客经营自己品牌的也比比皆是。总之，内容的自由度和高度的定制化让博客可以成为任何你想让它成为的东西。反之，博客写的久了，发现 &amp;ldquo;写博客&amp;rdquo; 也已经成为了自己（不只是线上） identity 的一部分——毕竟这是很多人认识我的渠道，也重塑了我的一部分自我认知。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;虽然期间尝试过《&lt;a href=&#34;https://github.com/shenweiyan/Knowledge-Garden/discussions/11&#34;&gt;飞书文档初体验&lt;/a&gt;》，从国内版本的飞书到 LarkSuite，但终究不如 GitHub + Material for MkDocs 组合来得顺畅。GitHub 也好，飞书也罢，各种五花八门的奇淫巧技和折腾组合，总有能玩出花来的一波人，找到自己喜欢的并持之以恒就已经足够。&lt;/p&gt;
&lt;p&gt;趁着今天有时间，在公众号同步了这一篇，希望我们不忘初心，做到最好。&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;55&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-55/</link>
      <pubDate>Thu, 25 Jan 2024 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-55/</guid>
      
    </item>
    
    <item>
      <title>Mkdocs material 使用自定义 slug 和 url</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;Mkdocs material 默认使用目录+文件名作为 post 展示的 URL，如果目录名/文件名太长的话，你的 URL 就会显得非常长。尤其是当你从浏览器地址栏中复制某一篇文档的链接时候，如果你的 URL 同时包含了中文，URL 转码后会导致你复制后粘贴的链接变得更加长。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;Mkdocs material 目前我是没看到有什么具体的插件解决这个问题，只不过有人在 &lt;a href=&#34;https://github.com/squidfunk/mkdocs-material/discussions/5161&#34;&gt;squidfunk/mkdocs-material#5161&lt;/a&gt; 基于 hook 提供了一个解决的方案。这个方案基本上能满足我们的需求，但也有一些限制。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;slug 必须是不能以 &lt;code&gt;/&lt;/code&gt; 作为开头，且必须以 &lt;code&gt;/&lt;/code&gt; 作为结尾。&lt;/li&gt;
&lt;li&gt;可能会导致内部链接引用出现问题。&lt;/li&gt;
&lt;li&gt;会重复读取任务，如果文件非常多，会降低相对于文件量的整体性能。&lt;/li&gt;
&lt;/ul&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;54&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-54/</link>
      <pubDate>Tue, 23 Jan 2024 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-54/</guid>
      
    </item>
    
    <item>
      <title>Mkdocs material 对指定页面隐藏 H1 标题</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;主要记录一下在 Mkdocs material 中对指定页面隐藏标题，尤其是指在 Home 页面把 H1 级别的标题隐藏的一些解决方法。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;h2 id=&#34;背景&#34;&gt;背景&lt;a class=&#34;headerlink&#34; href=&#34;#背景&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;对于一些特定的页面，不想显示顶级的标题，尤其是 H1 标题。Mkdocs material 讨论区给出了几个方案：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;内联 CSS 的方法，参考 &lt;a href=&#34;https://github.com/squidfunk/mkdocs-material/issues/2163&#34;&gt;squidfunk/mkdocs-material#2163&lt;/a&gt;。  &lt;br /&gt;
   这个方法的确能解决隐藏当前页面的 H1 标题，但&lt;strong&gt;同时会把搜索栏搜索结果的 H1 标题给隐藏了&lt;/strong&gt;。有点治标不治本！&lt;/li&gt;
&lt;li&gt;自定义页面模板，参考 &lt;a href=&#34;https://github.com/squidfunk/mkdocs-material/discussions/6185&#34;&gt;squidfunk/mkdocs-material#6185&lt;/a&gt;。
   这个参考的讨论里面没有给出具体的解决方法，本文章来详细介绍一下。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;创建模板&#34;&gt;创建模板&lt;a class=&#34;headerlink&#34; href=&#34;#创建模板&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;首先，在 &lt;code&gt;overrides&lt;/code&gt; 目录下创建一个名为 &lt;code&gt;home.html&lt;/code&gt; 的文件(文件名可以随意命名)，内容可以参考 &lt;a href=&#34;https://github.com/squidfunk/mkdocs-material/blob/master/material/templates/blog.html&#34;&gt;&lt;code&gt;blog.html&lt;/code&gt;&lt;/a&gt; 的内容。
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;{% extends &amp;quot;base.html&amp;quot; %}
{% block htmltitle %}
      {% if page.meta and page.meta.title %}
        &amp;lt;title&amp;gt;{{ page.meta.title }}&amp;lt;/title&amp;gt;
      {% elif page.title and not page.is_homepage %}
        &amp;lt;title&amp;gt;{{ page.title | striptags }}&amp;lt;/title&amp;gt;
      {% else %}
        &amp;lt;title&amp;gt;{{ config.site_name }}&amp;lt;/title&amp;gt;
      {% endif %}
{% endblock %}

{% block container %}
    &amp;lt;div class=&amp;quot;md-content&amp;quot; data-md-component=&amp;quot;content&amp;quot;&amp;gt;
      &amp;lt;article class=&amp;quot;md-content__inner md-typeset&amp;quot;&amp;gt;
        {% block content %}
          {% include &amp;quot;partials/mycontent.html&amp;quot; %}
        {% endblock %}
      &amp;lt;/article&amp;gt;
    &amp;lt;/div&amp;gt;
{% endblock %}

{% block extrahead %}
      &amp;lt;!--style&amp;gt;.md-typeset h1,.md-content__button {display:none !important}; &amp;lt;/style--&amp;gt;
      &amp;lt;style&amp;gt;.md-header__topic {font-weight:700 !important}&amp;lt;/style&amp;gt;
{% endblock %}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;第二，创建 &lt;code&gt;overrides/partials/mycontent.html&lt;/code&gt; 文件，内容参考 &lt;a href=&#34;https://github.com/squidfunk/mkdocs-material/blob/master/material/templates/partials/content.html&#34;&gt;&lt;code&gt;content.html&lt;/code&gt;&lt;/a&gt; 文件，注意把 h1 的元素注释掉。
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;{#-
  This file was automatically generated - do not edit
-#}
{% if &amp;quot;material/tags&amp;quot; in config.plugins and tags %}
  {% include &amp;quot;partials/tags.html&amp;quot; %}
{% endif %}
{% include &amp;quot;partials/actions.html&amp;quot; %}
{% if &amp;quot;\x3ch1&amp;quot; not in page.content %}
  &amp;lt;!--h1&amp;gt;{{ page.title | d(config.site_name, true)}}&amp;lt;/h1--&amp;gt;
{% endif %}
{{ page.content }}
{% include &amp;quot;partials/source-file.html&amp;quot; %}
{% include &amp;quot;partials/feedback.html&amp;quot; %}
{% include &amp;quot;partials/comments.html&amp;quot; %}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;h2 id=&#34;在页面中使用模板&#34;&gt;在页面中使用模板&lt;a class=&#34;headerlink&#34; href=&#34;#在页面中使用模板&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;例如，在个人站点的主页文件 &lt;code&gt;docs/index.md&lt;/code&gt; 中头部，使用 &lt;code&gt;template&lt;/code&gt; 指定使用的模板。
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;---
title: 维燕的知识花园
template: home.html
---
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;最后，重新启动 mkdocs 就可以看到对应页面 H1 隐藏后的效果。&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;53&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-53/</link>
      <pubDate>Fri, 19 Jan 2024 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-53/</guid>
      
    </item>
    
    <item>
      <title>MkDocs Material  的一些使用与问题汇总</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;记录一下 MkDocs Material 在使用过程中遇到的一些问题。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;ol&gt;
&lt;li&gt;如何避免锚点链接的非英文字符转换成数字    &lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/squidfunk/mkdocs-material/discussions/4682&#34;&gt;How to disable converting non-english header links to numbers?#4682&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;52&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-52/</link>
      <pubDate>Thu, 18 Jan 2024 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-52/</guid>
      
    </item>
    
    <item>
      <title>MkDocs 的 Nav 导航结构与目录自定义调整插件使用</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;很长一段时间都在使用 &lt;a href=&#34;https://github.com/mysiki/mkdocs_include_dir_to_nav&#34;&gt;mkdocs_include_dir_to_nav&lt;/a&gt; 这个插件来自动包含目录下的所有 md 文件，但随着新需求的出现 —— &lt;strong&gt;如何给某一个指定的子目录使用 &lt;code&gt;reverse_sort_file&lt;/code&gt;，即升序排列展示子目录相应的 markdown 内容&lt;/strong&gt;。这才开始接触到 &lt;a href=&#34;https://github.com/lukasgeiter/mkdocs-awesome-pages-plugin&#34;&gt;MkDocs Awesome Pages Plugin&lt;/a&gt; 这个插件。&lt;/p&gt;
&lt;p&gt;值得注意的是，&lt;a href=&#34;https://github.com/lukasgeiter/mkdocs-awesome-pages-plugin&#34;&gt;MkDocs Awesome Pages Plugin&lt;/a&gt; 在 2025-02-17 发布的 &lt;a href=&#34;https://github.com/lukasgeiter/mkdocs-awesome-nav/releases/tag/v3.0.0&#34;&gt;v3.0.0&lt;/a&gt; 正式变更成了 &lt;a href=&#34;https://github.com/lukasgeiter/mkdocs-awesome-nav&#34;&gt;mkdocs-awesome-nav&lt;/a&gt;！&lt;/p&gt;
&lt;!-- more --&gt;

&lt;h2 id=&#34;开始&#34;&gt;开始&lt;a class=&#34;headerlink&#34; href=&#34;#开始&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;从 GitHub 可以很直观看到的是 &lt;a href=&#34;https://github.com/mysiki/mkdocs_include_dir_to_nav&#34;&gt;mkdocs_include_dir_to_nav&lt;/a&gt; 自从 2022-05-01 更新了 &lt;a href=&#34;https://github.com/mysiki/mkdocs_include_dir_to_nav/releases/tag/v1.2.0&#34;&gt;V1.2.0&lt;/a&gt; 版本后基本就已经停止了更新，Star 也才 20 多人。     &lt;br /&gt;
&lt;img alt=&#34;mkdocs-include-dir-to-nav&#34; src=&#34;https://gi.weiyan.tech/2024/01/mkdocs-include-dir-to-nav.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;反而是 &lt;a href=&#34;https://github.com/lukasgeiter/mkdocs-awesome-pages-plugin&#34;&gt;MkDocs Awesome Pages Plugin&lt;/a&gt; 一直保持着非常积极的更新频率，而且维护者和关注和使用用户也远远比 &lt;a href=&#34;https://github.com/mysiki/mkdocs_include_dir_to_nav&#34;&gt;mkdocs_include_dir_to_nav&lt;/a&gt; 多得多。   &lt;br /&gt;
&lt;img alt=&#34;mkdocs-awesome-pages-plugin&#34; src=&#34;https://gi.weiyan.tech/2024/01/mkdocs-awesome-pages-plugin.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;于是，开始着入手 &lt;a href=&#34;https://github.com/lukasgeiter/mkdocs-awesome-pages-plugin&#34;&gt;MkDocs Awesome Pages Plugin&lt;/a&gt;。不得不说，Awesome-Pages 这个插件的功能很强大，可以很好解决我&amp;rdquo;指定子目录自定义文档排序&amp;rdquo;的需求。但不可否认的是 Awesome-Pages 的文档写的的确有点糙，不认真看还真不知道应该如何上手，这也是花费我最多时间的地方。&lt;/p&gt;
&lt;h2 id=&#34;使用&#34;&gt;使用&lt;a class=&#34;headerlink&#34; href=&#34;#使用&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;使用 &lt;a href=&#34;https://github.com/lukasgeiter/mkdocs-awesome-pages-plugin&#34;&gt;MkDocs Awesome Pages Plugin&lt;/a&gt; 有两个很重要的前提：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;如果你在 &lt;code&gt;mkdocs.yml&lt;/code&gt; 定义了 &lt;code&gt;nav&lt;/code&gt; 或 &lt;code&gt;pages&lt;/code&gt; 条目，则此插件不会执行任何操作。要使用该插件列出的功能，我们必须完全删除该条目或向其中添加 &lt;code&gt;...&lt;/code&gt; 条目 (&lt;a href=&#34;https://github.com/lukasgeiter/mkdocs-awesome-pages-plugin?tab=readme-ov-file#combine-custom-navigation--file-structure&#34;&gt;add a &lt;code&gt;...&lt;/code&gt; entry to it&lt;/a&gt;)。&lt;/li&gt;
&lt;li&gt;自定义导航时，在目录(或者子目录)中创建一个名为 &lt;code&gt;.pages&lt;/code&gt; 的文件时，使用 &lt;code&gt;nav&lt;/code&gt; 属性只能自定义&lt;strong&gt;该级别的导航&lt;/strong&gt;！然后，按照文件和子目录在导航中出现的顺序列出文件和子目录。&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;docs/
├── README.md
├── dirNamedA
│   ├── dirA-page01.md
│   ├── dirA-page02.md
│   └── subDirNamedA1
│   │   ├── subDirA1-page01.md
│   │   └── subDirA1-page02.md
│   └── subDirNamedA2
│       ├── subDirA2-page01.md
│       └── subDirA2-page02.md
├── dirNamedB
│   ├── dirB-page01.md
│   ├── dirB-page02.md
│   └── subDirNamedB1
│       ├── subDirB1-page01.md
│       └── subDirB1-page02.md
└── emptyDir
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;这就发现了 &lt;a href=&#34;https://github.com/lukasgeiter/mkdocs-awesome-pages-plugin&#34;&gt;MkDocs Awesome Pages Plugin&lt;/a&gt; 和 MkDocs  、&lt;a href=&#34;https://github.com/mysiki/mkdocs_include_dir_to_nav&#34;&gt;mkdocs_include_dir_to_nav&lt;/a&gt; 在设置 navigation 时候的区别：&lt;a href=&#34;https://github.com/lukasgeiter/mkdocs-awesome-pages-plugin&#34;&gt;MkDocs Awesome Pages Plugin&lt;/a&gt; 的 &lt;code&gt;nav&lt;/code&gt; 属性只能自定义&lt;strong&gt;该级别的导航&lt;/strong&gt;！即无法只通过一个 &lt;code&gt;.pages&lt;/code&gt; 实现所有目录+子目录的 navigation 排序配置。&lt;/p&gt;
&lt;p&gt;所以，最好的做法就是在 &lt;code&gt;docs&lt;/code&gt; 目录下(包含 &lt;code&gt;docs&lt;/code&gt;) 给每个目录增加一个 &lt;code&gt;.pages&lt;/code&gt; 文件，用于控制当前目录的所有子目录(或者 Posts) 的排序和展示。&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;51&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-51/</link>
      <pubDate>Thu, 11 Jan 2024 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-51/</guid>
      
    </item>
    
    <item>
      <title>2023 年年终总结</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;本来没想着写年终总结 —— 主要是最近对于码字没太多的欲望，但翻到了 2021/2022 的一些年终记录，也看了不少其他网友博主 2023 年的总结，所以对自己说，还是写一写吧。&lt;/p&gt;
&lt;p&gt;2023 年对个人来说是变动的一年，这个变动主要体现在工作上。反观生活，除去家庭的一些琐事基本上也就是波澜不惊的一个状态。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;h2 id=&#34;工作&#34;&gt;工作&lt;a class=&#34;headerlink&#34; href=&#34;#工作&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;2023 年工作最大的变动之一就是公司搬迁新的厂区。随之而来是上下班通勤的变更，这一切让原本相对充裕的时间变得更加紧凑。但时间是最大的习惯，久而久之这就成了生活的一部分，朝九晚五体现的淋漓尽致。&lt;/p&gt;
&lt;p&gt;第二个变动最大的是新办公地点新办公规章。这一点影响很大，以至于让我不得不放弃了很多以前形成的一部分工具习惯，转身去重新接纳一些新的工具和平台。于是，有了现在的&lt;a href=&#34;https://weiyan.cc&#34;&gt;个人知识站点&lt;/a&gt;，有了&lt;a href=&#34;https://www.weiyan.cc/blog/2023/10/24/discussion-11/&#34;&gt;飞书的使用体验&lt;/a&gt;，GitHub 更是一瞬间成为了个人最常逛和依赖的平台 —— 这也让我重新认识了这个平台的强大和无可替代。    &lt;/p&gt;
&lt;p align=&#34;center&#34;&gt;
    &lt;img src=&#34;https://gi.weiyan.tech/2024/01/github-contributions.png&#34; alt=&#34;github-contributions-2023&#34;&gt;
&lt;/p&gt;

&lt;p&gt;职业方向上探索了一把 AI，浅尝辄止又摸不着门道；mRNA 到 Protein 的优化道路上才刚刚看到入口，任重道远；只能背靠着老本行，在不断优化的道路上踉踉跄跄走着。&lt;/p&gt;
&lt;p&gt;职业生涯的道路上人来人往，铁打的营盘流水的兵，走了就走了，无需留念。&lt;/p&gt;
&lt;h2 id=&#34;生活&#34;&gt;生活&lt;a class=&#34;headerlink&#34; href=&#34;#生活&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;生活上其实没什么太多说的，感觉到微妙变化的是比以前更加注意到自己和身边人的健康问题了。从老婆孩子，到母亲的腰椎问题，再到自己，再加上这一年的流感、肺炎(尤其是支原体肺炎)，2023 年在健康这个问题上的确投入了很大的一部分时间和精力。&lt;/p&gt;
&lt;p&gt;家庭琐事上，家人彼此磕磕碰碰的事情总会有，生活无律，人生无常，我们更需要的是相互之间相互理解与包容。对于老婆和孩子，需要更多的关心和陪伴。&lt;/p&gt;
&lt;p&gt;运动这件事情上，基本还能保持着每周至少一场羽毛球，这是值得肯定的。虽然变换了新的地方，融入了新的面孔，但至少我们还能在一起用羽毛球找到属于彼此的快乐，那也足够了。&lt;/p&gt;
&lt;p&gt;孩子的事情上，这一年约着她的同班同学打卡了不少地方，这也让集体一起遛娃成为了周末值得期待的活动之一。&lt;/p&gt;
&lt;h2 id=&#34;最后&#34;&gt;最后&lt;a class=&#34;headerlink&#34; href=&#34;#最后&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;最后，2024 年就要搬进新的房子了，这是值得期待和努力的一件大事。希望自己和家人在新的环境中能收获新的惊喜，身体健康，和和美满。&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;50&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-50/</link>
      <pubDate>Wed, 10 Jan 2024 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-50/</guid>
      
    </item>
    
    <item>
      <title>苹果字体 PingFang SC 的一些踩坑记录</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;曾经在 《&lt;a href=&#34;https://www.weiyan.cc/cookbook/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/windows/2021-02-19-win-font/&#34;&gt;为 Windows 系统替换优雅的苹果字体&lt;/a&gt;》中提到可在 Windows 中使用苹方字体替代默认的微软雅黑，这里就有一个问题即需要在 Wondows 下安装苹方字体 —— 如果你的字体安装错误，很有可能导致你的浏览器或其他应用出现乱码。&lt;/p&gt;
&lt;h2 id=&#34;浏览器乱码&#34;&gt;浏览器乱码&lt;a class=&#34;headerlink&#34; href=&#34;#浏览器乱码&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;出现这个的原因主要是站点使用了 &lt;code&gt;PingFang SC&lt;/code&gt; 的字体设置。
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;body {
    font-family: PingFang SC,microsoft yahei,sans-serif;
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;我们可以看到使用 F12 检查源码模式把 &lt;code&gt;font-family&lt;/code&gt; 中的 &lt;code&gt;PingFang SC&lt;/code&gt; 去掉后即可显示正常。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;h2 id=&#34;字体安装后不起作用&#34;&gt;字体安装后不起作用&lt;a class=&#34;headerlink&#34; href=&#34;#字体安装后不起作用&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;这里就涉及一个 &lt;strong&gt;萍方&lt;/strong&gt; vs &lt;strong&gt;苹方&lt;/strong&gt; vs &lt;strong&gt;PingFang&lt;/strong&gt; 区别的一个问题。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;猛地看上去，萍方/苹方/PingFang 应该是同一个字体。但是，实际上的效果，却并不相同。那么，到底谁是真正的 pingfang sc呢？    &lt;/p&gt;
&lt;p&gt;这里以能否&lt;strong&gt;以 PingFang SC 为名称识别出来，作为标准&lt;/strong&gt;。为什么这么说呢？因为网页里面的 font-family，写的都是 pingfang sc，也许萍方/苹方都是差不多的字体，但是不能在网页里面自动识别出来。所以，就等于零。&lt;/p&gt;
&lt;p&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;body {
   font-family: PingFang SC,microsoft yahei,sans-serif;
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
比如，上述 css 定义，就来自于腾讯云主页。在实际的应用过程中，只有安装好的 pingfang sc 系列字体才能被识别【如下图中的右侧字体】。  &lt;br /&gt;
&lt;strong&gt;注意：萍方/苹方，在安装的时候，文件名也都是 pingfang-sc 之类的文件名。但是，安装完成的真正成品，可不是这个拼音名字。进而导致字体不能识别。&lt;/strong&gt;
&lt;img alt=&#34;pingfang sc 区别&#34; src=&#34;https://gi.weiyan.tech/2024/01/fingfang-sc.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;From 《&lt;a href=&#34;https://newsn.net/say/css-font-family-pingfang.html&#34;&gt;由 pingfang sc 字体缺失，所暴露的字体加载顺序的潜规则&lt;/a&gt;》&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;解决方案&#34;&gt;解决方案&lt;a class=&#34;headerlink&#34; href=&#34;#解决方案&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;参考 《&lt;a href=&#34;https://newsn.net/say/css-font-family-pingfang.html&#34;&gt;由 pingfang sc 字体缺失，所暴露的字体加载顺序的潜规则&lt;/a&gt;》 一文的方案。&lt;/p&gt;
&lt;h3 id=&#34;安装-pingfang-sc&#34;&gt;安装 PingFang SC&lt;a class=&#34;headerlink&#34; href=&#34;#安装-pingfang-sc&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;名称为 &lt;strong&gt;PingFang SC&lt;/strong&gt; (英文) 的字体找了很久才在 GitHub 翻到一个(以防丢失，个人 Fork 了过来)：&lt;a href=&#34;https://github.com/shenweiyan/PingFangSC-Fonts&#34;&gt;shenweiyan/PingFangSC-Fonts&lt;/a&gt;，如有需要可以直接下载安装。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;国内大多数网页，在定义网页字体的时候，都是先定义 PingFang SC，然后定义微软雅黑。那么：    &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;正常来说，win 系统是不会安装 PingFang SC 字体的，所以，显示微软雅黑，页面正常。    &lt;/li&gt;
&lt;li&gt;但是，一旦单独安装了 PingFang SC Light，页面就会识别出这个 Light 字体，页面不正常。    &lt;/li&gt;
&lt;li&gt;解决方案是：再安装一个 PingFang SC Regular，页面会在 Light 之前优先识别 Regular，页面正常。    &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果您非要在 win 下面安装 pingfang sc 字体，可能要三思而后安装了。李鬼似乎有点多&amp;hellip;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;PingFang SC Regular&#34; src=&#34;https://gi.weiyan.tech/2024/01/pingfang-sc-regular.png&#34; /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;删除-pingfang-sc&#34;&gt;删除 PingFang SC&lt;a class=&#34;headerlink&#34; href=&#34;#删除-pingfang-sc&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;个人用的就是这一个方法，但是在 &lt;code&gt;C:\Windows\Fonts&lt;/code&gt; 中删除的时候会提示 &lt;strong&gt;该字体正在使用无法删除！所以，必须要关闭使用苹方字体的程序。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;因此，我们需要：&lt;/p&gt;
&lt;p&gt;参考：《&lt;a href=&#34;https://www.bilibili.com/video/BV1nc411575s/&#34;&gt;电脑安装新字体，浏览器字体全变了，如何删除正在使用的苹方字体&lt;/a&gt;》 - 哔哩哔哩&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在 Windows 任务管理的进程中把浏览器相关的全部结束掉，如 360 浏览器相关的进程、Microsoft edge、Google Chrome 等等，全部选择结束任务。    &lt;/li&gt;
&lt;li&gt;把其他可能使用苹方字体的，如 OneNote、WPS、微信、&amp;hellip; 这些的进程也全部结束掉。    &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;最后，回到 &lt;code&gt;C:\Windows\Fonts&lt;/code&gt; 中再次删除相应的苹方字体，发现即可成功删除。删除了这些苹方字体，浏览器上的字体显示也就恢复正常了。&lt;/p&gt;
&lt;h2 id=&#34;参考资料&#34;&gt;参考资料&lt;a class=&#34;headerlink&#34; href=&#34;#参考资料&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;苏南大叔，《&lt;a href=&#34;https://newsn.net/say/css-font-family-pingfang.html&#34;&gt;由 pingfang sc 字体缺失，所暴露的字体加载顺序的潜规则&lt;/a&gt;》&lt;/li&gt;
&lt;li&gt;科技猎手2023，《&lt;a href=&#34;https://www.bilibili.com/video/BV1nc411575s/&#34;&gt;电脑安装新字体，浏览器字体全变了，如何删除正在使用的苹方字体&lt;/a&gt;》 - 哔哩哔哩&lt;/li&gt;
&lt;/ol&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;49&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/tech/discussions-49/</link>
      <pubDate>Tue, 09 Jan 2024 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/tech/discussions-49/</guid>
      
    </item>
    
    <item>
      <title>1-支持的 Python 版本</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2024-01-08&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2024-01-08T00:00:00&#39;&gt;2024-01-08&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2026-03-05&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2026-03-05T10:40:31.448337+00:00&#39;&gt;2026-03-05&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;编译：&lt;a href=&#34;https://www.weiyan.cc&#34;&gt;沈维燕&lt;/a&gt;   &lt;br /&gt;
原文：&lt;a href=&#34;https://docs.galaxyproject.org/en/master/admin/python.html&#34;&gt;https://docs.galaxyproject.org/en/master/admin/python.html&lt;/a&gt;       &lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Galaxy 的核心功能目前支持 Python &amp;gt;=3.7。&lt;/p&gt;
&lt;p&gt;如果 Galaxy 排斥你正在使用的 Python 版本：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;完全删除 Galaxy 使用的 Python virtualenv（可以使用 &lt;code&gt;GALAXY_VIRTUAL_ENV&lt;/code&gt; 环境变量配置，默认为 &lt;code&gt;.venv&lt;/code&gt; ），例如： &lt;code&gt;rm -rf /path/to/galaxy/.venv&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;如果您在 conda 环境中使用 Python（可以使用 &lt;code&gt;GALAXY_CONDA_ENV&lt;/code&gt; 环境变量进行配置，默认为 &lt;code&gt;_galaxy_&lt;/code&gt;），请将其删除，例如： &lt;code&gt;conda env remove -n _galaxy_&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;让 Galaxy 知道要使用哪个 Python 的方法有以下几种：    &lt;/li&gt;
&lt;li&gt;如果您想从 conda 使用 Python，只需激活 &lt;code&gt;base&lt;/code&gt; 环境，Galaxy 将为自己创建一个新的 conda 环境。&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;否则：    &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;确保安装了受支持的 Python 版本。&lt;/li&gt;
&lt;li&gt;验证您要使用的 Python 解释器是否位于 &lt;code&gt;which -a python3 python&lt;/code&gt; 输出中的第一个位置（如果您使用的是 Galaxy &amp;lt;=19.09，则为 &lt;code&gt;which -a python&lt;/code&gt; ）。如果不是这种情况：     &lt;/li&gt;
&lt;li&gt;如果您使用的是 Galaxy &amp;gt;= 20.01，只需执行： &lt;code&gt;export GALAXY_PYTHON=/path/to/python&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;如果你使用的是较旧版本的 Galaxy，你可以操控你的 shell 的 &lt;code&gt;PATH&lt;/code&gt; 变量，将正确的版本置于首位。你可以通过创建一个新目录，将 python 的符号链接添加到其中，并将该目录置于 PATH 的最前面来完成此操作：
     &lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;%&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mkdir&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~/galaxy-python
%&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ln&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-s&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/path/to/python&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~/galaxy-python/python
%&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;~/galaxy-python:&lt;span class=&#34;nv&#34;&gt;$PATH&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;从 Python 2 升级时，删除已编译的 &lt;code&gt;mako&lt;/code&gt; 模板：
   &lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;% rm -rf /path/to/galaxy/database/compiled_templates/
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
   这些模板将在启动 Galaxy 时自动重新生成。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;再次启动 Galaxy。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;admonition abstract&#34;&gt;
&lt;p class=&#34;admonition-title&#34;&gt;注意&lt;/p&gt;
&lt;p&gt;如果您从源代码编译自己的 Python 解释器，请确保构建了 &lt;code&gt;ssl&lt;/code&gt;、&lt;code&gt;sqlite3&lt;/code&gt;、&lt;code&gt;curses&lt;/code&gt; 和 &lt;code&gt;bz2&lt;/code&gt; 模块，并且安装后可导入。这些 &amp;ldquo;额外&amp;rdquo; 模块是在编译过程的最后阶段构建的，并且是 Galaxy 框架所需的。如果在 Linux 上进行编译，您可能需要安装适用于 OpenSSL 和 Bzip2 的 &lt;code&gt;-dev&lt;/code&gt; 包。您可能还需要使用共享库 (&lt;code&gt;--enable-shared&lt;/code&gt;) 构建 Python。&lt;/p&gt;
&lt;/div&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;47&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/discussions-47/</link>
      <pubDate>Mon, 08 Jan 2024 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/discussions-47/</guid>
      
    </item>
    
    <item>
      <title>2-框架依赖</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2024-01-08&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2024-01-08T00:00:00&#39;&gt;2024-01-08&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2026-03-05&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2026-03-05T10:40:31.448088+00:00&#39;&gt;2026-03-05&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;编译：&lt;a href=&#34;https://www.weiyan.cc&#34;&gt;Shen Weiyan&lt;/a&gt;    &lt;br /&gt;
原文：&lt;a href=&#34;https://docs.galaxyproject.org/en/master/admin/python.html&#34;&gt;https://docs.galaxyproject.org/en/master/admin/python.html&lt;/a&gt;      &lt;/p&gt;
&lt;/blockquote&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;48&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/discussions-48/</link>
      <pubDate>Mon, 08 Jan 2024 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/discussions-48/</guid>
      
    </item>
    
    <item>
      <title>Galaxy Project 的 Sphinx 文档部署</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2024-01-05&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2024-01-05T00:00:00&#39;&gt;2024-01-05&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2026-03-05&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2026-03-05T10:40:31.448570+00:00&#39;&gt;2026-03-05&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&#34;https://docs.galaxyproject.org/&#34;&gt;https://docs.galaxyproject.org/&lt;/a&gt; 是 Galaxy Project 官方的文档地址链接，这是一个基于 &lt;a href=&#34;https://www.sphinx-doc.org/&#34;&gt;Sphinx&lt;/a&gt; + &lt;a href=&#34;https://readthedocs.org/&#34;&gt;Read the Docs&lt;/a&gt; 的文档站点。如果我们也想要创建一个这样一模一样的 Galaxy 文档需要怎么操作呢？&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;虽然 &lt;a href=&#34;https://docs.galaxyproject.org/en/master/#building-this-documentation&#34;&gt;Galaxy 官方文档&lt;/a&gt; 也给出了关于构建该文档的一些说明，但没有太多细节。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;If you have your own copy of the Galaxy source code, you can also generate your own version of this documentation. Run the following command from the Galaxy’s root:
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$ make docs
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
The generated documentation will be in &lt;code&gt;doc/build/html/&lt;/code&gt; and can be viewed with a web browser. Note that you will need to install Sphinx and other module dependencies which are listed in the Makefile in the Galaxy root folder.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;下面我们来详细分解一下 &lt;code&gt;make docs&lt;/code&gt; 这个命令具体执行的构建步骤。&lt;/p&gt;
&lt;p&gt;首先，在 Galaxy 根目录的执行 &lt;code&gt;make docs&lt;/code&gt;，主要是执行了该目录下 &lt;a href=&#34;https://github.com/galaxyproject/galaxy/blob/dev/Makefile&#34;&gt;Makefile&lt;/a&gt; 中的这几句命令：
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;docs: ## Generate HTML documentation.
# Run following commands to setup the Python portion of the requirements:
#   $ ./scripts/common_startup.sh
#   $ . .venv/bin/activate
#   $ pip install -r requirements.txt -r lib/galaxy/dependencies/dev-requirements.txt
    $(IN_VENV) $(MAKE) -C doc clean
    $(IN_VENV) $(MAKE) -C doc html
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
- &lt;code&gt;$(MAKE)&lt;/code&gt;就是预设的 &lt;code&gt;make&lt;/code&gt; 这个命令的名称（或者路径）。  &lt;br /&gt;
- &lt;code&gt;-C&lt;/code&gt;：到指定目录下读取 Makefile 文件并执行（给出指定的目录的路径）。     &lt;/p&gt;
&lt;p&gt;第二步，读取 &lt;code&gt;doc&lt;/code&gt; 目录下的 &lt;a href=&#34;https://github.com/galaxyproject/galaxy/blob/dev/doc/Makefile&#34;&gt;Makefile&lt;/a&gt; 文件，并执行 &lt;code&gt;make html&lt;/code&gt;。
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;html: $(GENERATED_RST)
    $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
    @echo
    @echo &amp;quot;Build finished. The HTML pages are in $(BUILDDIR)/html.&amp;quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;结合其中的一些参数，其实最终就是执行了下面这个命令完成最终的构建。
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;sphinx-build&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-b&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;html&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-d&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;build/doctrees&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;build/html
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;sphinx-build [OPTIONS] SOURCEDIR OUTPUTDIR [FILENAMES&amp;hellip;]&lt;/li&gt;
&lt;li&gt;sourcedir：path to documentation source files&lt;/li&gt;
&lt;li&gt;outputdir：path to output directory&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-b&lt;/code&gt;：BUILDER，builder to use (default: html)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;了解了以上几个步骤后，我们就可以把 Galaxy 根目录的 doc 目录单独拎出来，通过 Sphinx 的命令实现独立构建部署。&lt;/p&gt;
&lt;h2 id=&#34;1-安装必须依赖&#34;&gt;1. 安装必须依赖&lt;a class=&#34;headerlink&#34; href=&#34;#1-安装必须依赖&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;主要包括三个依赖。
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;pip3 install Sphinx sphinx_rtd_theme myst_parser
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;h2 id=&#34;2-修改配置&#34;&gt;2. 修改配置&lt;a class=&#34;headerlink&#34; href=&#34;#2-修改配置&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;由于 &lt;code&gt;sphinx-build&lt;/code&gt; 会读取 &lt;code&gt;source/conf.py&lt;/code&gt; 并执行，但这个文件调用了 &lt;a href=&#34;https://github.com/galaxyproject/galaxy/blob/dev/lib/galaxy/version.py&#34;&gt;&lt;code&gt;galaxy.version&lt;/code&gt;&lt;/a&gt; 模块：
&lt;img alt=&#34;No module named &#39;galaxy&#39;&#34; src=&#34;https://gi.weiyan.tech/2024/01/no-galaxy-version.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;所以，如果我们想要把 &lt;code&gt;galaxy/doc&lt;/code&gt; 和 Galaxy 独立开来进行部署，就需要修改一下 &lt;code&gt;source/conf.py&lt;/code&gt;：
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# The short X.Y version.&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;#from galaxy.version import (&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;#    VERSION,&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;#    VERSION_MAJOR,&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;#)&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;VERSION_MAJOR&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;23.1&amp;quot;&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;VERSION_MINOR&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;5.dev0&amp;quot;&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;VERSION&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;VERSION_MAJOR&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;.&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;VERSION_MINOR&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;VERSION_MINOR&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;h2 id=&#34;3-执行构建&#34;&gt;3. 执行构建&lt;a class=&#34;headerlink&#34; href=&#34;#3-执行构建&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sphinx-build&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-b&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;html&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-d&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;build/doctrees&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;build/html
Running&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Sphinx&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;v7.2.6
making&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;output&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;directory...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;
myst&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;v2.0.0:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;MdParserConfig&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;commonmark_only&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;False,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;gfm_only&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;False,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;enable_extensions&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;={&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;deflist&amp;#39;&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;attrs_block&amp;#39;&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;substitution&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;disable_syntax&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=[]&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;all_links_external&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;False,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;url_schemes&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;http&amp;#39;&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;https&amp;#39;&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;mailto&amp;#39;&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;ftp&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;ref_domains&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;None,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;fence_as_directive&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;set&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;number_code_blocks&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=[]&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;title_to_header&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;False,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;heading_anchors&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;5&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;heading_slug_func&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;lt;&lt;span class=&#34;k&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make_id&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;at&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;0x7f46201a6a60&amp;gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;html_meta&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;={}&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;footnote_transition&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;True,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;words_per_minute&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;200&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;substitutions&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;={}&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;linkify_fuzzy_links&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;True,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;dmath_allow_labels&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;True,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;dmath_allow_space&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;True,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;dmath_allow_digits&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;True,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;dmath_double_inline&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;False,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;update_mathjax&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;True,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;mathjax_classes&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;tex2jax_process|mathjax_process|math|output_area&amp;#39;&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;enable_checkboxes&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;False,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;suppress_warnings&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=[]&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;highlight_code_blocks&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;True&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
loading&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;intersphinx&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;inventory&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://docs.python.org/3/objects.inv...
loading&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;intersphinx&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;inventory&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://requests.readthedocs.io/en/master/objects.inv...
intersphinx&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;inventory&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;has&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;moved:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://requests.readthedocs.io/en/master/objects.inv&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://requests.readthedocs.io/en/latest/objects.inv
building&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;mo&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;targets&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;po&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;files&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;that&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;are&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;out&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;date
writing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;output...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;
building&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;html&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;targets&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;332&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;files&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;that&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;are&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;out&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;date
updating&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;environment:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;new&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;config&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;332&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;added,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;changed,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;removed
reading&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sources...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;100&lt;/span&gt;%&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ts_api_doc

...

generating&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;indices...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;genindex&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;
highlighting&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;module&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;code...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;
writing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;additional&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pages...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;search&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;
copying&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;images...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;100&lt;/span&gt;%&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;releases/images/23.1-hdf5.png
dumping&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;search&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;index&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;English&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;code:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;en&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;
dumping&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;object&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;inventory...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;
build&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;succeeded,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1223&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;warnings.

The&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;HTML&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pages&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;are&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;build/html.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;最后生成的静态文件都保存在了 &lt;code&gt;build/html&lt;/code&gt; 目录，我们可以借助 NGINX 或者其他 Pages 就可以直接看到一个一模一样对应当前 Repo 版本的 Galaxy Project 文档了。&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;46&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/discussions-46/</link>
      <pubDate>Fri, 05 Jan 2024 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/discussions-46/</guid>
      
    </item>
    
    <item>
      <title>不要使用 requirements.txt</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;blockquote&gt;
&lt;p&gt;作者：&lt;a href=&#34;https://miikka.me/&#34;&gt;Miikka Koskinen&lt;/a&gt;     &lt;br /&gt;
编译：&lt;a href=&#34;https://weiyan.cc&#34;&gt;沈维燕&lt;/a&gt;     &lt;br /&gt;
时间：原文发表于 2023-10-31     &lt;br /&gt;
原文：&lt;a href=&#34;https://quanttype.net/posts/2023-10-31-do-not-use-requirements.txt.html&#34;&gt;Do not use requirements.txt&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;你是否在用 Python 开发后端服务？我有两条建议：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;不要使用 &lt;code&gt;pip&lt;/code&gt; 和 &lt;code&gt;requirements.txt&lt;/code&gt; 来管理 Python 依赖。它们缺乏一些应该内置的关键功能。&lt;/li&gt;
&lt;li&gt;改用 &lt;a href=&#34;https://python-poetry.org/&#34;&gt;Poetry&lt;/a&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;!-- more --&gt;

&lt;p&gt;对我来说，第一条建议毋庸置疑。第二条则更具有暂时性：Poetry 是一个很好的选择，但并非唯一值得考虑的选择。&lt;/p&gt;
&lt;p&gt;我将在下面进行解释。&lt;/p&gt;
&lt;p&gt;请注意：如果你使用 Python 做其他事情而不是构建后端服务，那么本文中的建议可能并不适用于你。例如，如果你是&lt;a href=&#34;https://gregoryszorc.com/blog/2023/10/30/my-user-experience-porting-off-setup.py/&#34;&gt;一个正在迁移 &lt;code&gt;setup.py&lt;/code&gt; 的库开发者&lt;/a&gt;，Poetry 并不明显是一个完美的选择。&lt;/p&gt;
&lt;h2 id=&#34;pip-缺失的功能&#34;&gt;PIP 缺失的功能&lt;a class=&#34;headerlink&#34; href=&#34;#pip-缺失的功能&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://pypi.org/project/pip/&#34;&gt;pip&lt;/a&gt; 是一个工具，你可以用它从 &lt;a href=&#34;https://pypi.org/&#34;&gt;The Python Package Index (PyPI)&lt;/a&gt; 中安装软件包。它随 Python 一起安装，如果你是 Python 开发者，你可能已经多次使用过它。&lt;/p&gt;
&lt;p&gt;管理 Python 项目依赖的传统方式是将它们列在一个名为 &lt;code&gt;requirements.txt&lt;/code&gt; 的文件中，并使用 &lt;code&gt;pip install -r requirements.txt&lt;/code&gt; 进行安装。然而，&lt;code&gt;pip&lt;/code&gt; 被设计成一个软件包安装工具，而不是一个功能齐全的项目工作流工具。&lt;strong&gt;pip 缺乏两个关键功能，即依赖的锁定文件 (dependency lockfiles) 和虚拟环境的自动管理(automatic management of virtualenvs)。&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&#34;依赖锁定文件&#34;&gt;依赖锁定文件&lt;a class=&#34;headerlink&#34; href=&#34;#依赖锁定文件&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;如果你希望在所有环境中（比如你的笔记本电脑、持续集成(CI)、生产环境）获得相同的行为，你需要锁定你的依赖项及其传递依赖的版本。你可以在 &lt;code&gt;requirements.txt&lt;/code&gt; 中锁定你直接依赖的版本，例如，使用 &lt;code&gt;requests==2.31.0&lt;/code&gt; 而不是 &lt;code&gt;requests&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;然而，pip 不会锁定传递依赖的版本。这可以通过使用 &lt;a href=&#34;https://github.com/jazzband/pip-tools&#34;&gt;pip-tools&lt;/a&gt; 来解决，将 &lt;code&gt;requirements.txt&lt;/code&gt; 扩展成一个列出完整依赖图的文件，包括准确版本和构件的校验和(checksums for the artifacts)。pip-tools 很不错，但你需要自行设置并弄清楚它如何适应你的工作流程。&lt;/p&gt;
&lt;p&gt;在其他编程语言中，这个功能是基本要求的 - 例如，npm 多年来一直有 &lt;code&gt;package-lock.json&lt;/code&gt;，Cargo 也有 &lt;code&gt;Cargo.lock&lt;/code&gt;。这个功能实在应该是一个项目工作流工具中的内置功能。&lt;/p&gt;
&lt;h2 id=&#34;虚拟环境的自动管理&#34;&gt;虚拟环境的自动管理&lt;a class=&#34;headerlink&#34; href=&#34;#虚拟环境的自动管理&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;在 Python 中创建隔离环境的方式是使用 &lt;a href=&#34;https://docs.python.org/3/library/venv.html&#34;&gt;virtualenvs&lt;/a&gt;。传统上，你需要手动管理它们：通过一个 shell 命令创建一个（比如 &lt;code&gt;python -m venv example&lt;/code&gt; 来创建名为 &lt;code&gt;example&lt;/code&gt; 的虚拟环境），当你想要使用它时，需要用另一个 shell 命令来激活它。&lt;/p&gt;
&lt;p&gt;这容易出错：忘记激活虚拟环境或者激活错误的虚拟环境是常见的错误。有一堆的解决方法。例如，你可以使用 &lt;a href=&#34;https://github.com/pyenv/pyenv-virtualenv&#34;&gt;pyenv-virtualenv&lt;/a&gt;，在进入项目目录时让你的 shell 自动激活一个虚拟环境。&lt;a href=&#34;https://github.com/direnv/direnv/wiki/Python&#34;&gt;direnv&lt;/a&gt; 也可以做到。&lt;/p&gt;
&lt;p&gt;同样，这也应该成为工作流工具中的一个内置功能。你不应该需要将多个工具粘合在一起。你不会听到 npm 或 Cargo 用户在虚拟环境上遇到问题的。&lt;/p&gt;
&lt;h2 id=&#34;poetry-及其他选择&#34;&gt;Poetry 及其他选择&lt;a class=&#34;headerlink&#34; href=&#34;#poetry-及其他选择&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;幸运的是，许多人已经意识到这些问题并努力解决它们。不太幸运的是，这导致了大量的 Python 项目工作流工具涌现。那么该如何选择呢？&lt;/p&gt;
&lt;p&gt;我的建议是：&lt;strong&gt;选择 &lt;a href=&#34;https://python-poetry.org/docs/&#34;&gt;Poetry&lt;/a&gt;&lt;/strong&gt;。它有锁定文件，有虚拟环境管理，而且很受欢迎且在积极开发中。根据我的经验，它并不完美，但是它起作用。&lt;/p&gt;
&lt;p&gt;你也可以考虑 &lt;a href=&#34;https://hatch.pypa.io/latest/&#34;&gt;Hatch&lt;/a&gt; 或 &lt;a href=&#34;https://github.com/pdm-project/pdm&#34;&gt;PDM&lt;/a&gt;。它们与 Poetry 相似。我自己没有使用过它们，但我听说其他人成功地使用了它们。Hatch 似乎在库作者 (library authors) 中特别受欢迎。&lt;/p&gt;
&lt;p&gt;如果你正在寻找一个更强大的选项，可以处理多个子项目，&lt;a href=&#34;https://www.pantsbuild.org/&#34;&gt;Pants 构建系统&lt;/a&gt;在 Python 支持方面做得很好。然而，它的学习曲线相对陡峭。&lt;/p&gt;
&lt;p&gt;最后，如果你正在寻找一个类似 rustup 那样可以为你安装 Python 的解决方案，那么有 &lt;a href=&#34;https://github.com/mitsuhiko/rye&#34;&gt;rye&lt;/a&gt;。它是新的实验性工具，但也许它对你来说是正确的选择？&lt;/p&gt;
&lt;h2 id=&#34;哪个是权威的工作流工具&#34;&gt;哪个是权威的工作流工具？&lt;a class=&#34;headerlink&#34; href=&#34;#哪个是权威的工作流工具&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;如果 Python 自带一个权威的项目工作流工具会很好。很多人希望 pip 成为这样一个工具。Node.js 自带 npm，Rust 自带 Cargo，那么为什么 Python 就不能有一个呢？为什么会有这么多竞争的选择呢？&lt;/p&gt;
&lt;p&gt;据我所知，最大的障碍是，由于 Python 被广泛使用且用于许多不同的用例，制定一个通用的官方解决方案是困难且缓慢的（并且资金不足的）工作。另外，也不清楚 pip 是否适合这些功能。&lt;/p&gt;
&lt;p&gt;如果你想了解更多信息，请阅读和听取这些与我不同、深度参与 Python 社区的人的意见：  &lt;br /&gt;
- Stargirl (Thea Flowers) on Fediverse：《&lt;a href=&#34;https://hachyderm.io/@stargirl/109697057391904145&#34;&gt;所以你想解决 Python 打包问题：一个实用指南&lt;/a&gt;》
- Pradyun Gedam：《&lt;a href=&#34;https://pradyunsg.me/blog/2023/01/21/thoughts-on-python-packaging/&#34;&gt;关于 Python 打包生态系统的思考&lt;/a&gt;》
- Talk Python to Me (podcast)：《&lt;a href=&#34;https://talkpython.fm/episodes/show/406/reimagining-pythons-packaging-workflows&#34;&gt;重新构想 Python 的打包工作流程&lt;/a&gt;》&lt;/p&gt;
&lt;h2 id=&#34;关于-clojure&#34;&gt;关于 Clojure&lt;a class=&#34;headerlink&#34; href=&#34;#关于-clojure&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;阅读我的博客的 Clojure 开发者可能会问：嘿，Clojure 怎么样？为什么我们没有锁定文件呢？这是一个很好的问题！&lt;/p&gt;
&lt;p&gt;Clojure 社区通过始终使用明确的版本而不是版本范围来解决了这个问题，即使在库中也是如此。版本描述实际上支持范围，但没有人会使用它们。这样，只要版本解析算法稳定，你总是会得到相同的版本。&lt;/p&gt;
&lt;p&gt;理论上，传递依赖项版本不匹配可能是一个问题，但 Clojure 支持一种编码风格，很少引起问题。&lt;/p&gt;
&lt;p&gt;相比之下，在 Python 和 Node.js 社区，通常期望库列出其依赖项的版本范围，而软件包管理工具会抱怨版本不匹配的问题。&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;44&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/tech/discussions-44/</link>
      <pubDate>Wed, 03 Jan 2024 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/tech/discussions-44/</guid>
      
    </item>
    
    <item>
      <title>基于 Matrix 协议的 Elements 通讯加密应用</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;Matrix 是一个开源、开放、轻量级、去中心化的即时聊天通讯协议，它是包括 deepin、Mozilla、Fedora、KDE、Archlinux、Debian 等开源社区均在广泛使用的即时聊天协议。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;Element 是 Matrix 官方性质的，基于 Web 技术的 Matrix 客户端实现，除了网页环境外，也有桌面客户端可用。可以在你所使用的发行版的应用商店或包管理工具中搜索 element-desktop 或近似名称来检索和安装此客户端，然后即可运行并登录你的帐号。&lt;/p&gt;
&lt;p&gt;Element 可以和 GitHub 的仓库实现关联，把 GitHub 仓库的诸多信息同步到 Element。&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;42&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-42/</link>
      <pubDate>Thu, 28 Dec 2023 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-42/</guid>
      
    </item>
    
    <item>
      <title>阅读别人的博客</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;很多时候阅读别人的博客（站点），总能发现一些好玩的人和事物。2023 年被&lt;a href=&#34;https://blog.douchi.space/&#34;&gt;椒盐豆豉&lt;/a&gt;的一篇《&lt;a href=&#34;https://blog.douchi.space/2023-why-you-need-a-blog/&#34;&gt;2023 年了你为什么需要写博客&lt;/a&gt;》所吸引，尤其是 &lt;strong&gt;&amp;ldquo;博客是赛博空间的另一个你，也能反过来定义你&amp;rdquo;&lt;/strong&gt; 这一句，写出了很多心声。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;blockquote&gt;
&lt;p&gt;比较反感 &amp;ldquo;个人品牌&amp;rdquo; 这个过于商业化的说法，不写技术不写学术的非实名博客甚至起不到简历作用。但它确是比简历更 &amp;ldquo;像个人&amp;rdquo;，比碎片化社交网络更全面展现我是怎样一个人的网络门面。当然这是我这个博客的用法，网上靠博客经营自己品牌的也比比皆是。总之，内容的自由度和高度的定制化让博客可以成为任何你想让它成为的东西。反之，博客写的久了，发现 &amp;ldquo;写博客&amp;rdquo; 也已经成为了自己（不只是线上） identity 的一部分——毕竟这是很多人认识我的渠道，也重塑了我的一部分自我认知。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;鉴于此，终于在个人的&lt;a href=&#34;https://weiyan.cc/&#34;&gt;站点&lt;/a&gt;新增加了一个&lt;a href=&#34;https://weiyan.cc/flinks/&#34;&gt;友链&lt;/a&gt;页面，把一部分有意思的博客与站点都以友链的方式放到了这里（会不定期清理失效域名、停更的博客）。&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;41&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-41/</link>
      <pubDate>Wed, 27 Dec 2023 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-41/</guid>
      
    </item>
    
    <item>
      <title>Pandas 处理 Excel 常用方法技巧</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;在使用 Pandas 前需要学习了解一下 Series 和 DataFrame 的基本数据结构和索引的相关概念，之后就可以练习基本的 Excel操作。Pandas 读取一个 Excel 文件后会将其转化为 DataFrame 对象，每一列或行就是一个 Series 对象。这里我们看下如何对一个 excel 进行读写，以及 Sheet、行列、表头处理的一些常用技巧。&lt;/p&gt;
&lt;h2 id=&#34;读取-excel&#34;&gt;读取 Excel&lt;a class=&#34;headerlink&#34; href=&#34;#读取-excel&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;如果您想读取 Excel 表格中的数据，可以使用 &lt;code&gt;read_excel()&lt;/code&gt; 方法，其语法格式如下：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;pd.read_excel(io, sheet_name=0, header=0, names=None, index_col=None,
              usecols=None, squeeze=False,dtype=None, engine=None,
              converters=None, true_values=None, false_values=None,
              skiprows=None, nrows=None, na_values=None, parse_dates=False,
              date_parser=None, thousands=None, comment=None, skipfooter=0,
              convert_float=True, **kwds)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;!-- more --&gt;

&lt;p&gt;下表对常用参数做了说明：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align: left;&#34;&gt;参数名称&lt;/th&gt;
&lt;th style=&#34;text-align: left;&#34;&gt;说明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align: left;&#34;&gt;io&lt;/td&gt;
&lt;td style=&#34;text-align: left;&#34;&gt;表示 Excel 文件的存储路径。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align: left;&#34;&gt;sheet_name&lt;/td&gt;
&lt;td style=&#34;text-align: left;&#34;&gt;要读取的工作表名称，默认0，即读取第一个工作表作为 DataFrame(一定要加&lt;code&gt;sheet_name=None&lt;/code&gt;，才能读取出所有的 sheet，否则默认读取第一个 sheet)。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align: left;&#34;&gt;header&lt;/td&gt;
&lt;td style=&#34;text-align: left;&#34;&gt;指定作为列名的行，默认0，即取第一行的值为列名；若数据不包含列名，则设定 header = None。若将其设置为 header=2，则表示将前两行作为多重索引。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align: left;&#34;&gt;names&lt;/td&gt;
&lt;td style=&#34;text-align: left;&#34;&gt;一般适用于Excel缺少列名，或者需要重新定义列名的情况；names的长度必须等于Excel表格列的长度，否则会报错。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align: left;&#34;&gt;index_col&lt;/td&gt;
&lt;td style=&#34;text-align: left;&#34;&gt;用做行索引的列，可以是工作表的列名称，如 index_col = &amp;lsquo;列名&amp;rsquo;，也可以是整数或者列表。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align: left;&#34;&gt;usecols&lt;/td&gt;
&lt;td style=&#34;text-align: left;&#34;&gt;int或list类型，默认为None，表示需要读取所有列。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align: left;&#34;&gt;squeeze&lt;/td&gt;
&lt;td style=&#34;text-align: left;&#34;&gt;boolean，默认为False，如果解析的数据只包含一列，则返回一个Series。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align: left;&#34;&gt;converters&lt;/td&gt;
&lt;td style=&#34;text-align: left;&#34;&gt;规定每一列的数据类型。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align: left;&#34;&gt;skiprows&lt;/td&gt;
&lt;td style=&#34;text-align: left;&#34;&gt;接受一个列表，表示跳过指定行数的数据，从头部第一行开始。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align: left;&#34;&gt;nrows&lt;/td&gt;
&lt;td style=&#34;text-align: left;&#34;&gt;需要读取的行数。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align: left;&#34;&gt;skipfooter&lt;/td&gt;
&lt;td style=&#34;text-align: left;&#34;&gt;接受一个列表，省略指定行数的数据，从尾部最后一行开始。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;示例如下所示：
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;pandas&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;as&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;pd&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# 读取所有Sheet&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;df&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;read_excel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;example.xlsx&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sheet_name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# 读取第一个、第二个和名为&amp;quot;Sheet5&amp;quot;的工作表作为 DataFrame 的字典&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;df&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;read_excel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;example.xlsx&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sheet_name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;Sheet5&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;h2 id=&#34;获取行数和列数&#34;&gt;获取行数和列数&lt;a class=&#34;headerlink&#34; href=&#34;#获取行数和列数&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;pandas&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;as&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;pd&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;df&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;read_excel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;example.xlsx&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# 行索引&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;df&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;index&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;  
&lt;span class=&#34;c1&#34;&gt;# RangeIndex(start=0, stop=3747, step=1)&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# 输出元祖,分别为行数和列数,默认第一行是表头不算行数&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;df&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;shape&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; 
&lt;span class=&#34;c1&#34;&gt;# (3747, 4)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;获取表头&#34;&gt;获取表头&lt;a class=&#34;headerlink&#34; href=&#34;#获取表头&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;read_excel&lt;/code&gt; 默认是把 excel 的第一行当成表头。注意：如果 &lt;code&gt;read_excel&lt;/code&gt; 的 &lt;code&gt;sheet_name=None&lt;/code&gt;，读取的是所有 excel 的 sheet_name(key) 和 sheet_values(values) 组成的字典，&lt;code&gt;df.keys()&lt;/code&gt; 的结果是所有 sheet_name，即名字(字典的键)。&lt;/p&gt;
&lt;h3 id=&#34;获取第一个-sheet&#34;&gt;获取第一个 sheet&lt;a class=&#34;headerlink&#34; href=&#34;#获取第一个-sheet&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;这时候 &lt;code&gt;df.keys()&lt;/code&gt; 和 &lt;code&gt;df.columns&lt;/code&gt; 的结果是一样的，都是第一个 sheet 的表头。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;pandas&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;as&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;pd&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;df&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;read_excel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;input.xlsx&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;df&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;keys&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;---------------&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;df&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;columns&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;获取所有-sheet&#34;&gt;获取所有 sheet&lt;a class=&#34;headerlink&#34; href=&#34;#获取所有-sheet&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;pandas&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;as&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;pd&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# 参数为 None 代表读取所有 sheet&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;df&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;read_excel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;input.xlsx&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sheet_name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# 获取所有sheet名字, 如果read_excel参数不是None, 则df.keys()为表头&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;sheet_names&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;list&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;df&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;keys&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sheet_names&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;参考资料&#34;&gt;参考资料&lt;a class=&#34;headerlink&#34; href=&#34;#参考资料&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;老董，《&lt;a href=&#34;https://www.python66.com/pandasshujufenxi/268.html&#34;&gt;pandas获取excel的行数,列数,表头,sheet,前后行等数据&lt;/a&gt;》，&lt;a href=&#34;https://www.python66.com/&#34;&gt;Python编程网&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;《&lt;a href=&#34;https://c.biancheng.net/pandas/excel.html&#34;&gt;Pandas Excel读写操作详解&lt;/a&gt;》，&lt;a href=&#34;https://c.biancheng.net/&#34;&gt;C语言中文网&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;《&lt;a href=&#34;https://pandas.pydata.org/docs/reference/api/pandas.read_excel.html&#34;&gt;pandas.read_excel — pandas 2.1.4 documentation&lt;/a&gt;》，&lt;a href=&#34;https://pandas.pydata.org/docs/index.html&#34;&gt;pandas documentation — pandas 2.1.4 documentation&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;40&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/tech/discussions-40/</link>
      <pubDate>Tue, 26 Dec 2023 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/tech/discussions-40/</guid>
      
    </item>
    
    <item>
      <title>GitHub Discussions 使用与思考</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;从2023年7月起我所有可公开的文档都保存在了 &lt;a href=&#34;https://github.com/shenweiyan/Knowledge-Garden/discussions&#34;&gt;GitHub Discussions&lt;/a&gt; 上，作为博客、IED 编辑器，以及评论使用，GitHub Discussions 是完全没问题的。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;h2 id=&#34;开源的代名词&#34;&gt;开源的代名词&lt;a class=&#34;headerlink&#34; href=&#34;#开源的代名词&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;开源已成为 GitHub 的代名词。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;当开发者谈论开源时，通常会想到 GitHub，它不仅仅是一个代码托管平台，更是一个汇聚了全球开发者的社交中心。过去，开发者发布一款软件后，都是在自己的小圈子里默默努力和交流，现在通过 GitHub 平台可以方便地与全球的开发者分享、交流和协作。贡献者在这里展示自己的才华，追随者在这里寻找强者的脚印，等待着被世人认可的时刻。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;体验与感受&#34;&gt;体验与感受&lt;a class=&#34;headerlink&#34; href=&#34;#体验与感受&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;由于 GitHub 是直接 markdown 源码进行书写，正常的导出基本不会有格式错乱的问题，这一点非常好。不像有一些富文本的编辑器，动不动就给你增加几个换行或者空格什么的额外字符。&lt;/p&gt;
&lt;p&gt;借助 GitHub GraphQL API + Python + GitHub Actions 进行每天定时导出非常顺滑，导出来的文档可以随意折腾，自由度非常大。&lt;/p&gt;
&lt;h2 id=&#34;专业书籍文档&#34;&gt;专业书籍文档&lt;a class=&#34;headerlink&#34; href=&#34;#专业书籍文档&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;今天忽然想到的一个问题，即如果作为专业性比较强的系列文档写作，如《&lt;a href=&#34;https://www.hello-algo.com/&#34;&gt;Hello 算法&lt;/a&gt;》 这样专业性和逻辑性非常明确的专业书籍，使用 GitHub Discussions 写作应该是有点不太合适。&lt;/p&gt;
&lt;p&gt;但又仔细想了一下，如果&lt;strong&gt;只是写作&lt;/strong&gt;应该是没问题的 —— 我们可以用 sections 或者 categories，甚至是 tags 进行书籍分类，最后在导出的时候借助这些标签把相关的文档整合到一块，再借助 nav 梳理成大纲展现给读者阅读就可以。所以，总的来说可以用于专业书籍&lt;strong&gt;写作(编辑)&lt;/strong&gt;，但&lt;strong&gt;不太适合用于专业书籍的呈现和阅读&lt;/strong&gt; —— 主要是大纲和逻辑性会变得不明显。&lt;/p&gt;
&lt;h2 id=&#34;目录和分类标签&#34;&gt;目录和分类标签&lt;a class=&#34;headerlink&#34; href=&#34;#目录和分类标签&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;GitHub Discussions 目前&lt;a href=&#34;https://github.com/orgs/community/discussions/7960&#34;&gt;最多支持 25 个 categories&lt;/a&gt;，这是一个限制。因此，通过 section+category 我们在 Discussions 上最多只能实现两级的目录结构，所以对于三级和三级以上的目录结构目前暂时无能为力。&lt;/p&gt;
&lt;p&gt;因此，想到一个折中的解决方法：使用 labels 来区分第三级目录结构。
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;1.1-生信
  - 1.1.1-算法
  - 1.1.2-数据
  - 1.1.2-软件
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;然后，导出 Discussions 的时候需要在本地先在本地建立一个 &lt;code&gt;section+category: dictory&lt;/code&gt; 一一对应的字典，最后通过这个字典把不同的讨论 md 归档至对应的目录。
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;1.1-生信:
    1.1.1-算法: docs/cookbook/生物信息/算法
    1.1.2-数据: docs/cookbook/生物信息/数据
    1.1.2-软件: docs/cookbook/生物信息/软件
    ...
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;h2 id=&#34;github-graphql-api&#34;&gt;GitHub GraphQL API&lt;a class=&#34;headerlink&#34; href=&#34;#github-graphql-api&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;GitHub Discussions 的 API 操作主要依赖 &lt;a href=&#34;https://docs.github.com/zh/graphql/overview/about-the-graphql-api&#34;&gt;GitHub GraphQL API&lt;/a&gt;。&lt;/p&gt;
&lt;blockquote&gt;
&lt;h2 id=&#34;概述&#34;&gt;概述&lt;a class=&#34;headerlink&#34; href=&#34;#概述&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;GraphQL 是一种用于&lt;a href=&#34;https://www.redhat.com/zh/topics/api/what-are-application-programming-interfaces&#34;&gt;应用编程接口（API）&lt;/a&gt;的查询语言和服务器端运行时，它可以使客户端准确地获得所需的数据，没有任何冗余。&lt;/p&gt;
&lt;h2 id=&#34;graphql-有什么用&#34;&gt;GraphQL 有什么用？&lt;a class=&#34;headerlink&#34; href=&#34;#graphql-有什么用&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;GraphQL 旨在让 API 变得快速、灵活并且为开发人员提供便利。它甚至可以部署在名为 &lt;a href=&#34;https://github.com/graphql/graphiql&#34;&gt;GraphiQL&lt;/a&gt; 的&lt;a href=&#34;https://www.redhat.com/zh/topics/middleware/what-is-ide&#34;&gt;集成开发环境（IDE）&lt;/a&gt;中。作为 &lt;a href=&#34;https://www.redhat.com/zh/topics/integration/whats-the-difference-between-soap-rest&#34;&gt;REST&lt;/a&gt; 的替代方案，GraphQL 允许开发人员构建相应的请求，从而通过单个 API 调用从多个数据源中提取数据。&lt;/p&gt;
&lt;p&gt;此外，GraphQL 还可让 API 维护人员灵活地添加或弃用字段，而不会影响现有查询。开发人员可以使用自己喜欢的方法来构建 API，并且 GraphQL 规范将确保它们以可预测的方式在客户端发挥作用。&lt;/p&gt;
&lt;p&gt;From：《&lt;a href=&#34;https://www.redhat.com/zh/topics/api/what-is-graphql&#34;&gt;什么是 GraphQL？核心概念解析&lt;/a&gt;》- 红帽&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;中文文档：https://docs.github.com/zh/graphql/guides/introduction-to-graphql&lt;/li&gt;
&lt;li&gt;在线使用：https://docs.github.com/en/graphql/overview/explorer&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;获取-discussions-主要信息&#34;&gt;获取 discussions 主要信息&lt;a class=&#34;headerlink&#34; href=&#34;#获取-discussions-主要信息&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;{
  repository(owner: &amp;quot;shenweiyan&amp;quot;, name: &amp;quot;Knowledge-Garden&amp;quot;) {
    discussions(orderBy: {field: CREATED_AT, direction: DESC}, categoryId: null, first: 5) {
      nodes {
        title
        number
        url
        createdAt
        lastEditedAt
        updatedAt
        body
        bodyText
        bodyHTML
        author {
          login
        }
        category {
          name
        }
        labels(first: 100) {
          nodes {
            name
          }
        }
        comments(first: 10) {
          nodes {
            body
            author {
              login
            }
          }
        }
      }
      pageInfo {
        hasNextPage
        endCursor
      }
    }
  }
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;获取-discussions-categoryid&#34;&gt;获取 discussions categoryId&lt;a class=&#34;headerlink&#34; href=&#34;#获取-discussions-categoryid&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;参考：《&lt;a href=&#34;https://qiita.com/shooter/items/d59fbb43d0f118c95092&#34;&gt;how to get github discussions categoryId&lt;/a&gt;》&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;{
  repository(owner: &amp;quot;shenweiyan&amp;quot;, name: &amp;quot;Knowledge-Garden&amp;quot;) {
    id
    name
    discussionCategories(first: 30) {
      nodes {
        id
        name
      }
    }
  }
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;其他的一些问题&#34;&gt;其他的一些问题&lt;a class=&#34;headerlink&#34; href=&#34;#其他的一些问题&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;目前，通过 GitHub GraphQL API 暂时无法获取 Sections 的信息。&lt;/p&gt;
&lt;h2 id=&#34;简单的总结&#34;&gt;简单的总结&lt;a class=&#34;headerlink&#34; href=&#34;#简单的总结&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;拥抱 GitHub Discussions 的一个前提是你可以随时登录 GitHub，如果你已经解决了这个问题，也想着像我一样 Using Github discussions as your blog engine，那么你可以参考一下我的 &lt;a href=&#34;https://github.com/shenweiyan/Knowledge-Garden/&#34;&gt;shenweiyan/Knowledge-Garden&lt;/a&gt; 仓库。&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;38&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-38/</link>
      <pubDate>Wed, 06 Dec 2023 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-38/</guid>
      
    </item>
    
    <item>
      <title>MkDocs Material 安装部署和使用</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;MkDocs 是一个快速、简单、华丽的静态网站生成器，适用于构建项目文档。文档源文件以 Markdown 编写，并使用一个 YAML 文件来进行配置。&lt;a href=&#34;https://squidfunk.github.io/mkdocs-material/&#34;&gt;Material for MkDocs&lt;/a&gt; 是 &lt;a href=&#34;https://www.mkdocs.org/&#34;&gt;MkDocs&lt;/a&gt; 的一个主题配置，更加简洁美观，更新和维护也更加及时和频繁，且社区也更加活跃。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;h2 id=&#34;安装&#34;&gt;安装&lt;a class=&#34;headerlink&#34; href=&#34;#安装&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;主要使用的一些软件包以及模块 (requirements.txt) 如下：
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;mkdocs==1.5.3
mkdocs-material
mkdocs-rss-plugin
mkdocs-git-revision-date-plugin
mkdocs-include-dir-to-nav==1.2.0
mkdocs-glightbox
jieba
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;pip3 install -r requirements.txt
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;查看 &lt;code&gt;mkdocs-material&lt;/code&gt;, &lt;code&gt;mkdocs&lt;/code&gt; 的版本：
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;err&#34;&gt;$&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mkdocs&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;version&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;mkdocs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;version&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;1.5.3&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;usr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;local&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;software&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;python&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;3.9.18&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lib&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;python3&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;.9&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;site&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;packages&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mkdocs&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Python&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;3.9&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;err&#34;&gt;$&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pip3&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;show&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mkdocs&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;material&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mkdocs&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;material&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Version&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;9.4.4&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Summary&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Documentation&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;that&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;simply&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;works&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Home&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;page&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; 
&lt;span class=&#34;n&#34;&gt;Author&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; 
&lt;span class=&#34;n&#34;&gt;Author&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;email&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Martin&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Donath&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;martin&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;donath&lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;@squidfunk&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;com&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;License&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; 
&lt;span class=&#34;n&#34;&gt;Location&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;usr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;local&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;software&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;python&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;3.9.18&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lib&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;python3&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;.9&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;site&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;packages&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Requires&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;babel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;colorama&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;jinja2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;markdown&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mkdocs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mkdocs&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;material&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;extensions&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;paginate&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pygments&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pymdown&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;extensions&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;regex&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;requests&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Required&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;by&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;h2 id=&#34;使用&#34;&gt;使用&lt;a class=&#34;headerlink&#34; href=&#34;#使用&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;本地预览：
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$ mkdocs serve -a 0.0.0.0:8000
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;h2 id=&#34;问题与解决&#34;&gt;问题与解决&lt;a class=&#34;headerlink&#34; href=&#34;#问题与解决&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Pagination 分页与 &lt;code&gt;git-revision-date&lt;/code&gt; 冲突，导致无法构建 - 参考 &lt;a href=&#34;https://github.com/squidfunk/mkdocs-material/discussions/6156&#34;&gt;mkdocs-material/discussions/6156&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/squidfunk/mkdocs-material/issues/5134&#34;&gt;Support Markdown in the copyright string #5134&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/squidfunk/mkdocs-material/discussions/4969&#34;&gt;如何在 MkDocs 的版权部分自动添加年份 - squidfunk/mkdocs-material#4969&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/squidfunk/mkdocs-material/discussions/6324&#34;&gt;如何定制博客插件的归档页面 - squidfunk/mkdocs-material#6324&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;期待的功能&#34;&gt;期待的功能&lt;a class=&#34;headerlink&#34; href=&#34;#期待的功能&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;这是一个个人非常期待的功能，大部分目前已经可以在 &lt;a href=&#34;https://squidfunk.github.io/mkdocs-material/insiders/&#34;&gt;Insiders&lt;/a&gt; 版本中使用，社区公开的版本尚无法使用。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;博客插件的自定义归档、目录页面每页文档数 - &lt;a href=&#34;https://github.com/squidfunk/mkdocs-material/issues/6383&#34;&gt;squidfunk/mkdocs-material#6383&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;内置隐私插件（方便内网/国内部署加速访问）- &lt;a href=&#34;https://squidfunk.github.io/mkdocs-material/plugins/privacy/&#34;&gt;Built-in privacy plugin - Material for MkDocs&lt;/a&gt;  &lt;br /&gt;
    内置隐私插件(privacy plugin) 在 &lt;a href=&#34;https://github.com/squidfunk/mkdocs-material/releases/tag/9.5.0&#34;&gt;9.5.0&lt;/a&gt; 中已经k可以正常使用了，下一个值得期待的就是该插件的 &lt;a href=&#34;https://squidfunk.github.io/mkdocs-material/plugins/privacy/#config.assets_exclude&#34;&gt;&lt;code&gt;assets_exclude&lt;/code&gt;&lt;/a&gt; 功能！&lt;/li&gt;
&lt;/ul&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;37&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-37/</link>
      <pubDate>Wed, 06 Dec 2023 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-37/</guid>
      
    </item>
    
    <item>
      <title>为 Material for MkDocs 增加博客插件</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;Material for MkDocs 从 9.2.0 开始内置博客插件，内置博客插件添加了对从帖子文件夹构建博客的支持，这些帖子带有日期和其他结构化数据注释。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;Material for MkDocs makes it very easy to build a blog, either as a sidecar to your documentation or standalone. Focus on your content while the engine does all the heavy lifting, automatically generating archive and category indexes, post slugs, configurable pagination and more.&lt;/p&gt;
&lt;p&gt;Material for MkDocs 使构建博客变得非常容易，无论是作为文档的附属工具还是独立的博客。专注于您的内容，而引擎会完成所有繁重的工作，自动生成存档和类别索引、帖子段、可配置的分页等等。&lt;/p&gt;
&lt;p&gt;存在的一些问题和使用体验：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;在 Markdown 中使用 &lt;code&gt;&amp;lt;!-- more --&amp;gt;&lt;/code&gt; 的写法分割 description 和全文，总感觉有点别扭；&lt;/li&gt;
&lt;li&gt;Pagination 分页与 &lt;code&gt;git-revision-date&lt;/code&gt; 冲突，会引发构建错误 - 参考 &lt;a href=&#34;https://github.com/squidfunk/mkdocs-material/discussions/6156&#34;&gt;mkdocs-material/discussions#6156&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;写博客&#34;&gt;写博客&lt;a class=&#34;headerlink&#34; href=&#34;#写博客&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;有感于 Material for MkDocs 的博客结构，现在基本上可以实现使用 Discussions 进行 MkDocs blog 编辑与写作 —— 在 Discussions 上写完文章，借助第三方工具或者 GitHub Actions 导出为 Markdown 文件，保存到 &lt;code&gt;docs/blog/posts&lt;/code&gt; 就可以啦！&lt;/p&gt;
&lt;h2 id=&#34;加评论&#34;&gt;加评论&lt;a class=&#34;headerlink&#34; href=&#34;#加评论&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;借助 &lt;a href=&#34;https://giscus.app/zh-CN&#34;&gt;giscus&lt;/a&gt;，可以非常方便在文章页中插入指定的 discussions —— 在导出 discussions 的时候，在文章尾部增加类似以下 JavaScript 即可：
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;script&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;src&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;https://giscus.app/client.js&amp;quot;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;repo&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;shenweiyan/Knowledge-Garden&amp;quot;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;repo&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;R_kgDOKgxWlg&amp;quot;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;mapping&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;number&amp;quot;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;term&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;4&amp;quot;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;reactions&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;enabled&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;1&amp;quot;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;emit&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;metadata&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;0&amp;quot;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;position&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;bottom&amp;quot;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;theme&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;light&amp;quot;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;lang&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;zh-CN&amp;quot;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;crossorigin&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;anonymous&amp;quot;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;async&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;h2 id=&#34;自定义归档页面&#34;&gt;自定义归档页面&lt;a class=&#34;headerlink&#34; href=&#34;#自定义归档页面&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/squidfunk/mkdocs-material&#34;&gt;mkdocs-material&lt;/a&gt; 的归档页面跟博客 index 主页面基本是一个样，如果想要列表式的自定义，可以参考 &lt;a href=&#34;https://github.com/squidfunk/mkdocs-material/discussions/6324&#34;&gt;squidfunk/mkdocs-material#6324&lt;/a&gt; 和 &lt;a href=&#34;https://github.com/squidfunk/mkdocs-material/issues/6383&#34;&gt;squidfunk/mkdocs-material#6383&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;官方在 &lt;a href=&#34;https://github.com/squidfunk/mkdocs-material-insiders/commit/8ecee7b9dbdc5b2a0befd043a048ad25d56c784f&#34;&gt;8ecee7b&lt;/a&gt; (Insiders) 中增加了几个个性化的新设置参数：  &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://squidfunk.github.io/mkdocs-material/plugins/blog/#config.archive_pagination&#34;&gt;&lt;code&gt;archive_pagination&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://squidfunk.github.io/mkdocs-material/plugins/blog/#config.archive_pagination_per_page&#34;&gt;&lt;code&gt;archive_pagination_per_page&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://squidfunk.github.io/mkdocs-material/plugins/blog/#config.categories_pagination&#34;&gt;&lt;code&gt;categories_pagination&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://squidfunk.github.io/mkdocs-material/plugins/blog/#config.categories_pagination_per_page&#34;&gt;&lt;code&gt;categories_pagination_per_page&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;所以，等开放给公用版本使用后，可以再好好折腾一下。&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;36&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-36/</link>
      <pubDate>Wed, 06 Dec 2023 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-36/</guid>
      
    </item>
    
    <item>
      <title>跳过任意开屏广告和内部弹窗广告</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;今天去用了一下 &lt;a href=&#34;https://github.com/gkd-kit/gkd&#34;&gt;gkd&lt;/a&gt;—— 点击跳过任意开屏广告/点击关闭应用内部任意弹窗广告的应用，发现真不错，记录一下遇到的一些问题。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;具体使用步骤如下。&lt;/p&gt;
&lt;h2 id=&#34;1-开启权限&#34;&gt;1. 开启权限&lt;a class=&#34;headerlink&#34; href=&#34;#1-开启权限&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;应用安装后，&lt;strong&gt;&amp;ldquo;主页&amp;rdquo;&lt;/strong&gt; 页面的这几个权限都需要开启（尤其是&lt;strong&gt;无障碍权限&lt;/strong&gt;），否则应用无法跳过广告，不起作用。   &lt;/p&gt;
&lt;p&gt;&lt;img width=300px src=&#34;https://slab-1251708715.cos.ap-guangzhou.myqcloud.com/KGarden/2023/gkd-home.jpg&#34; alt=&#34;gkd-home&#34;&gt;&lt;/p&gt;
&lt;p&gt;华为鸿蒙系统怎么开启无障碍模式（也可以参考：&lt;a href=&#34;https://consumer.huawei.com/cn/support/content/zh-cn15849085/&#34;&gt;通过快捷方式启动无障碍功能&lt;/a&gt;）： &lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;打开辅助功能，进入手机设置界面，点击【辅助功能】。&lt;/li&gt;
&lt;li&gt;打开无障碍，点击【无障碍】。&lt;/li&gt;
&lt;li&gt;打开已安装的服务，下拉到页面底部，点击【已安装的服务】。&lt;/li&gt;
&lt;li&gt;选择服务，选择要设置的服务【GKD】，点击进入。&lt;/li&gt;
&lt;li&gt;打开服务开关，点击服务右侧【开关】按钮。&lt;/li&gt;
&lt;li&gt;确定打开。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;这里会有一个问题：&lt;strong&gt;鸿蒙手机无障碍打开后，点击清理后台会自动关闭&lt;/strong&gt;！参考：&lt;a href=&#34;https://github.com/gkd-kit/gkd/issues/201&#34;&gt;gkd-kit/gkd#201&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;具体可以参考华为官方给出的解决方法——《&lt;a href=&#34;https://consumer.huawei.com/cn/support/content/zh-cn00410039/&#34;&gt;华为手机/平板无障碍中的第三方应用的服务开关自动关闭&lt;/a&gt;》。&lt;/p&gt;
&lt;h2 id=&#34;2-更新订阅&#34;&gt;2. 更新订阅&lt;a class=&#34;headerlink&#34; href=&#34;#2-更新订阅&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;应用安装后，&lt;strong&gt;&amp;ldquo;订阅&amp;rdquo;&lt;/strong&gt; 页面的本地订阅如果没有规则，则需要下拉执行更新一下即可（参考：&lt;a href=&#34;https://github.com/gkd-kit/gkd/issues/100&#34;&gt;gkd-kit/gkd#100&lt;/a&gt;）。&lt;/p&gt;
&lt;p&gt;&lt;img width=300px src=&#34;https://slab-1251708715.cos.ap-guangzhou.myqcloud.com/KGarden/2023/gkd-dy.jpg&#34; alt=&#34;GKD-订阅&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;3-设置&#34;&gt;3. 设置&lt;a class=&#34;headerlink&#34; href=&#34;#3-设置&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;这是个人在使用时候 &lt;strong&gt;&amp;ldquo;设置&amp;rdquo;&lt;/strong&gt; 页面的一个截图。    &lt;/p&gt;
&lt;p&gt;&lt;img width=300px src=&#34;https://slab-1251708715.cos.ap-guangzhou.myqcloud.com/KGarden/2023/gkd-setting.jpg&#34; alt=&#34;GKD-订阅&#34;&gt;&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;39&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-39/</link>
      <pubDate>Wed, 06 Dec 2023 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-39/</guid>
      
    </item>
    
    <item>
      <title>使用 meta 实现页面的定时刷新或跳转</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;这个方法最开始是在 &lt;a href=&#34;https://github.com/yanlinlin82&#34;&gt;Linlin Yan (颜林林)&lt;/a&gt; 的 GitHub Pages 上第一次看到。后来，随着自己也用上了，就开始有了更深一些的认识。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;h2 id=&#34;跳转域名&#34;&gt;跳转域名&lt;a class=&#34;headerlink&#34; href=&#34;#跳转域名&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;在 &lt;a href=&#34;https://github.com/yanlinlin82/yanlinlin82.github.io/tree/master&#34;&gt;yanlinlin82/yanlinlin82.github.io&lt;/a&gt; 看到一个通过 &lt;a href=&#34;https://yanlinlin82.github.io&#34;&gt;https://yanlinlin82.github.io&lt;/a&gt; 可以直接重定向到 &lt;a href=&#34;https://yanlinlin.cn/&#34;&gt;https://yanlinlin.cn/&lt;/a&gt; 的用法 —— 只需要把 &lt;code&gt;index.html&lt;/code&gt; 写成这样就可以：
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;cp&#34;&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;html&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
  &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;head&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;meta&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;http-equiv&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;refresh&amp;quot;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;content&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;0; url=https://yanlinlin.cn/&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;head&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
  &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;body&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;body&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;html&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;h2 id=&#34;页面定时跳转与刷新&#34;&gt;页面定时跳转与刷新&lt;a class=&#34;headerlink&#34; href=&#34;#页面定时跳转与刷新&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;这部分的内容主要来源自：《&lt;a href=&#34;https://www.zhangxinxu.com/wordpress/2015/03/meta-http-equiv-refresh-content/&#34;&gt;小tip: 使用meta实现页面的定时刷新或跳转&lt;/a&gt;》。&lt;/p&gt;
&lt;blockquote&gt;
&lt;h3 id=&#34;meta-源信息功能之页面定时跳转与刷新&#34;&gt;meta 源信息功能之页面定时跳转与刷新&lt;a class=&#34;headerlink&#34; href=&#34;#meta-源信息功能之页面定时跳转与刷新&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;几乎所有的网页头部都有&lt;code&gt;&amp;lt;meta&amp;gt;&lt;/code&gt;源信息。除了我们常用的定义编码、关键字(name=”keywords”)、描述(name=”description”)(for SEO)，还可以定义视区大小、缩放比例等(for 移动端)，如下：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width,initial-scale=1.0&amp;quot;&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;以及，定义网页的过期时间，Cookie 的过期时间等等。&lt;/p&gt;
&lt;p&gt;文本要介绍的内容，科科，跟上面都没关系。哦，抱歉，都有关系，只是名称我故意没提到。主角嘛，总要最后闪亮登场！&lt;/p&gt;
&lt;p&gt;就是我们网页平时跳转，还可以使用 &lt;code&gt;&amp;lt;meta&amp;gt;&lt;/code&gt; 实现，下面几个典型代码示例：  &lt;br /&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;meta&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;http-equiv&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;refresh&amp;quot;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;content&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;5&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
这个表示当前页面每5秒钟刷一下，刷一下~&lt;/p&gt;
&lt;p&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;meta&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;http-equiv&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;refresh&amp;quot;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;content&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;2; url=&amp;#39;/&amp;#39;&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
这个表示当前页面2秒后跳到首页~    &lt;/p&gt;
&lt;p&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;meta&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;http-equiv&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;refresh&amp;quot;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;content&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;0; url=&amp;#39;http://www.qq.com/&amp;#39;&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
页面直接跳转到腾讯网~&lt;/p&gt;
&lt;p&gt;所以，当我们下次遇到“登录成功，正在跳转到您之前访问页面……”的时候，可以使用&lt;code&gt;&amp;lt;meta&amp;gt;&lt;/code&gt;的这个&lt;code&gt;refresh&lt;/code&gt;刷新，跳转功能，可以说是成本最低的。    &lt;/p&gt;
&lt;p&gt;您可以狠狠地点击这里：&lt;a href=&#34;http://www.zhangxinxu.com/study/201503/meta-fresh-content.html&#34;&gt;meta与当前页面定时刷新Demo&lt;/a&gt;   &lt;br /&gt;
&lt;img alt=&#34;meta-refresh&#34; src=&#34;https://gi.weiyan.tech/2024/01/meta-refresh.37epe9yaam80.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;上面 Demo 效果就是上面第1个示例代码效果。        &lt;/p&gt;
&lt;p&gt;根据我的测试，此特性包括IE7在内的浏览器都是支持的。    &lt;/p&gt;
&lt;h3 id=&#34;问题来了为何-meta-跳转不火呢&#34;&gt;问题来了：为何 meta 跳转不火呢？&lt;a class=&#34;headerlink&#34; href=&#34;#问题来了为何-meta-跳转不火呢&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;大家可以看到，&lt;code&gt;meta&lt;/code&gt; 跳转，使用方便，不用写 JS，不用会后台代码，定时跳转刷新什么的玩得照样很溜，而且兼容性好，为啥总感觉不温不火，很少看见有人提及呢？    &lt;/p&gt;
&lt;p&gt;新晋的小伙伴不知有没有听过这么一个词，叫做“万恶的IE6年代”。&lt;/p&gt;
&lt;p&gt;据说，当年，这一批老旧的浏览器，问题很多，其中就有对&lt;code&gt;meta&lt;/code&gt; 两个小小的不友好。我也是听说，不一定准确。坊间是这么传闻的：    &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;时间设为0的跳转，有时候页面会闪一下；    &lt;/li&gt;
&lt;li&gt;跳转到其他页面，浏览器后退按钮是不能用的；     &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;但是啊，现在是什么年代啊，监狱风云都拍到第二季了，这些老问题，我觉得就可以忽略不计了。    &lt;/p&gt;
&lt;p&gt;不妨大胆试试 &lt;code&gt;meta&lt;/code&gt; 跳转，好好利用下浏览器的原生特性，说不定就会发现比什么 JS 跳转之流用得更开心。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;所以，在文章的最后有一个小想法 —— 我们是不是也可以利用这个方法实现无数个链接 301 重定向( URL 转发)，再也不需要担心是否需要主机+Nginx 之类！&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;33&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-33/</link>
      <pubDate>Tue, 05 Dec 2023 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-33/</guid>
      
    </item>
    
    <item>
      <title>博客与写作的一些思考</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;关于写作原本的想法，只是想写点自己在学习、工作、生活上的一些心得和体会，把一些知识点记录下来。&lt;/p&gt;
&lt;p&gt;留言的初衷是，希望自己写下来的东西能够有人一起探讨。哪怕你把我的观点批评得一无是处也可以，哪怕你说我的句子狗屁不通也没关系，只要有评判，我相信总有一天我会变得更好。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;写作也好留言也罢，博客也只是一种实现的载体，语雀、博客园也是同样的道理，平台的选择虽然重要，但根本还是在于内容。&lt;/p&gt;
&lt;p&gt;每次看到人家一些内容翔实，界面优雅的博客，总要跟自己说，要忍住再去折腾博客的冲动，什么 UI，什么 CSS/HTML，都是浮云，内容才是核心，老老实实回归最简单的 Issues 和 Discussions 已经足够了。另外，需要知道的是，博客其实就是写给自己看的，什么 SEO 流量、关注度、知名度还是需要一颗随缘的心态。&lt;/p&gt;
&lt;p&gt;使用 Issues 当作博客也是挺不错的~&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/Meekdai/Gmeek&#34;&gt;https://github.com/Meekdai/Gmeek&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/yihong0618/gitblog&#34;&gt;https://github.com/yihong0618/gitblog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/yutingzhao1991/github-blogs-collector&#34;&gt;https://github.com/yutingzhao1991/github-blogs-collector&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;关于部分平台商业化的写作，有两点自认为讲的挺好：    &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;商业化已经改变了写作的初衷。    &lt;/li&gt;
&lt;li&gt;当写文章变成盈利的手段，那么，写出来的东西是没有灵魂的。&lt;/li&gt;
&lt;/ul&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;34&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-34/</link>
      <pubDate>Tue, 05 Dec 2023 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-34/</guid>
      
    </item>
    
    <item>
      <title>2022 年的十大生物学突破</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;作者 |&lt;/strong&gt; &lt;a href=&#34;https://substack.com/profile/11154869-niko-mccarty&#34;&gt;Niko McCarty&lt;/a&gt;  &lt;br /&gt;
&lt;strong&gt;翻译 |&lt;/strong&gt; &lt;a href=&#34;https://www.yuque.com/shenweiyan&#34;&gt;章鱼猫先生&lt;/a&gt;  &lt;br /&gt;
&lt;strong&gt;日期 |&lt;/strong&gt; 原文发表于 2022.12.10  &lt;br /&gt;
&lt;strong&gt;来源 |&lt;/strong&gt; &lt;a href=&#34;https://cell.substack.com/p/biology-breakthroughs-2022&#34;&gt;Biology Breakthroughs of 2022&lt;/a&gt; - Codon    &lt;/p&gt;
&lt;p&gt;您正在阅读 Codon，这是一份关于生物 + 技术进步和为人类创造更光明未来的想法的时事通讯。  &lt;br /&gt;
这是今年的最后一部作品。几周后我会在这里见到你！    &lt;/p&gt;
&lt;/blockquote&gt;
&lt;!-- more --&gt;

&lt;p align=&#34;center&#34;&gt;
    &lt;img src=&#34;https://slab-1251708715.cos.ap-guangzhou.myqcloud.com/KGarden/2023/2022-Biology-Breakthroughs-1.webp&#34; alt&gt;&lt;br&gt;
    &lt;em&gt;大约 1950 年代，戴着加压氧气面罩的男子&lt;/em&gt;
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;当你经历历史时，历史永远不会像历史。它总是看起来很混乱和凌乱，而且总是让人感觉不舒服。&amp;rdquo;  &lt;br /&gt;
—— 约翰·W·加德纳&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;许多我非常敬佩的作家都对“进步的停滞”写出了令人信服的论战。科学越来越难，发现越来越小（平均而言），这两件事都很糟糕。&lt;/p&gt;
&lt;p&gt;如果你召集来自世界顶级院系的 93 位物理学家，让他们将 1910 年代获得诺贝尔奖的发现与 80 年代的另一个发现进行比较，他们通常会说更早的发现更重要。&lt;/p&gt;
&lt;p&gt;与五十年前相比，今天实现技术飞跃也更加困难。将计算机芯片上的晶体管数量增加一倍（又名摩尔定律）需要的研究人员数量是 1970 年代初期的 &lt;a href=&#34;https://www.aeaweb.org/articles?id=10.1257/aer.20180338&#34;&gt;18 倍&lt;/a&gt;。今天发表的学术论文被美国专利引用的可能性不到 30 年前发表的论文的&lt;a href=&#34;https://mattsclancy.substack.com/p/science-is-getting-harder&#34;&gt;一半&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;这些不断缩减的回报正处于历史高位之中。&lt;/p&gt;
&lt;p&gt;美国每年授予超过 50,000 个科学和工程博士学位；这个数字在 1960 年还不到 10,000。联邦对科学的资助也（基本上）处于历史最高水平。科学论文的总数呈指数级增长，但每篇论文的平均作者人数在过去一百年里大约翻了两番。&lt;/p&gt;
&lt;p align=&#34;center&#34;&gt;
    &lt;img src=&#34;https://slab-1251708715.cos.ap-guangzhou.myqcloud.com/KGarden/2023/2022-Biology-Breakthroughs-2.jpeg&#34; alt&gt;&lt;br&gt;
    &lt;em&gt;From &#34;The Science of Science&#34; by &lt;a href=&#34;https://www.dashunwang.com/book/the-science-of-science&#34;&gt;Wang and Barabási&lt;/a&gt;.&lt;/em&gt;
&lt;/p&gt;

&lt;p&gt;出于某种原因，这些都是生物学进步的不完美指标。但是有很多零散的证据表明，科学正在变得越来越不划算，即使感觉进步从未像现在这样快。我相信——基于轶事证据，真的——如果以每年获得诺贝尔奖的发现为基准，生物技术不会停滞不前。只是诺贝尔奖每年都会颁发一次，而且不乏令人惊叹的论文在排队等待获得最高奖项。所以，当然，并不是每个有价值的人都会赢。&lt;/p&gt;
&lt;p&gt;哦，如果你拿我之前提到的物理学调查结果，对医学和化学做同样的实验，结果就会颠倒过来——20 世纪下半叶发现的相对重要性超过了上半叶。&lt;/p&gt;
&lt;p&gt;不管停滞与否，生物学都存在巨大的低效率。它可以——应该！- 移动得更快。&lt;/p&gt;
&lt;p&gt;许多论文需要一年多的时间才能发表，在期刊官僚的严密监视下，被搁置在数字化的边缘。漫长的等待可能也不值得——同行评审通常是无用的，而且很多糟糕的科学无论如何都能通过。许多伟大的想法也从来没有发表在论文上，因为，好吧，他们从来没有得到资助。NIH 拨款审查非常不一致。如果您向 43 位不同的审稿人提供 25 份拨款建议，他们的评定者间可靠性（衡量分数一致性的指标）基本上为零，即使拨款已经获得资金和先前评审小组的高分！给予相同审稿人的无资金资助与有资金资助的资助得分一样。&lt;/p&gt;
&lt;p&gt;那么生物学文献呢？那也是一团糟。山姆·罗德里克斯 (&lt;a href=&#34;https://www.sam-rodriques.com/post/why-is-progress-in-biology-so-slow&#34;&gt;Sam Rodriques&lt;/a&gt;) 在最近的一篇文章中写道，科学论文“因委托而变得不可靠”，并且“因遗漏而变得不可靠”。换句话说，一些研究（一小部分）只是编造的。教授或学生为了发表论文而捏造数字，如果有人说他们在胡说八道，编辑可能要过&lt;a href=&#34;https://newscience.substack.com/p/laws-of-science&#34;&gt;好几年&lt;/a&gt;才会撤稿。&lt;/p&gt;
&lt;p&gt;不过，更大的问题可能是疏忽。科学期刊喜欢发表积极的结果，所以大多数消极的发现永远不会出现在光鲜的期刊上。如果有人进行的实验表明药物 A 与受体 B 结合，他们会发表它——但忽略提及药物 A 不会通过 Z 与受体 C 结合。无效结果很少传给科学家，他们中的许多人已经几个月来一次又一次尝试实验的痛苦经历，后来才发现 1970 年代的一篇不起眼的论文使他们所有的努力都变得毫无意义。&lt;/p&gt;
&lt;p&gt;我告诉你这些悲伤的事情——停滞不前的科学和可怕的低效率的故事——是为了说明一个观点：&lt;strong&gt;生物学在去年取得了如此大的进步，真是令人惊讶&lt;/strong&gt;。生物学的进步证明了人类渴望探索、失败，然后继续前进的愿望。这份时事通讯庆祝人类的成就，并重点介绍了过去 12 个月&lt;strong&gt;生物学领域的十大进步&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;此列表中的所有内容均来自 Codon 的上一期，因此希望您能在评论中指出我的错误和遗漏。我的入选标准很简单：该列表仅包括 2022 年期间发布到 bioRxiv 或发表在期刊上的论文。我不包括公司成就——这实际上可能是它自己的列表——除非他们发布了数据。(入选)列表中的一些项目包括了多篇论文，因为整个子领域发展得非常快。&lt;/p&gt;
&lt;p&gt;汇总“十佳排名”最大的危险是完全主观的，有很多优秀的东西没有入选，而且很多其他作家已经做到了(虽然我还没有看到专门针对生物学的清单)。诺亚·史密斯 (Noah Smith) 发布了他 2023 年的技术乐观主义清单 (&lt;a href=&#34;https://noahpinion.substack.com/p/techno-optimism-for-2023&#34;&gt;techno-optimism list&lt;/a&gt;)，其中包括对生物技术的简要提及，而《大西洋月刊》(The Atlantic) 发表了他们的 &amp;ldquo;年度突破 (&lt;a href=&#34;https://www.theatlantic.com/newsletters/archive/2022/12/technology-medicine-law-ai-10-breakthroughs-2022/672390/&#34;&gt;breakthroughs of the year&lt;/a&gt;)&amp;rdquo;，然后立即将该文章设置为付费文章。&lt;/p&gt;
&lt;p&gt;然而，有必要专门为生物学列出一份完整的榜单，因为很多伟大的事情在人工智能的阴影下被忽略了。人类基因组计划（始于 1990 年）终于在&lt;a href=&#34;https://www.science.org/toc/science/376/6588&#34;&gt;今年完成了&lt;/a&gt;，一个庞大的科学家团队填补了最后 8% 的序列空白。科学家们还使用 mirror-image DNA 聚合酶制作了镜像 DNA (&lt;a href=&#34;https://www.nature.com/articles/s41587-022-01337-8&#34;&gt;mirror-image DNA&lt;/a&gt;)，并发现了一类新的 CRISPR 蛋白质，它们可以&lt;a href=&#34;https://cell.substack.com/p/crispr-can-cut-proteins-too-index&#34;&gt;剪切蛋白质&lt;/a&gt;而不是基因。机器学习正在蛋白质工程中掀起波澜，例如有一种基于算法被设计出来的酶，这种酶可以比自然界中发现的任何酶更快地&lt;a href=&#34;https://cell.substack.com/p/ai-designed-enzyme-eats-plastic&#34;&gt;分解 PET 塑料&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;我不确定今年的进展是否与生物进展是否整体停滞不前有关。但有一件事是不变的：生物学变得越来越奇怪，而我会一直关注它。&lt;/p&gt;
&lt;h3 id=&#34;10-走向合成细胞&#34;&gt;10. 走向合成细胞&lt;a class=&#34;headerlink&#34; href=&#34;#10-走向合成细胞&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;从纯化学成分构建合成细胞是生物学的圣杯。如果实现了这一壮举，将证明我们已足够详细地理解生命运作的大体轮廓，并有足够的细节可以在实验室中重现它。这也将成为定制细胞的起点，这些细胞可以检测有毒污染或制造药物，同时又不会成为生物安全风险或存在感染风险。&lt;/p&gt;
&lt;p&gt;今年有几篇论文推动了合成细胞的发展，但其中有两篇让人印象深刻。第一篇是在 bioRxiv 上发表的预印本，据称是&lt;strong&gt;首次证明核糖体&lt;/strong&gt;（大分子蛋白质，负责合成其他蛋白质）&lt;strong&gt;可以在活细胞之外制造&lt;/strong&gt;。这是在合成细胞内从头生产蛋白质的重要起点。&lt;/p&gt;
&lt;p&gt;我们还在合成细胞分裂方面取得了重要进展。一项研究报告说，仅使用五种蛋白质就可以在脂肪泡中制造合成分裂环！当这些蛋白质聚集在一起时，它们会收缩并向气泡施加力（下面的 GIF）。    &lt;/p&gt;
&lt;p align=&#34;center&#34;&gt;
    &lt;img src=&#34;https://slab-1251708715.cos.ap-guangzhou.myqcloud.com/KGarden/2023/2022-Biology-Breakthroughs-3.webp&#34; alt&gt;&lt;br&gt;
    &lt;em&gt;合成分裂环在气泡内形成的延时摄影&lt;/em&gt;
&lt;/p&gt;

&lt;h3 id=&#34;9-更好的碱基编辑器&#34;&gt;9. 更好的碱基编辑器&lt;a class=&#34;headerlink&#34; href=&#34;#9-更好的碱基编辑器&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;早在 2016 年，《自然》杂志的一篇论文就报道了第一个碱基编辑蛋白，它可以将 DNA 中的 &amp;ldquo;C&amp;rdquo; 替换为 &amp;ldquo;T&amp;rdquo;，而无需将基因组一分为二。它的重要性立即显而易见——许多严重的遗传疾病是由 DNA 中的单个碱基交换引起的，现在这些突变可以被修复。&lt;/p&gt;
&lt;p&gt;碱基编辑器已经成熟。这些基因编辑蛋白在发明后仅仅五年就以创纪录的速度进入临床试验，目前 Verve、Beam 和其他公司正在进行针对镰状细胞病、高胆固醇和 Stargardt 病的&lt;a href=&#34;https://www.nature.com/articles/d41573-022-00124-z&#34;&gt;试验&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;然而，碱基编辑的主要挑战之一是编辑线粒体基因组很棘手，&lt;a href=&#34;https://www.chop.edu/conditions-diseases/mitochondrial-dna-common-mutation-syndromes&#34;&gt;许多遗传疾病&lt;/a&gt;都源于此。早在 2020 年，&lt;a href=&#34;https://www.nature.com/articles/s41586-020-2477-4&#34;&gt;一篇论文&lt;/a&gt;就表明碱基编辑器可以成功进入线粒体并使 &amp;ldquo;C&amp;rdquo; 变为 &amp;ldquo;T&amp;rdquo;，但其前景并不乐观。今年 5 月，&lt;a href=&#34;https://www.nature.com/articles/s41586-022-04836-5&#34;&gt;一篇后续论文&lt;/a&gt;称，实际上，这些线粒体基因编辑器诱发了 &amp;ldquo;大量&amp;rdquo; 脱靶突变，这意味着它们编辑的位置比预期的要多，弊大于利。&lt;/p&gt;
&lt;p&gt;但创新不会因失败而受阻。仅今年一年就至少发表了&lt;strong&gt;三篇论文&lt;/strong&gt;，使线粒体碱基编辑器变得&lt;a href=&#34;https://www.nature.com/articles/s41467-022-34784-7&#34;&gt;更小&lt;/a&gt;或&lt;a href=&#34;https://doi.org/10.1016/j.cell.2022.03.039&#34;&gt;更准确&lt;/a&gt;。让碱基编辑酶进入线粒体或编辑其 DNA 从未如此简单。我相信我们很快就会看到一些针对线粒体相关疾病的临床试验。&lt;/p&gt;
&lt;h3 id=&#34;8-噬菌体传播病毒&#34;&gt;8. 噬菌体传播病毒&lt;a class=&#34;headerlink&#34; href=&#34;#8-噬菌体传播病毒&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;今年对噬菌体来说是个好年头。这真的很合适，因为它也是 Felix d&amp;rsquo;Herelle 著名实验 &lt;strong&gt;100 周年纪念日&lt;/strong&gt;。1922 年，这位巴黎微生物学家证明噬菌体（感染细菌的小病毒）&lt;a href=&#34;https://jamanetwork.com/journals/jamapediatrics/article-abstract/1173780&#34;&gt;可以根除&lt;/a&gt;兔子和小动物体内的 &amp;ldquo;痢疾杆菌和其他杆菌&amp;rdquo;。&lt;/p&gt;
&lt;p&gt;我们现在正经历着临床疗法的准复兴时期，噬菌体经常被用来消除抗生素无效的感染（尤其是在欧洲医院）。几周前，一个欧洲科学家团队使用实验性噬菌体疗法&lt;a href=&#34;https://www.nature.com/articles/s41467-022-33294-w&#34;&gt;挽救了一名幼儿的生命&lt;/a&gt;。器官移植后，这个小男孩感染了抗生素无法清除的耐药性感染。在用定制的噬菌体鸡尾酒 (a custom-made phage cocktail) 治疗两年多后，孩子在家中恢复了健康。&lt;/p&gt;
&lt;p&gt;5 月，丹佛的一个团队使用噬菌体治疗一名患有严重囊性纤维化的男孩的脓肿分枝杆菌感染。噬菌体将感染控制了一年多，直到获得供体肺。我相信我们会在 2023 年看到定制噬菌体疗法进入临床。    &lt;/p&gt;
&lt;p align=&#34;center&#34;&gt;
    &lt;img src=&#34;https://slab-1251708715.cos.ap-guangzhou.myqcloud.com/KGarden/2023/2022-Biology-Breakthroughs-4.png&#34; alt&gt;&lt;br&gt;
&lt;/p&gt;

&lt;h3 id=&#34;7-血友病基因疗法&#34;&gt;7. 血友病基因疗法&lt;a class=&#34;headerlink&#34; href=&#34;#7-血友病基因疗法&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://www.fda.gov/vaccines-blood-biologics/vaccines/hemgenix&#34;&gt;Hemgenix&lt;/a&gt; 是一种治疗 B 型血友病的基因疗法，几个月前获得了 FDA 的批准。它的价格达到了 350 万美元，使其成为有史以来最昂贵的药物（这并不好）。根据 III 期临床试验数据，它在患者的是安全有效期&lt;a href=&#34;https://hemophilianewstoday.com/news/hemgenix-gene-therapy-benefits-sustained-2-years-phase-3-hope-b/&#34;&gt;至少两年&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;血友病 A 的基因治疗进展缓慢，该病由一种名为 VIII 的不同凝血蛋白突变引起。5 月的一项研究表明，针对肝脏的基因疗法在非人类灵长类动物中效果很好，可以导致 &amp;ldquo;总凝血因子 VIII 输出增加 10 倍以上&amp;rdquo;。3 月份发表的一项有 134 名参与者参与的 I/II 期临床试验表明，使用腺相关病毒进行的基因疗法，也用于肝脏，可减少血友病患者的出血事件。但是，它带来了很多副作用；每个试验参与者至少有一次不良事件。尽管如此，血友病仍是基因治疗的 &amp;ldquo;低悬&amp;rdquo; 目标之一，这些试验是其他正在进行中的目标的有用酸性测试。&lt;/p&gt;
&lt;h3 id=&#34;6-合成胚胎&#34;&gt;6. 合成胚胎&lt;a class=&#34;headerlink&#34; href=&#34;#6-合成胚胎&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;今年，从老鼠身上采集的干细胞被用来制造 &amp;ldquo;类胚胎结构&amp;rdquo;，其中包含工作的肠道、跳动的心脏和头脑的雏形，而不需要精子或卵子。&lt;/p&gt;
&lt;p&gt;以色列的 Jacob Hanna 团队发表了一篇最初的论文，于 8 月&lt;a href=&#34;https://doi.org/10.1016/j.cell.2022.07.028&#34;&gt;在 Cell 上发表&lt;/a&gt;。据《卫报》报道，这些作者后来成立了一家名为 Renewal Bio 的&lt;a href=&#34;https://www.theguardian.com/science/2022/aug/03/scientists-create-worlds-first-synthetic-embryos&#34;&gt;公司&lt;/a&gt;，&amp;rdquo;旨在培养人类合成胚胎，为医疗条件提供组织和细胞&amp;rdquo;。剑桥大学和加州理工学院的一个团队也在 8 月 2 日发布了一份&lt;a href=&#34;https://doi.org/10.1101/2022.08.01.502371&#34;&gt;预印本&lt;/a&gt;，表明这些 &amp;ldquo;合成胚胎&amp;rdquo;准确地概括了 &amp;ldquo;从胚胎第 5.5 天到第 8.5 天的发育事件，包括原肠胚形成、前后轴的形成、大脑，跳动的心脏结构，以及胚胎外组织（包括卵黄囊和绒毛膜）的发育。&amp;rdquo;&lt;/p&gt;
&lt;p&gt;合成胚胎——正确形成的概率只有 0.5% 左右——有几个潜在的用途。例如，这些结构可以用于研究器官在发育过程中的形成，也可用于在不使用真实胚胎的情况下测试药物。    &lt;/p&gt;
&lt;p align=&#34;center&#34;&gt;
    &lt;img src=&#34;https://slab-1251708715.cos.ap-guangzhou.myqcloud.com/KGarden/2023/2022-Biology-Breakthroughs-5.png&#34; alt&gt;&lt;br&gt;
    &lt;em&gt;Embryoids after six days. From Kasey Lau et al. on bioRxiv. &lt;a href=&#34;https://www.biorxiv.org/content/10.1101/2022.08.01.502371v1.full.pdf&#34;&gt;Link&lt;/a&gt;&lt;/em&gt;
&lt;/p&gt;

&lt;h3 id=&#34;5-细胞重编程&#34;&gt;5. 细胞重编程&lt;a class=&#34;headerlink&#34; href=&#34;#5-细胞重编程&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;今年的一大亮点：首次证明仅靠化学物质就能将人体细胞&lt;a href=&#34;https://www.nature.com/articles/s41586-022-04593-5&#34;&gt;重新编程为干细胞&lt;/a&gt;。这一突破需要十多年的时间，并需使用 11 种不同的化学物质，以及一到两个月的工作时间，所以仍需要一些微调。早在 2013 年，同一个小组就已使用这种方法实现了&lt;a href=&#34;https://www.science.org/doi/10.1126/science.1239278&#34;&gt;小鼠细胞&lt;/a&gt;的转化，但人类细胞的转化过程要困难得多。&lt;/p&gt;
&lt;p&gt;这也不是第一项重新编程人类细胞的研究。这一荣誉属于山中伸弥 (Shinya Yamanaka)，他在 2006 年通过表达四种蛋白质（现在著名的 &amp;ldquo;Yamanaka 因子&amp;rdquo;）对 iPS 细胞进行了重编程。在随后的几十年中，其他研究小组使用病毒或 mRNA 对细胞进行重编程。但这种仅使用化学物质的方法脱颖而出，因为它在体外使用简单，而且化学混合物可以通过静脉注射输送到体内——不需要基因编辑。该方法提供了一种相对简单的工具来生成可用于再生医学的人类多能干细胞。&lt;/p&gt;
&lt;h3 id=&#34;4-植物更容易设计&#34;&gt;4. 植物更容易设计&lt;a class=&#34;headerlink&#34; href=&#34;#4-植物更容易设计&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;我们生活在人类世，这是人类历史上一个可怕的时刻，&lt;strong&gt;人造材料的重量超过地球上所有的生物量&lt;/strong&gt;，而且重量每年都在继续增加一倍。    &lt;/p&gt;
&lt;p align=&#34;center&#34;&gt;
    &lt;img src=&#34;https://slab-1251708715.cos.ap-guangzhou.myqcloud.com/KGarden/2023/2022-Biology-Breakthroughs-6.webp&#34; alt&gt;&lt;br&gt;
    &lt;em&gt;&#34;Global human-made mass exceeds all living biomass,&#34; by Elhacham E et al. in Nature. &lt;a href=&#34;https://www.nature.com/articles/s41586-020-3010-5&#34;&gt;Link&lt;/a&gt;&lt;/em&gt;
&lt;/p&gt;

&lt;p&gt;在我们现有的生物质中，据估计有 83% 由植物持有。如果我们想要走出这场行星垃圾场的困境，那么，那么我们可能不得不对植物进行工程改造：让它们捕获更多的碳，&lt;a href=&#34;https://cell.substack.com/p/hacking-photosynthesis&#34;&gt;增强它们的光合作用&lt;/a&gt;，种植生产更多的食物，等等！&lt;/p&gt;
&lt;p&gt;幸运的是，做到这一点从未如此简单。几十年来，合成生物学家已经对细菌和哺乳动物细胞进行了改造，使其具有越来越复杂的遗传回路，即使植物在很大程度上被忽视了。今年，两项重要进展改变了平衡。&lt;/p&gt;
&lt;p&gt;先是基因编辑技术，如 CRISPR，现在已经过优化，可以在植物中更好地发挥作用。例如，Prime 编辑器是可以插入、删除或交换 DNA 的 &amp;ldquo;搜索和替换&amp;rdquo; 基因编辑器。与其他 Prime 编辑器相比，新的 Plant Prime Editor 在植物细胞中的效率提高了 &lt;a href=&#34;https://www.nature.com/articles/s41587-022-01254-w&#34;&gt;3.4 倍&lt;/a&gt;，并被用于在实验室中迅速使水稻植物对除草剂产生耐受性。&lt;/p&gt;
&lt;p&gt;但更大的进步是：斯坦福大学的一个团队发布了&lt;a href=&#34;https://www.science.org/doi/10.1126/science.abo4326&#34;&gt;一个完整的基因工具包&lt;/a&gt;，可以像我们对细菌进行编程一样对植物进行 &amp;ldquo;编程&amp;rdquo;。新工具包包括大量合成启动子和转录因子，可用于控制植物中的基因表达。这些遗传部分被用于构建能够在本塞姆氏烟草和拟南芥中进行布尔逻辑运算的基因回路。作者还建立了逻辑门，可以控制植物根部的基因表达水平，从而控制它们的侧向密度。&lt;/p&gt;
&lt;p align=&#34;center&#34;&gt;
    &lt;img src=&#34;https://slab-1251708715.cos.ap-guangzhou.myqcloud.com/KGarden/2023/2022-Biology-Breakthroughs-7.jpeg&#34; alt&gt;&lt;br&gt;
    &lt;em&gt;A genetic circuit controls how many lateral roots shoot out from a plant’s roots. Lateral density increases from left to right, with a wildtype plant shown on the far right. From &lt;a href=&#34;https://www.biorxiv.org/content/10.1101/2022.02.02.478917v1&#34;&gt;Brophy et al. on bioRxiv&lt;/a&gt;.&lt;/em&gt;
&lt;/p&gt;

&lt;h3 id=&#34;3-走向负碳&#34;&gt;3. 走向负碳&lt;a class=&#34;headerlink&#34; href=&#34;#3-走向负碳&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;生物学的一个众所周知的困难部分是难以扩展（进行大规模的研究）。在试管中改造一个能将糖转化为抗癌药物的细胞是一回事，但在一个千升生物反应器中做同样的事却是完全不同的挑战。&lt;/p&gt;
&lt;p&gt;这就是像 &lt;a href=&#34;https://lanzatech.com/&#34;&gt;LanzaTech&lt;/a&gt; 这样的公司令人兴奋的原因。他们实际上已经在工业工厂扩大了生物学规模。他们有试点设施，将工厂的废碳回收成燃料和化学品。这些工厂每年可以生产数千亿加仑的燃料，并且已经达到相当于每年减少数千辆汽车上路的排放量。&lt;/p&gt;
&lt;p&gt;几个月前，来自 LanzaTech 和西北大学的科学家们达到了&lt;a href=&#34;https://www.nature.com/articles/s41587-021-01195-w&#34;&gt;另一个里程碑&lt;/a&gt;：使用一种名为 Clostridium autoethanogenum 的工程自养生物，他们在具有负碳足迹的过程中以工业规模生产丙酮和异丙醇。 &amp;ldquo;与导致温室气体释放的传统生产过程不同，我们的过程可以固定碳，&amp;rdquo; 他们在发表的论文中写道。这是大规模生物学向前迈出的一大步。经过改造的微生物可以在不拖累大气的情况下改善污染物并产生化学物质。&lt;/p&gt;
&lt;h3 id=&#34;2-异种移植成为现实&#34;&gt;2. 异种移植成为现实&lt;a class=&#34;headerlink&#34; href=&#34;#2-异种移植成为现实&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;这将作为 &amp;ldquo;异种移植年&amp;rdquo; 载入人类史册。异种移植的历史可以追溯到 20 世纪 60 年代中期——法国外科医生勒内·库斯 (Renè Kuss) 将猪肾移植到人体中，结果很快被患者的身体排斥——异种移植一直是一个失败的领域。最著名的例子可能是 80 年代 Stephanie Beauclair 或 Baby Fae 的手术，她从狒狒那里接受了一颗心脏，但不久后就去世了。&lt;/p&gt;
&lt;p&gt;不过，在过去四十年里，我们在从猪身上提取心脏并将其植入人体方面做得更好，因为基因编辑技术正在改进。现在比以往任何时候都更容易在猪的细胞中找到所有导致我们的身体排斥该器官的有害蛋白质，并从基因组中&lt;a href=&#34;https://www.science.org/doi/10.1126/science.aad1191&#34;&gt;系统地消除&lt;/a&gt;这些蛋白质编码基因。但进步从来都不是没有陷阱的。&lt;/p&gt;
&lt;p&gt;今年 1 月 7 日，马里兰大学的一组外科医生将&lt;a href=&#34;https://www.technologyreview.com/2022/01/11/1043374/gene-edited-pigs-heart-transplant/&#34;&gt;一颗猪的心脏移植&lt;/a&gt;到 57 岁的老大卫贝内特体内，&lt;a href=&#34;https://www.technologyreview.com/2022/05/04/1051725/xenotransplant-patient-died-received-heart-infected-with-pig-virus/&#34;&gt;两个月后&lt;/a&gt;他去世了。&lt;/p&gt;
&lt;p&gt;5 月，两只猪的肾脏被移植到脑死亡患者体内，并进行了 54 小时的监测，这让沮丧过后变得乐观起来。两个肾脏都产生了尿液，活组织检查没有显示出任何器官排斥的迹象。&lt;/p&gt;
&lt;p&gt;心脏移植可能因为器官感染了猪病毒而失败，但肾移植研究的作者没有检测到这种病毒。猪肾可能很快就会进入人们的生活。&lt;/p&gt;
&lt;h3 id=&#34;1-我们离终结疟疾从未如此近&#34;&gt;1. 我们离终结疟疾从未如此近&lt;a class=&#34;headerlink&#34; href=&#34;#1-我们离终结疟疾从未如此近&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;如果您相信约翰·惠特菲尔德 (John Whitfield) 2002 年在《&lt;a href=&#34;https://www.nature.com/articles/news021001-6&#34;&gt;自然&lt;/a&gt;》杂志发表的这篇文章（该说法未被引用），&amp;rdquo;疟疾已经杀死了所有曾经生活过的人的一半&amp;rdquo;。即使该说法是错误的，在整个人类历史上，蚊子也已经集体杀死了数十亿人。昆虫混蛋干掉了亚历山大大帝、哥特人阿拉里克和但丁。而且，在 2021 年，疟疾仍导致约 620,000 人死亡。这是令人震惊、悲伤和可以预防的。但今年是取得惊人进步的一年。&lt;/p&gt;
&lt;p&gt;一种称为 R21/Matrix-M 的疟疾疫苗在四个非洲国家进行了 III 期试验。它在幼儿中的总体疗效为 &lt;a href=&#34;https://www.medpagetoday.com/meetingcoverage/astmh/101561&#34;&gt;75%&lt;/a&gt;。这是个好消息。在马里进行的一项 II 期试验还测试了一种名为 CIS43LS 的抗体，用于对抗健康成人中的恶性疟原虫感染。在六个月的时间里，单次注射的疗效为 &lt;a href=&#34;https://www.nejm.org/doi/full/10.1056/NEJMoa2206966&#34;&gt;88.2%&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;不过，唯一能有效预防疟疾 90% 以上的免疫原是子孢子，这是一种在蚊子生命周期中形成的类孢子部分。这些子孢子被注射到手臂中并&lt;a href=&#34;https://www.science.org/doi/10.1126/scitranslmed.abj3776&#34;&gt;用作疫苗&lt;/a&gt;，但显然很难从真正的蚊子身上收集到这些东西。&lt;/p&gt;
&lt;p&gt;本月早些时候，研究人员在实验室中创造了 &amp;ldquo;&lt;a href=&#34;https://www.nature.com/articles/s41586-022-05466-7&#34;&gt;数亿&lt;/a&gt;&amp;rdquo; 子孢子，而不需要蚊子。他们基本上重新创建了整个&amp;rdquo;疟原虫从传染性配子体到传染性配子体的全部生命周期，而不需要蚊子。&amp;rdquo; 这项新技术将有助于更快、更便宜地研制出抗疟疾疫苗。&lt;/p&gt;
&lt;p align=&#34;center&#34;&gt;
    &lt;img src=&#34;https://slab-1251708715.cos.ap-guangzhou.myqcloud.com/KGarden/2023/2022-Biology-Breakthroughs-8.webp&#34; alt&gt;&lt;br&gt;
&lt;/p&gt;

&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;32&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-32/</link>
      <pubDate>Fri, 01 Dec 2023 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-32/</guid>
      
    </item>
    
    <item>
      <title>公众号许久没有更新了</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;大家可能会发现自从 2023 年下半年以来，&lt;strong&gt;&amp;ldquo;BioIT 爱好者&amp;rdquo;&lt;/strong&gt; 公众号的更新频率越来越低了。&lt;/p&gt;
&lt;p&gt;这里面除了个人私人时间越来越少以外，还有一个原因就是个人把写文章从语雀转移到了 &lt;a href=&#34;https://github.com/shenweiyan/&#34;&gt;GitHub&lt;/a&gt; 的 Issues 和 Discussions 上。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;虽然在很长一段时间以来，个人一直都在使用 &lt;a href=&#34;https://www.yuque.com/shenweiyan&#34;&gt;语雀&lt;/a&gt; 来记录个人工作、生活的各种知识，但直到今年的下半年在考虑数据多平台使用+备份+搜索的一些使用场景时才发现语雀无法批量导出的一些弊端，更重要的一个原因是正如在 &amp;ldquo;&lt;a href=&#34;https://github.com/shenweiyan/Knowledge-Garden/issues/34&#34;&gt;博客与写作的一些思考&lt;/a&gt;&amp;rdquo; 里面所提到的 &lt;strong&gt;&amp;ldquo;博客其实就是写给自己看的&amp;rdquo;&lt;/strong&gt;，&lt;strong&gt;&amp;ldquo;大部分人写所谓 &amp;lsquo;博客&amp;rsquo; 到最后都把时间花在装潢 CSS HTML 主题上了&amp;rdquo;&lt;/strong&gt;！几经考虑以后，选择了 &lt;a href=&#34;https://github.com/shenweiyan/&#34;&gt;GitHub&lt;/a&gt; 的 Issues 和 Discussions，对于其中的优点：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;全免费，不需要租用域名和服务器；&lt;/li&gt;
&lt;li&gt;不需要过多折腾，对不懂技术的人来说非常友好；&lt;/li&gt;
&lt;li&gt;Issues/Discussions 自带评论功能，不需要后期为博客安装评论插件；&lt;/li&gt;
&lt;li&gt;GitHub 有网页版和手机 App，只要有网，我们可以随时随地发布文章，而不仅仅局限于电脑；&lt;/li&gt;
&lt;li&gt;发布到 GitHub 的内容，在 Google 的搜索结果中有非常高的权重；&lt;/li&gt;
&lt;li&gt;回归 CommonMark 的编辑，方便各种支持 Markdown 平台间的备份迁移；&lt;/li&gt;
&lt;li&gt;借助 GitHub REST/GraphQL API 可以很方便实现 Issues/Discussions 的导入导出；&lt;/li&gt;
&lt;li&gt;借助 GitHub Pages 和 GitHub Actions，可以轻松把 Issues/Discussions 转化成静态博客&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;借助一些开源的工具，个人目前大部分文章都已经从语 &lt;a href=&#34;https://www.yuque.com/shenweiyan&#34;&gt;语雀&lt;/a&gt; 同步到了 &lt;a href=&#34;https://github.com/shenweiyan/Knowledge-Garden&#34;&gt;shenweiyan/Knowledge-Garden&lt;/a&gt;，并后续会继续在 GitHub 进行更新，由于&lt;a href=&#34;https://www.yuque.com/shenweiyan/articles/qw325a&#34;&gt;公众号的各种限制和封闭性&lt;/a&gt;，如精力和时间允许后续会同步至公众号。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;Knowledge-Garden Repo image&#34; src=&#34;https://slab-1251708715.cos.ap-guangzhou.myqcloud.com/KGarden/2023/github-knowledge-garden.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;Knowledge-Garden Discussions image&#34; src=&#34;https://slab-1251708715.cos.ap-guangzhou.myqcloud.com/KGarden/2023/knowledge-garden-discussions.png&#34; /&gt;&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;28&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-28/</link>
      <pubDate>Fri, 01 Dec 2023 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-28/</guid>
      
    </item>
    
    <item>
      <title>富文本编辑器与 md 语法的一些困惑</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;在语雀写文档写得多的，会对原始的 Markdown 越来越不敏感。&lt;/p&gt;
&lt;p&gt;语雀的富文本编辑器虽然支持的依然是 markdown，但也有它自身的一些与传统 markdown 不一样的写法，例如 &lt;a href=&#34;https://www.yuque.com/yuque/gpvawt/rhhxkx&#34;&gt;高亮块&lt;/a&gt;。这样的编辑器把 markdown 的源码给隐藏了——在用户编辑的时候实时进行渲染，这样对于不熟悉 markdown 的用户也极容易上手。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;但带来了一个问题，就是使用 markdown 对文档进行导出的时候，有时候会导致 markdown 格式错乱，尤其是当我们想要把语雀的一些文档导出到其他平台时候，这个问题特别烦人。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;Markdown 语法异常&#34; src=&#34;https://slab-1251708715.cos.ap-guangzhou.myqcloud.com/KGarden/2023/md-error.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;回到 GitHub，重新接触纯 Markdown 格式的写法，才真正感觉到这种模式的好处 —— 方便其他支持 Markdown 语法平台的转移，又可以最大限度解决 Markdown 语法错乱的尴尬。&lt;/p&gt;
&lt;p&gt;但也有不好的地方，就是对于多级有序缩进，插入代码后，有序序列(多级缩进)会被打断。。。。&lt;/p&gt;
&lt;h2 id=&#34;嵌套列表&#34;&gt;嵌套列表&lt;a class=&#34;headerlink&#34; href=&#34;#嵌套列表&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;通过增加空格，Github 可以实现在嵌套列表中插入代码块；但是这样的做法在 MkDocs 中是有问题的。关于 MkDocs 的嵌套列表，在 https://github.com/mkdocs/mkdocs/issues/545 有一个讨论。&lt;/p&gt;
&lt;p&gt;参考的一个方法：&lt;a href=&#34;https://github.com/mkdocs/mkdocs/issues/2153&#34;&gt;https://github.com/mkdocs/mkdocs/issues/2153&lt;/a&gt;，即使用 &lt;a href=&#34;https://facelessuser.github.io/pymdown-extensions/extensions/superfences/&#34;&gt;superfences&lt;/a&gt; 插件，加上基于 Python 特有的 4 的倍数个空格进行缩进，可以比较好解决这个问题。&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;26&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-26/</link>
      <pubDate>Fri, 01 Dec 2023 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-26/</guid>
      
    </item>
    
    <item>
      <title>那些年，和微信公众号编辑器战斗的日子</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;看到 HelloGitHub 公众号在 2019-09-25 发表的这篇文章《&lt;a href=&#34;https://mp.weixin.qq.com/s/3-A_iSZYD88Cy467qOnNOw&#34;&gt;和微信公众号编辑器战斗的日子&lt;/a&gt;》，结合自己最近折腾的 React 版本应用 &lt;a href=&#34;https://github.com/shenweiyan/Markdown2Html&#34;&gt;Markdown2Html&lt;/a&gt;，也想着来聊几句。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;h2 id=&#34;md2all&#34;&gt;Md2All&lt;a class=&#34;headerlink&#34; href=&#34;#md2all&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;在使用 Mdnice 前，一直在用 &lt;a href=&#34;https://md.aclickall.com&#34;&gt;Md2All&lt;/a&gt; 的自搭建版本 &lt;a href=&#34;https://github.com/shenweiyan/Md2XEditor&#34;&gt;Md2XEditor&lt;/a&gt;，这是一个源自 &lt;a href=&#34;https://github.com/barretlee&#34;&gt;barretlee&lt;/a&gt; 最早在 2017 年的 &lt;a href=&#34;https://github.com/barretlee/online-markdown&#34;&gt;online-markdown&lt;/a&gt; 项目，经过二次开发而来的 Markdown 在线转换工具。&lt;/p&gt;
&lt;p&gt;个人在 2021 年的时候，浏览 GitHub 无意中发现了 &lt;a href=&#34;https://md.aclickall.com&#34;&gt;Md2All&lt;/a&gt; 托管在 GitHub 的源码仓库 &lt;a href=&#34;https://github.com/aclickall/aclickall.github.io&amp;gt;&#34;&gt;github.com/aclickall/aclickall.github.io&lt;/a&gt;，Fork 过来，利用自己微薄的前端知识做了一点点修改，才形成了一直使用到今天的 &lt;a href=&#34;https://github.com/shenweiyan/Md2XEditor&#34;&gt;Md2XEditor&lt;/a&gt;。  &lt;br /&gt;
&lt;img alt=&#34;Md2XEditor v-2.8.5&#34; src=&#34;https://slab-1251708715.cos.ap-guangzhou.myqcloud.com/KGarden/2023/md2xeditor-v2.8.5.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;虽然说，Md2All 已经把 Markdown2Html 或者说把 Markdown2WeChat 的大部分功能实现了，但由于它目前能找到的源码都是 &lt;strong&gt;经过 build 构建后可以在生产环境中使用的最终版本的代码&lt;/strong&gt;（诸如压缩和优化代码、打包文件、生成静态文件等），功能调整实在太费劲，而且自己对 Node/React 的开发基本是零基础。在没有找到好的替代品前，也只能将就着用，一直用到了 2023 年。&lt;/p&gt;
&lt;h2 id=&#34;markdown-nice&#34;&gt;markdown-nice&lt;a class=&#34;headerlink&#34; href=&#34;#markdown-nice&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/mdnice/markdown-nice/&#34;&gt;Mdnice&lt;/a&gt; 的项目虽然很早就听说，也曾经试用过一段时间，但是由于收费，加上同样存在 &lt;strong&gt;超链接文字复制到公众号颜色失效&lt;/strong&gt; 的问题，所以一直没有深入了解和使用。直到 2023 年下半年看到不少在关注的公众号推文都变换了风格，才知道原来都在用着 Mdnice，于是重新回来一看，发现这个应用原来还是&lt;strong&gt;开源的&lt;/strong&gt;，还可以&lt;strong&gt;自己搭建和部署&lt;/strong&gt;！&lt;/p&gt;
&lt;p&gt;回来搜了一波 Mdnice，发现 UI 都大同小异，但也发现了 &lt;a href=&#34;https://wechat.bmpi.dev/&#34;&gt;https://wechat.bmpi.dev/&lt;/a&gt; 这一个长得很像 Mdnice 又不完全像的平台，从功能和 UI 上它似乎更符合个人的需求和审美，于是去搜源码，果然在 &lt;a href=&#34;https://github.com/TaleAi/markdown2html&#34;&gt;github.com/TaleAi/markdown2html&lt;/a&gt; 上找到了（虽然这个仓库里面包括 README 在内提供的链接已经失效），但还是果断 Fork 过来，开始了自己部署和折腾之旅。   &lt;br /&gt;
&lt;img alt=&#34;wechat-bmpi-dev&#34; src=&#34;https://slab-1251708715.cos.ap-guangzhou.myqcloud.com/KGarden/2023/wechat-bmpi-dev.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;一点折腾&#34;&gt;一点折腾&lt;a class=&#34;headerlink&#34; href=&#34;#一点折腾&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;把自己的 Markdown2Html 站点部署起来后，一切看起来都很顺利，但在使用过程中就发现了这个一直存在的问题：&lt;strong&gt;超链接文字复制到公众号颜色失效&lt;/strong&gt;！&lt;/p&gt;
&lt;p&gt;于是开始去尝试看看 Mdnice 的源码，从最开始的一头雾水开始到慢慢摸到一点点头绪，也第一次知道了 &lt;a href=&#34;https://github.com/markdown-it/markdown-it&#34;&gt;markdown-it&lt;/a&gt; 这个目前使用最广泛的 markdown 解析器工具。但功夫不负有心人，借助 ChatGPT 的帮助，最后终于勉勉强强把 &lt;strong&gt;超链接文字复制到公众号颜色失效&lt;/strong&gt; 给解决了。&lt;/p&gt;
&lt;p&gt;后面还陆陆续续增加了一些自己喜欢的文章主题，增加了一些网格化的背景等等。由于 Mdnice 使用了非常多的开源插件，所以很多东西改动起来都非常方便。 
&lt;img alt=&#34;markdown2weixin&#34; src=&#34;https://slab-1251708715.cos.ap-guangzhou.myqcloud.com/KGarden/2023/markdown2wechat.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;继续更新&#34;&gt;继续更新&lt;a class=&#34;headerlink&#34; href=&#34;#继续更新&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;个人 (包括本公众号) 很多的文章都是先写在 GitHub &lt;a href=&#34;https://github.com/shenweiyan/Knowledge-Garden&#34;&gt;Knowledge-Garden&lt;/a&gt; 仓库的 &lt;a href=&#34;https://github.com/shenweiyan/Knowledge-Garden/discussions&#34;&gt;Discussions&lt;/a&gt; 上，有了 Markdown2Html 后面想要转到公众号也就很方便了。&lt;/p&gt;
&lt;p&gt;到这里，轮子也总算造完了，又该好好搬砖了。&lt;/p&gt;
&lt;p&gt;希望后面能有更多的东西跟大家分享吧，也希望大家在 GitHub 上多多关注我，一起交流。&lt;/p&gt;
&lt;h2 id=&#34;参考资料&#34;&gt;参考资料&lt;a class=&#34;headerlink&#34; href=&#34;#参考资料&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&#34;https://lq782655835.github.io/blogs/project/markdown-it-code.html&#34;&gt;Markdown-It 解析原理&lt;/a&gt; - &lt;a href=&#34;https://lq782655835.github.io/blogs/&#34;&gt;springleo&amp;rsquo;s blog&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;31&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-31/</link>
      <pubDate>Fri, 01 Dec 2023 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-31/</guid>
      
    </item>
    
    <item>
      <title>单行 Python 代码片段</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;blockquote&gt;
&lt;p&gt;Via：https://muhammadraza.me/2023/python-oneliners&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;我已经沉浸在 Python 编程世界大约三年了。在这段时间里，我开始欣赏这种多功能语言的优雅和强大。在这篇既有趣又具有教育意义的文章中，我将展示一系列单行 Python 代码片段。无论您是经验丰富的开发人员还是初学者，这些简洁的代码行都可以让您深入了解 Python 的简单性和有效性，它们展示一行代码如何完成在其他语言中可能需要几行代码才能完成的任务。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;反转字符串
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;reversed_string&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;Hello World&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[::&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;检查数字是否为偶数
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;is_even&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;lambda&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;%&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;is_even&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;#True&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;求两个列表的交集
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;intersection&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;list&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;list1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;list2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;从列表中删除重复项
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;no_duplicates&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;list&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;my_list&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;不使用 &lt;code&gt;len()&lt;/code&gt; 计算字符串的长度
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;length&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;sum&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;_&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;Hello World&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;检查一个列表是否包含另一个列表的所有元素
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;contains_all&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;all&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;elem&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;list1&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;elem&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;list2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;生成一串随机字符
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;random&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; 
&lt;span class=&#34;n&#34;&gt;random_str&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;join&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;random&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;choices&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;abcdefghijklmnopqrstuvwxyz&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;k&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;将整数列表转换为单个数字
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;num&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;join&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;map&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;回文(Palindromic)检查
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;is_palindrome&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;lambda&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;s&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[::&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;列表展开
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;flatten_list&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;sum&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]],&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在一个列表中找到出现频率最高的元素
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;most_frequent&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;max&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;my_list&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;key&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;my_list&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;count&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;合并两个字典
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;merged_dict&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;**&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dict1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;**&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dict2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;最后，我希望您喜欢阅读本文并有机会学习新东西。如果您有任何反馈，请随时在下面发表评论。如果您不想公开发表评论，可以随时给我发送电子邮件。我也很想看到你最喜欢的 python one liner 代码片段。&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;30&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/tech/discussions-30/</link>
      <pubDate>Fri, 01 Dec 2023 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/tech/discussions-30/</guid>
      
    </item>
    
    <item>
      <title>Python3 编译安装 --with-openssl 无效的问题</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;很多人在使用 Python3 经常会遇到一些 openssl 版本太低从而导致包无法正常使用的问题，尤其是 &lt;code&gt;urllib3&lt;/code&gt; 这个包。
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;Python&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;3.9.18&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Sep&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;7&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2023&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;32&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; 
&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;GCC&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;4.8.5&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;20150623&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Red&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Hat&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;4.8.5&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;44&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;linux&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Type&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;help&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;copyright&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;credits&amp;quot;&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;or&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;license&amp;quot;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;more&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;information&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;requests&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Traceback&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;most&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;recent&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;call&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;last&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
  &lt;span class=&#34;n&#34;&gt;File&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;&amp;lt;stdin&amp;gt;&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;line&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;module&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
  &lt;span class=&#34;n&#34;&gt;File&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;/usr/local/software/python-3.9.18/lib/python3.9/site-packages/requests/__init__.py&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;line&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;43&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;module&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;urllib3&lt;/span&gt;
  &lt;span class=&#34;n&#34;&gt;File&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;/usr/local/software/python-3.9.18/lib/python3.9/site-packages/urllib3/__init__.py&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;line&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;41&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;module&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&#34;k&#34;&gt;raise&lt;/span&gt; &lt;span class=&#34;ne&#34;&gt;ImportError&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;
&lt;span class=&#34;ne&#34;&gt;ImportError&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;urllib3&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v2&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;.0&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;only&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;supports&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;OpenSSL&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;1.1.1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;currently&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;the&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;ssl&amp;#39;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;module&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;is&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;compiled&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;with&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;OpenSSL 1.0.2k-fips  26 Jan 2017&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;See&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;https&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;//&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;github&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;com&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;urllib3&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;urllib3&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;issues&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2168&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;ssl&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;urllib3&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Traceback&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;most&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;recent&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;call&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;last&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
  &lt;span class=&#34;n&#34;&gt;File&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;&amp;lt;stdin&amp;gt;&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;line&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;module&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
  &lt;span class=&#34;n&#34;&gt;File&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;/usr/local/software/python-3.9.18/lib/python3.9/site-packages/urllib3/__init__.py&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;line&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;41&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;module&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&#34;k&#34;&gt;raise&lt;/span&gt; &lt;span class=&#34;ne&#34;&gt;ImportError&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;
&lt;span class=&#34;ne&#34;&gt;ImportError&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;urllib3&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v2&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;.0&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;only&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;supports&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;OpenSSL&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;1.1.1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;currently&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;the&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;ssl&amp;#39;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;module&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;is&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;compiled&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;with&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;OpenSSL 1.0.2k-fips  26 Jan 2017&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;See&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;https&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;//&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;github&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;com&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;urllib3&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;urllib3&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;issues&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2168&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;网络上有很多关于这方面的教程，主要解决方案：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;降级 &lt;code&gt;urllib3&lt;/code&gt; 的版本，例如：&lt;code&gt;pip install --upgrade urllib3==1.26.15&lt;/code&gt;；&lt;/li&gt;
&lt;li&gt;重新安装一个更高版本的 OpenSSL，然后备份并替换系统原来的 openssl，最后重新编译安装 Python。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;个人觉得这两个方法都不够好，尤其是第二个方法 —— &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;新装了一个更高版本的 OpenSSL，但是又不想替换系统原来的 openssl 以免出现新的问题（或者没有管理员权限）；&lt;/li&gt;
&lt;li&gt;在编译的时候使用 &lt;code&gt;--with-openssl&lt;/code&gt; 指定了新装的 OpenSSL 路径，编译安装完成后 Python &lt;strong&gt;仍然使用旧版本的 OpenSSL&lt;/strong&gt;；&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;很不幸的是，个人在 CentOS 7.3 + Python-3.9.18 就遇到了这个问题。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;新装了 OpenSSL 3.0.10 
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;wget https://www.openssl.org/source/openssl-3.0.10.tar.gz --no-check-certificate
tar zvxf openssl-3.0.10.tar.gz
cd openssl-3.0.10
./config --prefix=/usr/local/software/openssl-3.0.10 shared zlib
make &amp;amp;&amp;amp; make install
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;添加 &lt;code&gt;~/.bashrc&lt;/code&gt; 环境变量
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;export PATH=/usr/local/software/openssl-3.0.10/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/software/openssl-3.0.10/lib64:$LD_LIBRARY_PATH
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;重新编译安装 Python-3.9.18
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;./configure --prefix=/usr/local/software/python-3.9.18 --with-openssl=/usr/local/software/openssl-3.0.10/
make &amp;amp;&amp;amp; make install
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;等编译完成后，你会神奇的发现重新编译安装后 Python 3.9.18 &lt;strong&gt;仍然使用旧版本的 OpenSSL (OpenSSL 1.0.2k-fips  26 Jan 2017)&lt;/strong&gt;！&lt;/p&gt;
&lt;p&gt;其实，这还是因为 Python 在重新编译的时候没有识别到新编译的 OpenSSL，因此，我们需要把重新编译的命令调整一下：
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;/configure --prefix=/usr/local/software/python-3.9.18 \
--with-openssl=/usr/local/software/openssl-3.0.10/ \
LDFLAGS=&amp;quot;-L/usr/local/software/openssl-3.0.10/lib64&amp;quot; \
CPPFLAGS=&amp;quot;-I/usr/local/software/openssl-3.0.10/include&amp;quot; \
PKG_CONFIG_PATH=&amp;quot;/usr/local/software/openssl-3.0.10/lib64/pkgconfig&amp;quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;这样子一来，问题就迎刃而解了，编译安装完后，你会发现 Python 3.9.18 已经成功用用上了 OpenSSL 3.0.10 1 Aug 2023：
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$ python3 -c &amp;quot;import ssl; print(ssl.OPENSSL_VERSION)&amp;quot;
OpenSSL 3.0.10 1 Aug 2023
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;img alt=&#34;OpenSSL 3.0.10 on Python3.9.18&#34; src=&#34;https://slab-1251708715.cos.ap-guangzhou.myqcloud.com/Gitbook/2023/python-3.9.18-openssl-3.0.10.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;参考资料&#34;&gt;参考资料&lt;a class=&#34;headerlink&#34; href=&#34;#参考资料&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/urllib3/urllib3/issues/2168&#34;&gt;Drop support for OpenSSL&amp;lt;1.1.1 - urllib3/urllib3#2168&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;27&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/tech/discussions-27/</link>
      <pubDate>Fri, 01 Dec 2023 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/tech/discussions-27/</guid>
      
    </item>
    
    <item>
      <title>不同版本服务器间 SSH 免密码登录失败</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;今天从服务器 A（CentOS 7.3）配置 SSH 无密码登录服务器 B（CentOS Steam 9），发现执行以下常规操作后无法实现：
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$ ssh-keygen
$ ssh-copy-id -i ~/.ssh/id_rsa.pub shenweiyan@66.xx.xx.xx  # ssh-copy-id user@rhel-9-server-IP
$ ssh shenweiyan@66.xx.xx.xx
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;img alt=&#34;ssh-keygen-need-passwd&#34; src=&#34;https://slab-1251708715.cos.ap-guangzhou.myqcloud.com/KGarden/2023/ssh-keygen-passwd.png&#34; /&gt;&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;后来，更换 ecdsa 算法，问题才解决：
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$ ssh-keygen -t ecdsa
$ ssh-copy-id -i ~/.ssh/id_ecdsa.pub shenweiyan@66.xx.xx.xx
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;img alt=&#34;ssh-keygen-ecdsa&#34; src=&#34;https://slab-1251708715.cos.ap-guangzhou.myqcloud.com/KGarden/2023/ssh-keygen-ecdsa.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;根本原因就在于 SHA-1 已经在 RHEL9 中弃用了！&lt;/p&gt;
&lt;p&gt;从 RHEL9 的官网文档《&lt;a href=&#34;https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9/html-single/considerations_in_adopting_rhel_9/index#ref_considerations-security-crypto_changes-to-security&#34;&gt;1.0.2. Crypto-policies, RHEL core cryptographic components, and protocols&lt;/a&gt;（加密策略、RHEL 核心加密组件和协议）》可以看到 SHA-1 已经在 RHEL9 中弃用了！&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;In RHEL 9, SHA-1 usage for signatures is restricted in the DEFAULT system-wide cryptographic policy. Except for HMAC, SHA-1 is no longer allowed in TLS, DTLS, SSH, IKEv2, DNSSEC, and Kerberos protocols. Individual applications not controlled by the RHEL system-wide crypto policies are also moving away from using SHA-1 hashes in RHEL 9.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;在 RHEL 9 中，用于签名的 SHA-1 用法在 DEFAULT 系统范围的加密策略中受到限制。除 HMAC 外，TLS、DTLS、&lt;strong&gt;SSH&lt;/strong&gt;、IKEv2、DNSSEC 和 Kerberos 协议中不再允许使用 SHA-1。不受 RHEL 系统范围的加密策略控制的单个应用程序在 RHEL 9 中也不再使用 SHA-1 hashes。&lt;/p&gt;
&lt;h2 id=&#34;跨用户免密码登录&#34;&gt;跨用户免密码登录&lt;a class=&#34;headerlink&#34; href=&#34;#跨用户免密码登录&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;从服务器 A（CentOS 7.3）的 root 用户已配置 SSH 无密码登录服务器 B（CentOS Steam 9）的 shenweiyan 用户。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在服务器 A（CentOS 7.3）的 root 用户下执行以下命令，在 &lt;code&gt;/root/.ssh&lt;/code&gt; 目录会得到两个文件：&lt;/li&gt;
&lt;li&gt;私钥文件：&lt;strong&gt;id_ecdsa&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;公钥文件：&lt;strong&gt;id_ecdsa.pub&lt;/strong&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;root@centos-vm-7 11:47:20 ~ 
$ ssh-keygen -t ecdsa
Generating public/private ecdsa key pair.
Enter file in which to save the key (/root/.ssh/id_ecdsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_ecdsa.
Your public key has been saved in /root/.ssh/id_ecdsa.pub.
The key fingerprint is:
ad:15:01:5c:a9:db:69:64:2b:0c:4c:5f:be:f9:e1:44 root@centos-vm-7
The key&amp;#39;s randomart image is:
+--[ECDSA  256]---+
|       ..oo.     |
|      . . o.     |
|     o . +.      |
|      o o.+.E    |
|       oS=o*     |
|        +oB o    |
|        .o + .   |
|            o    |
|                 |
+-----------------+
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;把服务器 A 下 root 用户的公钥文件拷贝到服务器 B（CentOS Steam 9）的 shenweiyan 用户的 authorized_keys 中；
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;root@centos-vm-7 11:53:25 ~
$ ssh-copy-id -i ~/.ssh/id_ecdsa.pub shenweiyan@66.xx.xx.xx
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;将公钥拷贝至目标服务器 B 后，在源服务器 A 通过密钥跨用户免密码登录云服务器。
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;root@centos-vm-7 11:58:47 /root 
$ ssh shenweiyan@66.xx.xx.xx  # ssh -i id_ecdsa shenweiyan@66.xx.xx.xx
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;参考资料&#34;&gt;参考资料&lt;a class=&#34;headerlink&#34; href=&#34;#参考资料&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.yuque.com/shenweiyan/cookbook/rhel-9-no-hostkey-alg&#34;&gt;RHEL6 ssh 到 RHEL9 的 no hostkey alg 错误&lt;/a&gt;，语雀&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://serverfault.com/questions/1095898/how-can-i-use-a-legacy-ssh-rsa-key-on-centos-9-stream&#34;&gt;How can I use a legacy ssh-rsa key on CentOS 9 Stream?&lt;/a&gt;，Server Fault&lt;/li&gt;
&lt;/ul&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;25&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/tech/discussions-25/</link>
      <pubDate>Thu, 30 Nov 2023 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/tech/discussions-25/</guid>
      
    </item>
    
    <item>
      <title>Micro/Mamba 安装与注意事项</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;记录一下 Micromamba/Mamba 安装的步骤和注意事项。&lt;/p&gt;
&lt;h2 id=&#34;mamba-安装&#34;&gt;Mamba 安装&lt;a class=&#34;headerlink&#34; href=&#34;#mamba-安装&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Mamba 可以使用 Mambaforge 方法和已有 Mini/conda 的方式安装，官方推荐的是前面一种，即使用 Mambaforge 进行全新安装。&lt;/p&gt;
&lt;h3 id=&#34;全新安装&#34;&gt;全新安装&lt;a class=&#34;headerlink&#34; href=&#34;#全新安装&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;关于 mamba 的安装，官方推荐 &lt;a href=&#34;https://mamba.readthedocs.io/en/latest/mamba-installation.html&#34;&gt;Fresh install&lt;/a&gt;，即全新安装。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;We recommend that you start with the &lt;a href=&#34;https://github.com/conda-forge/miniforge#mambaforge&#34;&gt;Mambaforge distribution&lt;/a&gt;. Mambaforge comes with the popular conda-forge channel preconfigured, but you can modify the configuration to use any channel you like. Note that Anaconda channels are generally incompatible with conda-forge, so you should not mix them.      &lt;br /&gt;
我们建议您从 Mambaforge 发行版开始。 Mambaforge 预配置了流行的 conda-forge 通道，但您可以修改配置以使用您喜欢的任何通道。请注意，Anaconda 通道通常与 conda-forge 不兼容，因此您不应混合使用它们。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;!-- more --&gt;

&lt;p&gt;其实就是：        &lt;br /&gt;
1. 先去 &lt;a href=&#34;https://github.com/conda-forge/miniforge#mambaforge&#34;&gt;Mambaforge distribution&lt;/a&gt; 下载 Mambaforge-Linux-x86_64.sh。        &lt;br /&gt;
2. 执行 &lt;code&gt;sh Mambaforge-Linux-x86_64.sh&lt;/code&gt; 安装命令。&lt;/p&gt;
&lt;h3 id=&#34;在已有的-conda-中安装&#34;&gt;在已有的 conda 中安装&lt;a class=&#34;headerlink&#34; href=&#34;#在已有的-conda-中安装&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;官方文档中明确说不推荐这种安装 Mamba 的方式，他们强烈建议使用 Mambaforge 方法（见上文）。&lt;/p&gt;
&lt;p&gt;这种方法，要获取 &lt;code&gt;mamba&lt;/code&gt; ，其实只需将其从 &lt;code&gt;conda-forge&lt;/code&gt; 通道安装到基础环境中即可；但是需要注意 &lt;strong&gt;Installing mamba into any other environment than base is not supported&lt;/strong&gt;，即&lt;strong&gt;不支持将 mamba 安装到 base 之外的任何其他环境中&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;首先，安装 Miniconda。&lt;/p&gt;
&lt;p&gt;参考 &lt;a href=&#34;https://docs.conda.io/en/latest/miniconda.html&#34;&gt;https://docs.conda.io/en/latest/miniconda.html&lt;/a&gt;，下载完 Miniconda3-latest-Linux-x86_64.sh，sh 执行一下就可以安装了。
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;sh Miniconda3-latest-Linux-x86_64.sh
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
然后，安装 mamba。
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;~/miniconda3/bin/conda install -c conda-forge mamba
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;For both &lt;code&gt;mamba&lt;/code&gt; and &lt;code&gt;conda&lt;/code&gt;, the &lt;code&gt;base&lt;/code&gt; environment is meant to hold their dependencies. It is strongly discouraged to install anything else in the base envionment. Doing so may break &lt;code&gt;mamba&lt;/code&gt; and &lt;code&gt;conda&lt;/code&gt; installation.    &lt;br /&gt;
对于 &lt;code&gt;mamba&lt;/code&gt; 和 &lt;code&gt;conda&lt;/code&gt; ， &lt;code&gt;base&lt;/code&gt; 环境旨在保存它们的依赖关系。强烈建议不要在基础环境中安装任何其他东西。这样做可能会破坏 &lt;code&gt;mamba&lt;/code&gt; 和 &lt;code&gt;conda&lt;/code&gt; 安装。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;micromamba-安装&#34;&gt;Micromamba 安装&lt;a class=&#34;headerlink&#34; href=&#34;#micromamba-安装&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;参考 &lt;a href=&#34;https://mamba.readthedocs.io/en/latest/micromamba-installation.html&#34;&gt;https://mamba.readthedocs.io/en/latest/micromamba-installation.html&lt;/a&gt;。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;micromamba&lt;/code&gt; is a fully statically-linked, self-contained, executable. This means that the &lt;code&gt;base&lt;/code&gt; environment is completely empty. The configuration for &lt;code&gt;micromamba&lt;/code&gt; is slighly different, namely all environments and cache will be created by default under the &lt;code&gt;MAMBA_ROOT_PREFIX&lt;/code&gt; environment variable. There is also no pre-configured &lt;code&gt;.condarc&lt;/code&gt;/&lt;code&gt;.mambarc&lt;/code&gt; shipped with micromamba (they are however still read if present).                       &lt;br /&gt;
&lt;code&gt;micromamba&lt;/code&gt; 是一个完全静态链接的、独立的可执行文件。这意味着 &lt;code&gt;base&lt;/code&gt; 环境完全是空的。&lt;code&gt;micromamba&lt;/code&gt; 的配置略有不同，即默认情况下将在 &lt;code&gt;MAMBA_ROOT_PREFIX&lt;/code&gt; 环境变量下创建所有环境和缓存。&lt;code&gt;micromamba&lt;/code&gt; 也没有预配置的 &lt;code&gt;.condarc&lt;/code&gt; / &lt;code&gt;.mambarc&lt;/code&gt;（但是，如果存在，它们仍然会被读取）。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;脚本安装&#34;&gt;脚本安装&lt;a class=&#34;headerlink&#34; href=&#34;#脚本安装&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;如果您使用的是 macOS、Linux 或 Windows 上的 Git Bash，则有一种简单的安装方法 &lt;code&gt;micromamba&lt;/code&gt;。只需在您喜欢的 shell 中执行安装脚本即可。&lt;/p&gt;
&lt;p&gt;对于 Linux、macOS 或 Windows 上的 Git Bash，请使用以下命令安装：
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&amp;quot;${SHELL}&amp;quot; &amp;lt;(curl -L micro.mamba.pm/install.sh)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;h3 id=&#34;自动更新&#34;&gt;自动更新&lt;a class=&#34;headerlink&#34; href=&#34;#自动更新&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;安装后，&lt;code&gt;micromamba&lt;/code&gt; 可以通过下面的方式更新：
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;micromamba self-update
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
可以指定显式版本：
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;micromamba self-update --version 1.4.6
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;h3 id=&#34;手动更新&#34;&gt;手动更新&lt;a class=&#34;headerlink&#34; href=&#34;#手动更新&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;h4 id=&#34;linux-和-macos&#34;&gt;Linux 和 macOS&lt;a class=&#34;headerlink&#34; href=&#34;#linux-和-macos&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;下载并解压可执行文件（来自官方 &lt;code&gt;conda-forge&lt;/code&gt; 包）即可。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;其实，这就等同于我们直接去 &lt;a href=&#34;https://github.com/mamba-org/micromamba-releases/releases&#34;&gt;https://github.com/mamba-org/micromamba-releases/releases&lt;/a&gt; 下载对应平台的二进制文件，或者 &lt;code&gt;tar.bz2&lt;/code&gt; 文件，然后解压缩，把 &lt;code&gt;bin/micromamba&lt;/code&gt; 部分提出来使用。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;确保安装了基本实用程序。我们需要 &lt;code&gt;curl&lt;/code&gt; 和 &lt;code&gt;tar&lt;/code&gt; 并支持 &lt;code&gt;bzip2&lt;/code&gt; 。此外，您还需要一个基于 glibc 的系统，例如 Ubuntu、Fedora 或 Centos（Alpine Linux 本身无法运行）。&lt;/p&gt;
&lt;p&gt;以下 magic URL 始终返回 micromamba 的最新可用版本，并且使用 &lt;code&gt;tar&lt;/code&gt; 自动提取 &lt;code&gt;bin/micromamba&lt;/code&gt; 部分。
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;# Linux Intel (x86_64):
curl -Ls https://micro.mamba.pm/api/micromamba/linux-64/latest | tar -xvj bin/micromamba
# Linux ARM64:
curl -Ls https://micro.mamba.pm/api/micromamba/linux-aarch64/latest | tar -xvj bin/micromamba
# Linux Power:
curl -Ls https://micro.mamba.pm/api/micromamba/linux-ppc64le/latest | tar -xvj bin/micromamba
# macOS Intel (x86_64):
curl -Ls https://micro.mamba.pm/api/micromamba/osx-64/latest | tar -xvj bin/micromamba
# macOS Silicon/M1 (ARM64):
curl -Ls https://micro.mamba.pm/api/micromamba/osx-arm64/latest | tar -xvj bin/micromamba
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
提取完成后，我们就可以使用 &lt;code&gt;micromamba&lt;/code&gt; 二进制文件了。&lt;/p&gt;
&lt;p&gt;如果您想在临时用例中快速使用 micromamba，您可以运行：
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;export MAMBA_ROOT_PREFIX=/some/prefix  # optional, defaults to ~/micromamba
eval &amp;quot;$(./bin/micromamba shell hook -s posix)&amp;quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
这个 shell hook 会修改您的 shell 变量以包含 micromamba 命令。&lt;/p&gt;
&lt;p&gt;如果您想保留这些更改，可以通过运行 &lt;code&gt;./micromamba shell init ...&lt;/code&gt; 自动将它们写入 &lt;code&gt;.bashrc&lt;/code&gt; （或 &lt;code&gt;.zshrc&lt;/code&gt; ）。这还允许您选择自定义 MAMBA_ROOT_ENVIRONMENT，这是包和 repodata 缓存所在的位置。
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;# Linux/bash:
./bin/micromamba shell init -s bash -p ~/micromamba  # this writes to your .bashrc file
# sourcing the bashrc file incorporates the changes into the running session.
# better yet, restart your terminal!
source ~/.bashrc

# macOS/zsh:
./micromamba shell init -s zsh -p ~/micromamba
source ~/.zshrc
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;现在您可以激活基本环境并安装新软件包，或创建其他环境。
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;micromamba activate  # this activates the base environment
micromamba install python=3.6 jupyter -c conda-forge
# or
micromamba create -n env_name xtensor -c conda-forge
micromamba activate env_name
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;专有的 &lt;a href=&#34;https://conda-forge.org/&#34;&gt;conda-forge&lt;/a&gt; 设置可以配置为：
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;micromamba config append channels conda-forge
micromamba config append channels nodefaults
micromamba config set channel_priority strict
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;24&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/tech/discussions-24/</link>
      <pubDate>Mon, 27 Nov 2023 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/tech/discussions-24/</guid>
      
    </item>
    
    <item>
      <title>2023 年 Galaxy 社区大会会议报告</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;blockquote&gt;
&lt;p&gt;作者：Natalie Whitaker  &lt;br /&gt;
编译：&lt;a href=&#34;https://weiyan.cc&#34;&gt;沈维燕&lt;/a&gt;  &lt;br /&gt;
时间：2023-08-14  &lt;br /&gt;
原文：&lt;a href=&#34;https://galaxyproject.org/blog/2023-08-14-gc-c2023-meeting-report/&#34;&gt;2023 Galaxy Community Conference Meeting Report&lt;/a&gt;    &lt;/p&gt;
&lt;/blockquote&gt;
&lt;!-- more --&gt;

&lt;h2 id=&#34;gcc-2023-会议纪要&#34;&gt;GCC 2023 会议纪要&lt;a class=&#34;headerlink&#34; href=&#34;#gcc-2023-会议纪要&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&#34;概述&#34;&gt;概述&lt;a class=&#34;headerlink&#34; href=&#34;#概述&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;2023 年 Galaxy 社区会议（GCC2023）于7月10日至16日在澳大利亚昆士兰州布里斯班昆士兰科技大学举行。GCC 是 Galaxy 社区的年度会议，这是一个旨在在科学和技术层面展示过去一年内在 Galaxy 研究领域做出的令人惊叹的新工作，同时为与会者提供发现合作机会、加强联系、并开辟新的研究方向的大会。 GCC2023 由 Galaxy Australia 和 Australian BioCommons 主办，为期四天，包括了演讲、研讨会/培训、海报和演示等活动，还有三位主题演讲嘉宾和三天的协作节 (CoFest)。除了会议内容，整个 Galaxy 社区会议周还会举办网络交流和社交活动。总体而言，GCC2023 包括了 12.8 小时的长短演讲、37.5 小时的培训、3.3 小时的海报展示和演示，以及 10.6 小时的社交活动和交流。
&lt;img alt=&#34;GCC2023 Meeting Report Image1&#34; src=&#34;https://slab-1251708715.cos.ap-guangzhou.myqcloud.com/KGarden/2023/GCC2023-Meeting-Report-Image1.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;GCC2023 共有 91 名现场参会者和 40 名虚拟参会者。来自 21 个不同国家的与会者出席了本次会议：澳大利亚、比利时、巴西、加拿大、捷克、丹麦、法国、德国、印度、爱尔兰、马耳他、摩洛哥、荷兰、新西兰、挪威、新加坡、韩国、斯里兰卡、瑞士、英国和美国（图1）。在总参会人数中，22.4% 是研究助理或技术人员，17.6% 是高级科学家或首席调查员，9.6% 是研究生，7.2% 是博士后，2.4% 是本科生，40% 是其他身份。&lt;/p&gt;
&lt;div align=&#34;center&#34;&gt;
    &lt;img src=&#34;https://slab-1251708715.cos.ap-guangzhou.myqcloud.com/KGarden/2023/GCC2023-Meeting-Report-Image2.png&#34; alt=&#34;GCC2023 Meeting Report Image2&#34;&gt;
    &lt;em&gt;Figure 1. Map of GCC2023 attendees’ countries of origin.&lt;/em&gt;
&lt;/div&gt;

&lt;h2 id=&#34;奖学金获得者&#34;&gt;奖学金获得者&lt;a class=&#34;headerlink&#34; href=&#34;#奖学金获得者&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;GCC2023 非常感谢能够利用一位匿名捐赠者的资金提供现场和虚拟参会的奖学金。作为奖学金的一部分，受奖者被要求通过演讲、海报或二者兼有的方式参与会议。&lt;/p&gt;
&lt;p&gt;今年，一个现场奖学金授予了英国开放大学的一年级博士生 Marisa Loach（Twitter: @Marisa_Loach）。Marisa 进行了一次题为 “为什么使用 Galaxy？用户友好的生物信息学选项的初步结果” 的演讲并展示了一份海报。
&lt;img alt=&#34;GCC2023 Meeting Report Image3&#34; src=&#34;https://slab-1251708715.cos.ap-guangzhou.myqcloud.com/KGarden/2023/GCC2023-Meeting-Report-Image3.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;GCC2023共颁发了六个虚拟奖学金。以下列出了每位受奖者及其角色、机构和对会议的贡献。&lt;/p&gt;
&lt;h3 id=&#34;coline-royaux&#34;&gt;Coline Royaux&lt;a class=&#34;headerlink&#34; href=&#34;#coline-royaux&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Twitter: @ColineRoyaux&lt;/p&gt;
&lt;p&gt;研究生 (Graduate student)&lt;/p&gt;
&lt;p&gt;巴黎索邦大学，法国自然历史博物馆，法国 (Sorbonne University, French Natural History Museum, France)&lt;/p&gt;
&lt;p&gt;演讲标题 “Galaxy-E：基于生态学的 Galaxy 倡议，2022-2023 年更新！” &lt;/p&gt;
&lt;h3 id=&#34;vajiha-hussain&#34;&gt;Vajiha Hussain&lt;a class=&#34;headerlink&#34; href=&#34;#vajiha-hussain&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;高年级本科生 (Senior undergraduate student)&lt;/p&gt;
&lt;p&gt;印度维尼昂大学 (Vignan University, India)&lt;/p&gt;
&lt;p&gt;海报标题 “利用 RNASeq 分析识别棕榈蓟马中潜在的 GBNV 生物标志物”&lt;/p&gt;
&lt;h3 id=&#34;sudeepti-kulshrestha&#34;&gt;Sudeepti Kulshrestha&lt;a class=&#34;headerlink&#34; href=&#34;#sudeepti-kulshrestha&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;研究生 (Graduate student)&lt;/p&gt;
&lt;p&gt;印度阿米蒂大学 (Amity University, India)&lt;/p&gt;
&lt;p&gt;海报标题为“使用基于网络的方法探索 Vaginal Microbiome 和先兆子痫的关联”&lt;/p&gt;
&lt;h3 id=&#34;jonas-bucher&#34;&gt;Jonas Bucher&lt;a class=&#34;headerlink&#34; href=&#34;#jonas-bucher&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;研究生 (Graduate student)&lt;/p&gt;
&lt;p&gt;瑞士苏黎世联邦理工学院，苏黎世大学，瑞士 (Swiss Federal Institute of Technology in Zurich (ETH Zurich), University of Zurich, Switzerland)&lt;/p&gt;
&lt;p&gt;海报标题 “Methylator - DNA cytosine methylation pipeline”&lt;/p&gt;
&lt;h3 id=&#34;katarzyna-kamieniecka&#34;&gt;Katarzyna Kamieniecka&lt;a class=&#34;headerlink&#34; href=&#34;#katarzyna-kamieniecka&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Twitter: @katemurat&lt;/p&gt;
&lt;p&gt;研究生 (Graduate student)&lt;/p&gt;
&lt;p&gt;英国布拉德福德大学 (University of Bradford, United Kingdom)&lt;/p&gt;
&lt;p&gt;海报标题 &amp;ldquo;Galaxy 中的 FAIR 数据管理&amp;rdquo;&lt;/p&gt;
&lt;h4 id=&#34;taoufik-bensellak&#34;&gt;Taoufik Bensellak&lt;a class=&#34;headerlink&#34; href=&#34;#taoufik-bensellak&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;研究生 (Graduate student)&lt;/p&gt;
&lt;p&gt;英国利物浦大学 (University of Liverpool, United Kingdom)&lt;/p&gt;
&lt;p&gt;海报标题 “用于微阵列数据分析的 Galaxy 实例和工具”&lt;/p&gt;
&lt;h2 id=&#34;主讲嘉宾&#34;&gt;主讲嘉宾&lt;a class=&#34;headerlink&#34; href=&#34;#主讲嘉宾&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;GCC2023 邀请了三位主题演讲嘉宾，分别就野生动物保护、结构生物学和生物安全等领域分享了他们的思考和研究成果。演讲者展示了他们团队如何通过使用 Galaxy 平台，以更易获取和可复现的方式完成工作。&lt;/p&gt;
&lt;p&gt;三位主题发言人分别发表了内容丰富的演讲，讨论了各自前瞻性研究领域的进展，重点关注开放存取端到端生物信息学 (open-access end-to-end bioinformatics)。Galaxy 在每位主题发言人的最新研究进展中都发挥了重要作用，Galaxy 开发人员和 Galaxy 社区能够亲眼目睹 Galaxy 对科学界的影响。此外，每位主题发言人都为 Galaxy 的未来提供了灵感，并有时间与平台发展轨迹背后的开发人员直接交流。&lt;/p&gt;
&lt;h3 id=&#34;carolyn-hogg-phd-university-of-sydney悉尼大学&#34;&gt;Carolyn Hogg, PhD (University of Sydney，悉尼大学)&lt;a class=&#34;headerlink&#34; href=&#34;#carolyn-hogg-phd-university-of-sydney悉尼大学&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;来自悉尼大学的 Carolyn Hogg 博士作为第一位主讲人拉开了 GCC2023 的序幕。霍格博士在 &amp;ldquo;拯救塔斯马尼亚袋獾计划 (Save the Tasmanian Devil Program)&amp;rdquo; 进行的研究中发挥了重要作用，此外还重点研究了其他澳大利亚物种，如橙腹鹦鹉、考拉、兔耳袋狸和袋鼠。她在 GCC2023 上的演讲题为 “走向无限和超越：结合基因组学和云技术来拯救我们的物种”，强调了自然资源保护主义者和基因组科学家之间合作研究的必要性。她的愿景是通过改变科学、管理和政策的整合方式，为澳大利亚创造保护遗产，而 Galaxy 的使用增强了她的这一愿景。通过使用像 Galaxy 这样的开源平台，Hogg 博士能够产生可重复的基因组科学，以帮助澳大利亚的物种保护和管理实践。
&lt;img alt=&#34;GCC2023 Meeting Report Image4&#34; src=&#34;https://slab-1251708715.cos.ap-guangzhou.myqcloud.com/KGarden/2023/GCC2023-Meeting-Report-Image4.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;kate-michie-phd-university-of-new-south-wales新南威尔士大学&#34;&gt;Kate Michie, PhD (University of New South Wales，新南威尔士大学)&lt;a class=&#34;headerlink&#34; href=&#34;#kate-michie-phd-university-of-new-south-wales新南威尔士大学&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;来自新南威尔士大学的 Kate Michie 博士作为 GCC2023 的第二位主讲人发表了题为 “Alphafold2 和深度学习时代：结构生物学的最新进展” 的演讲。 Michie 博士在蛋白质结构生物学方面拥有二十多年的经验，并广泛使用 Alphafold2，并与众多研究人员密切合作，教他们如何使用这一强大的工具来推进他们的研究。在她的主题演讲中，Michie 博士呼吁关注 Galaxy 为结构生物学研究进展做好准备的迫切需要，这些进展肯定会伴随 Alphafold2 的巨大成功。 Michie 博士的演讲对 GCC2023 来说是一个有影响力的补充，因为 Galaxy 致力于保持竞争力并领先于社区的巨大研究需求。
&lt;img alt=&#34;GCC2023 Meeting Report Image5&#34; src=&#34;https://slab-1251708715.cos.ap-guangzhou.myqcloud.com/KGarden/2023/GCC2023-Meeting-Report-Image5.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;roberto-barrero-phd-queensland-university-of-technology昆士兰科技大学&#34;&gt;Roberto Barrero, PhD (Queensland University of Technology，昆士兰科技大学)&lt;a class=&#34;headerlink&#34; href=&#34;#roberto-barrero-phd-queensland-university-of-technology昆士兰科技大学&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;GCC2023 的最后一位主讲人是来自昆士兰科技大学的 Roberto Barrero 博士。巴雷罗博士的演讲题为 “通过更快、更准确地诊断植物病毒和类病毒，改善植物行业获得新遗传学的机会”，重点讨论利用生物信息学解决农业、植物生物安全和人类健康方面的现实问题。最近，Barrero 博士在开发植物诊断工具包方面发挥了重要作用，该工具包可以在一次测试中准确检测一系列病毒和类病毒，并于 2018 年向他和他的团队授予生物安全影响奖。Barrero 博士的研究进展得到了 Galaxy 的支持通过 GA-VirReport 和高通量测序技术。访问开放式端到端生物信息学工作流程对于诊断植物病毒和类病毒至关重要，Galaxy 很高兴能在 GCC2023 上将这一主题置于前沿。
&lt;img alt=&#34;GCC2023 Meeting Report Image6&#34; src=&#34;https://slab-1251708715.cos.ap-guangzhou.myqcloud.com/KGarden/2023/GCC2023-Meeting-Report-Image6.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;培训课程&#34;&gt;培训课程&lt;a class=&#34;headerlink&#34; href=&#34;#培训课程&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&#34;GCC2023 Meeting Report Image7&#34; src=&#34;https://slab-1251708715.cos.ap-guangzhou.myqcloud.com/KGarden/2023/GCC2023-Meeting-Report-Image7.png&#34; /&gt;
培训是 Galaxy 社区的首要任务。让研究人员能够轻松学习使用该平台、如何进行新的分析或探索能够解决研究人员面临的实际需求的功能和工具，对于 Galaxy 的发展和可持续发展发挥了重要作用。本着这种精神，在 GCC2023 的三天里，共举办了 15 场不同的培训课程，供与会者与专家一起学习和实践生物信息学。专家包括主要研究员、Galaxy 开发人员、项目经理和 Galaxy 高级用户。培训课程主题多种多样，为 GCC2023 的所有与会者提供相关且实用的学习机会。从微生物学和人类遗传学到工作流程和工具开发，GCC2023 培训课程提供了扩大与会者特定研究兴趣和遇到新主题的机会。&lt;/p&gt;
&lt;p&gt;每节课将近三个小时，让学员有时间充分沉浸在教材中，与培训师和其他学员交流，并与来自不同背景的人交流经验和方法。&lt;/p&gt;
&lt;h2 id=&#34;birds-of-a-feather-bof&#34;&gt;Birds of a Feather (BoF)&lt;a class=&#34;headerlink&#34; href=&#34;#birds-of-a-feather-bof&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Birds of a Feather (BoF) 会议是 GCC 期间的非正式聚会，参与者可以讨论感兴趣的话题。 BoF 每天在会议结束时举行，各小组分成焦点小组，与专家和其他与会者进行交流和讨论。&lt;/p&gt;
&lt;p&gt;GCC2023 期间，与会者有九种不同的机会参加 BoF。今年的 BoF 提出了各种主题，包括备受期待的 Galaxy 高级用户与开发人员对话的机会。此外，BoF 还提供了举办迷你社交活动的机会，例如棋盘游戏、串酒吧和澳大利亚布里斯班徒步之旅！&lt;/p&gt;
&lt;h2 id=&#34;cofest&#34;&gt;CoFest&lt;a class=&#34;headerlink&#34; href=&#34;#cofest&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;GCC2023 主会之后，举办了为期三天的协作节（CoFest）。 CoFest 是 Galaxy 成员的社区聚会，这些成员有兴趣为 Galaxy 的工具集、文档、培训材料、代码库以及扩展 Galaxy 生态系统的其他任何地方做出贡献。 CoFest 的目标是：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;扩大贡献者社区。这次 CoFest 的首要目的是欢迎新的贡献者，帮助您学习资源并结识能够帮助您做出贡献的人。&lt;/li&gt;
&lt;li&gt;扩大 Galaxy 生态系统。不仅仅是代码，而是整个生态系统。这包括培训、工具、最佳实践工作流程、文档、测试用例、翻译、基础设施，甚至代码。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;CoFest 的参与者围绕着共同的兴趣，讨论与这些兴趣相关的共同话题。这些群组在 CoFest 开始前、开始时和整个过程中形成，旨在相互之间保持流动和高度互动。今年的 CoFest 分为九大主题：前端、后端、社区、设计、工具、工作流程、培训、测试和辅助项目。由于 CoFest 在整个活动期间都在不断变化和构建，因此主题被进一步细分，重点关注以下主题：交互式工具；升级 Vue3 和上传功能；吸引和保留社区参与活动、管理和领导力；ChatGXY；实施 Galaxy 工具健康审计服务；以及 Simon 的数据俱乐部。&lt;/p&gt;
&lt;h2 id=&#34;社会事件&#34;&gt;社会事件&lt;a class=&#34;headerlink&#34; href=&#34;#社会事件&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;GCC2023 希望将 Galaxy 社区的成员联系在一起，因此在整个会议期间举办了不同的社交活动。今年的 GCC2023 社交活动包括为会议拉开序幕的欢迎晚宴、由 Galaxy 社区成员主持的布里斯班徒步游、带有街机游戏的酒馆爬行、桌游之夜、会议晚宴，以及广受好评的 Lone Pine 考拉保护区之行！&lt;/p&gt;
&lt;p&gt;毫无疑问，Lone Pine 考拉保护区是今年社交活动的亮点！一大群 GCC2023 与会者参观了世界上最大的考拉保护区，度过了一个下午，与动物邂逅、野生动物表演，并了解一些澳大利亚最受欢迎的野生动物！
&lt;img alt=&#34;GCC2023 Meeting Report Image8&#34; src=&#34;https://slab-1251708715.cos.ap-guangzhou.myqcloud.com/KGarden/2023/GCC2023-Meeting-Report-Image8.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;通过这些有组织的社交活动，Galaxy 社区的成员们在建立职业关系的同时，也建立了友谊。此外，许多社区成员还通过非组织活动，包括游览植物园、参观动物园医院和热带雨林，以及一日游等，彼此建立联系。&lt;/p&gt;
&lt;p&gt;请参阅附录一，了解今年社交活动的更多照片以及遇到的所有令人惊叹的澳大利亚动物！&lt;/p&gt;
&lt;h2 id=&#34;纪念-simon-gladman&#34;&gt;纪念 Simon Gladman&lt;a class=&#34;headerlink&#34; href=&#34;#纪念-simon-gladman&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&#34;simon-数据俱乐部&#34;&gt;Simon 数据俱乐部&lt;a class=&#34;headerlink&#34; href=&#34;#simon-数据俱乐部&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Simon Gladman 是 GCC2023 的最初发起者和组织者，如果看到他的伴侣和孩子参加这次会议，他一定会感到非常自豪。Simon 获得了多项荣誉，他作为创新者、榜样、支持者和社区联系者的遗产将继续受到表彰，“星际数据委员会 (Intergalactic Data Commission)” 更名为 “Simon 数据俱乐部 (Simon’s Data Club)”，并在他的组织中获得年度奖项。姓名。
&lt;img alt=&#34;GCC2023 Meeting Report Image9&#34; src=&#34;https://slab-1251708715.cos.ap-guangzhou.myqcloud.com/KGarden/2023/GCC2023-Meeting-Report-Image9.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;simon-gladman-旅行补助金&#34;&gt;Simon Gladman 旅行补助金&lt;a class=&#34;headerlink&#34; href=&#34;#simon-gladman-旅行补助金&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;已故西蒙·格拉德曼 (Simon Gladman) 对 Galaxy 的贡献将获得以他名字命名的年度奖项。 Galaxy Australia 才华横溢的技术主管和大家的伙伴 Simon 在 GCC2023 上受到了人们的深深怀念，人们对他表示了许多敬意。&lt;/p&gt;
&lt;p&gt;Simon 对 Galaxy 充满热情并与人交流，并且很高兴能够组织在澳大利亚举办的首届国际 Galaxy 社区会议 (GCC)。在 GCC2023 上，我们宣布了首届 Simon Gladman 旅行补助金，以此来庆祝他。每年将向参加 Galaxy 社区活动的澳大利亚公民颁发 5,000 澳元的补助金。&lt;/p&gt;
&lt;p&gt;如果您与 Simon 一样充满热情并希望为 Galaxy 做出贡献，我们鼓励您申请 Simon Gladman 旅行补助金。&lt;/p&gt;
&lt;h2 id=&#34;感言&#34;&gt;感言&lt;a class=&#34;headerlink&#34; href=&#34;#感言&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Galaxy 执行董事会成员 Michael Schatz 是约翰·霍普金斯大学计算机科学和生物学的彭博杰出教授，他很高兴地看到：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&amp;ldquo;The keynotes really highlighted how Galaxy enables cutting edge science.”&lt;/em&gt;
&lt;em&gt;“主题演讲真正强调了 Galaxy 如何实现尖端科学。”&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;来自 BioCommons、昆士兰网络基础设施基金会 (QCIF)、昆士兰大学、墨尔本生物信息学和 AARNet 的 Galaxy Australia 团队成员发表了从监测工具健康状况到开发最近发布的 Galaxy Australia 基因组实验室等主题。澳大利亚银河服务项目负责人 Gareth Price 博士表示：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;“There was a fantastic exchange between our team and international colleagues and wonderful opportunities to engage with the global Galaxy community. GCC was an exhilarating experience, and it was inspiring to be surrounded by like-minded people. The team left full of energy to keep improving Galaxy Australia and strengthen their collaborations with the wider Galaxy community.”&lt;/em&gt;
&lt;em&gt;“我们的团队与国际同事之间进行了精彩的交流，并有绝佳的机会与全球 Galaxy 社区互动。 GCC 是一次令人兴奋的经历，周围都是志趣相投的人，这很鼓舞人心。该团队充满活力地继续改进 Galaxy Australia，并加强与更广泛的 Galaxy 社区的合作。”&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;虽然我们是在昆士兰科技大学 (QUT) 的 The Cube 一流设施中举办的，但远程参与的能力是举办真正国际会议的关键因素。尽管 Amrita 大学系统基因组学首席科学家 Prash Suravajhala 博士是 GCC2023 组委会成员，但他无法从印度出发，但他：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;“Very excited and happy to be a part of GCC2023 virtually. We witnessed scintillating talks and brainstorming sessions, and the virtual attendance was a treat. This was a cherishing moment for me as I guzzled the talks from early morning India time! It has created a great camaraderie.&amp;rdquo;&lt;/em&gt;
&lt;em&gt;“能够以虚拟方式参加 GCC2023 感到非常兴奋和高兴。我们目睹了精彩的演讲和头脑风暴会议，虚拟出席是一种享受。这对我来说是一个珍贵的时刻，因为我沉迷于印度时间清晨的演讲！它创造了伟大的友情。&amp;rdquo;&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;recognition&#34;&gt;Recognition&lt;a class=&#34;headerlink&#34; href=&#34;#recognition&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;特别感谢 GCC2023 的赞助商：&lt;/p&gt;
&lt;h3 id=&#34;白金赞助商&#34;&gt;白金赞助商&lt;a class=&#34;headerlink&#34; href=&#34;#白金赞助商&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;BizData (&lt;a href=&#34;https://www.bizdata.com.au/&#34;&gt;https://www.bizdata.com.au/&lt;/a&gt;)&lt;/p&gt;
&lt;h3 id=&#34;银牌赞助商&#34;&gt;银牌赞助商&lt;a class=&#34;headerlink&#34; href=&#34;#银牌赞助商&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Limagrain (&lt;a href=&#34;https://www.limagrain.com/en&#34;&gt;https://www.limagrain.com/en&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;GalaxyWorks (&lt;a href=&#34;https://galaxyworks.io/&#34;&gt;https://galaxyworks.io/&lt;/a&gt;)&lt;/p&gt;
&lt;h3 id=&#34;铜牌赞助商&#34;&gt;铜牌赞助商&lt;a class=&#34;headerlink&#34; href=&#34;#铜牌赞助商&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;GIGA Science (&lt;a href=&#34;https://academic.oup.com/gigascience?login=false&#34;&gt;https://academic.oup.com/gigascience?login=false&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;非常感谢所有使 GCC2023 取得成功的个人：&lt;/p&gt;
&lt;h3 id=&#34;组织和科学委员会&#34;&gt;组织和科学委员会&lt;a class=&#34;headerlink&#34; href=&#34;#组织和科学委员会&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Andrew Lonie&lt;/p&gt;
&lt;p&gt;Christina Hall&lt;/p&gt;
&lt;p&gt;Enis Afgan&lt;/p&gt;
&lt;p&gt;Gareth Price&lt;/p&gt;
&lt;p&gt;Jenn Vessio&lt;/p&gt;
&lt;p&gt;Margita Jadan&lt;/p&gt;
&lt;p&gt;Prash Suravajhala&lt;/p&gt;
&lt;p&gt;Roberto Barrero Gumiel&lt;/p&gt;
&lt;p&gt;Ross Lazarus&lt;/p&gt;
&lt;p&gt;Assunta DeSanto&lt;/p&gt;
&lt;p&gt;Natalie Whitaker&lt;/p&gt;
&lt;p&gt;Simon Gladman&lt;/p&gt;
&lt;p&gt;Claudia Melogno de Sandoval &lt;/p&gt;
&lt;h3 id=&#34;培训协调员&#34;&gt;培训协调员&lt;a class=&#34;headerlink&#34; href=&#34;#培训协调员&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Assunta DeSanto&lt;/p&gt;
&lt;p&gt;Igor Makunin&lt;/p&gt;
&lt;p&gt;Mark Crowe&lt;/p&gt;
&lt;h3 id=&#34;在线支持&#34;&gt;在线支持&lt;a class=&#34;headerlink&#34; href=&#34;#在线支持&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Melissa Burke&lt;/p&gt;
&lt;p&gt;Patrick Capon&lt;/p&gt;
&lt;h3 id=&#34;科学计划成员&#34;&gt;科学计划成员&lt;a class=&#34;headerlink&#34; href=&#34;#科学计划成员&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Andrew Lonie&lt;/p&gt;
&lt;p&gt;Anne Claire Fouilloux&lt;/p&gt;
&lt;p&gt;Anna Syme&lt;/p&gt;
&lt;p&gt;Anshu Bhardwaj&lt;/p&gt;
&lt;p&gt;Bérénice Batut&lt;/p&gt;
&lt;p&gt;Bryan Raubenolt&lt;/p&gt;
&lt;p&gt;Cameron Hyde&lt;/p&gt;
&lt;p&gt;Catherine Bromhead&lt;/p&gt;
&lt;p&gt;Clare Sloggett&lt;/p&gt;
&lt;p&gt;Cristóbal Gallardo&lt;/p&gt;
&lt;p&gt;Dan Blankenberg&lt;/p&gt;
&lt;p&gt;Davor Davidović&lt;/p&gt;
&lt;p&gt;Enis Afgan&lt;/p&gt;
&lt;p&gt;Frederik Coppens&lt;/p&gt;
&lt;p&gt;Hans-Rudolf Hotz&lt;/p&gt;
&lt;p&gt;Ivan Jakovlić&lt;/p&gt;
&lt;p&gt;Jeremy Goecks&lt;/p&gt;
&lt;p&gt;Justin Lee&lt;/p&gt;
&lt;p&gt;Margita Jadan&lt;/p&gt;
&lt;p&gt;Maria Doyle&lt;/p&gt;
&lt;p&gt;Matthias Bernt&lt;/p&gt;
&lt;p&gt;Natalie Kucher&lt;/p&gt;
&lt;p&gt;Nicola Soranzo&lt;/p&gt;
&lt;p&gt;Nuwan Goonasekera&lt;/p&gt;
&lt;p&gt;Peter van Heusden&lt;/p&gt;
&lt;p&gt;Ralf Weber&lt;/p&gt;
&lt;p&gt;Ross Lazarus&lt;/p&gt;
&lt;p&gt;Soyean Kim&lt;/p&gt;
&lt;p&gt;Thomas Harrop&lt;/p&gt;
&lt;p&gt;Timothy Griffin&lt;/p&gt;
&lt;p&gt;Tyler Collins&lt;/p&gt;
&lt;p&gt;Wendi Bacon&lt;/p&gt;
&lt;p&gt;Yvan Le Bras&lt;/p&gt;
&lt;h3 id=&#34;联合节主办方&#34;&gt;联合节主办方&lt;a class=&#34;headerlink&#34; href=&#34;#联合节主办方&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Cameron Hyde&lt;/p&gt;
&lt;h2 id=&#34;附录一&#34;&gt;&lt;em&gt;附录一&lt;/em&gt;&lt;a class=&#34;headerlink&#34; href=&#34;#附录一&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&#34;GCC2023 Meeting Report Image10&#34; src=&#34;https://slab-1251708715.cos.ap-guangzhou.myqcloud.com/KGarden/2023/GCC2023-Meeting-Report-Image10.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;GCC2023 Meeting Report Image11&#34; src=&#34;https://slab-1251708715.cos.ap-guangzhou.myqcloud.com/KGarden/2023/GCC2023-Meeting-Report-Image11.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;GCC2023 Meeting Report Image12&#34; src=&#34;https://slab-1251708715.cos.ap-guangzhou.myqcloud.com/KGarden/2023/GCC2023-Meeting-Report-Image12.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;GCC2023 Meeting Report Image13&#34; src=&#34;https://slab-1251708715.cos.ap-guangzhou.myqcloud.com/KGarden/2023/GCC2023-Meeting-Report-Image13.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;GCC2023 Meeting Report Image14&#34; src=&#34;https://slab-1251708715.cos.ap-guangzhou.myqcloud.com/KGarden/2023/GCC2023-Meeting-Report-Image14.png&#34; /&gt;&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;21&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-21/</link>
      <pubDate>Thu, 23 Nov 2023 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-21/</guid>
      
    </item>
    
    <item>
      <title>Notepad++ 在 GitHub 已经沦为战场了</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;Notepad++ 这片瓜田的瓜都吃了好几年了，作者却一直还在死性不改 。。。。。&lt;/p&gt;
&lt;p&gt;同样的 Notepad++ 在 GitHub 仓库 &lt;a href=&#34;https://github.com/notepad-plus-plus/notepad-plus-plus&#34;&gt;notepad-plus-plus&lt;/a&gt; 早已沦为反华辱华的垃圾场，群魔乱舞，简直惨不忍睹！&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;&lt;img src=&#39;https://slab-1251708715.cos.ap-guangzhou.myqcloud.com/KGarden/2023/say-no.png&#39; alt=&#39;say-no-to-Notepad++&#39; width=600&gt;&lt;/p&gt;
&lt;h2 id=&#34;add-random-characters&#34;&gt;Add random characters&lt;a class=&#34;headerlink&#34; href=&#34;#add-random-characters&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Twitter：&lt;a href=&#34;https://twitter.com/Notepad_plus/status/1618276938342359042&#34;&gt;https://twitter.com/Notepad_plus/status/1618276938342359042&lt;/a&gt;  &lt;br /&gt;
V2EX：&lt;a href=&#34;https://www.v2ex.com/t/910777&#34;&gt;https://www.v2ex.com/t/910777&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;Twitter Notepad++&#34; src=&#34;https://slab-1251708715.cos.ap-guangzhou.myqcloud.com/KGarden/2023/twitter-notepad%2B%2B.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;free-uyghur&#34;&gt;Free Uyghur&lt;a class=&#34;headerlink&#34; href=&#34;#free-uyghur&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;不知道大家有没有留意，前两天（2019 年 10 月 29）开源文本编辑器 Notepad++ 发布了最新的  &lt;a href=&#34;https://notepad-plus-plus.org/downloads/v7.8.1/&#34;&gt;7.8.1&lt;/a&gt;  版本。&lt;/p&gt;
&lt;p&gt;然而，软件新版本发布后，在该版本中 Notepad++ 的作者同时附加了一篇名为《&lt;a href=&#34;https://notepad-plus-plus.org/news/v781-free-uyghur-edition/&#34;&gt;Notepad++ v7.8.1 : Free Uyghur&lt;/a&gt;》抹黑中国的文章，具体的内容请大家自行百度（图片是文章部分截图）。而且这已经不是 Notepad++ 第一次这么干了！
&lt;img alt=&#34;Notepad++ Free Uyghur&#34; src=&#34;https://slab-1251708715.cos.ap-guangzhou.myqcloud.com/KGarden/2023/notepad%2B%2Bv781.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;Notepad++ 的 &amp;ldquo;Free Uyghur&amp;rdquo; 出来以后，Notepad++ 所在的 Github 瞬间被广大中国的开发者占领，他们用自己的方式进行了回击。小编也忍不住上去看一下，发现  GitHub 上面基本上都是骂 Notepad++ 作者的，不过也有少数支持作者。
&lt;img alt=&#34;notepad-781-github-issue1&#34; src=&#34;https://slab-1251708715.cos.ap-guangzhou.myqcloud.com/KGarden/2023/notepad-781-github-issue1.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;notepad-781-github-issue2&#34; src=&#34;https://slab-1251708715.cos.ap-guangzhou.myqcloud.com/KGarden/2023/notepad-781-github-issue2.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;起底一下开发者&#34;&gt;起底一下开发者&lt;a class=&#34;headerlink&#34; href=&#34;#起底一下开发者&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;后来查了一下，Notepad++ 的作者，原来名字叫做侯今吾（英语：DonHO，&lt;a href=&#34;https://github.com/donho&#34;&gt;https://github.com/donho&lt;/a&gt;），是一个毕业于台湾淡江大学及巴黎第七大学的电脑工程师，作为一个台湾人，也是一个台独积极分子，侯今吾借助 Notepad++ 抹黑中国可谓由来已久。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;Notepad++ DonHO&#34; src=&#34;https://slab-1251708715.cos.ap-guangzhou.myqcloud.com/KGarden/2023/notepad-donho.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;我也来说几句&#34;&gt;我也来说几句&lt;a class=&#34;headerlink&#34; href=&#34;#我也来说几句&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;在这里我想说的是，Notepad++ 作为一款免费开源，深受国外编程爱好者赞扬，也为台湾开源界赢得好评，效率很高的文本编辑器，在早年间也是小编最喜欢常用的软件之一。但对于政见这件事情，小编觉得就像吃一道菜一样，你可以选择吃与不吃，不吃，你可以一笑而过，喜欢的人照常吃，与你无关，但你绝对不能吐一口脏东西上去。&lt;/p&gt;
&lt;p&gt;软件本身是没什么问题的，要说软件和作者之间的关系，那就是爱用不用的关系了。同类软件，我不喜欢你作者，当然就不用了，当然我不用也不会对软件发展有什么影响，不过我想说，这就像是去餐馆吃饭。对于顾客来说，他吃与不吃，不会影响服务员的工资。但对于服务员来说，至少不能让顾客觉得你讨厌。&lt;/p&gt;
&lt;p&gt;最后，有人说要抵制 Notepad++，但对我而言，小编是反对把开源与政治挂钩的，因此小编选择不用 Notepad++ —— 我有选择的权利，既然开源的编辑器那么多（我可以用 &lt;a href=&#34;https://www.sublimetext.com/&#34;&gt;Sublime Text&lt;/a&gt; (虽然 &lt;a href=&#34;https://www.sublimetext.com/&#34;&gt;Sublime Text&lt;/a&gt; 是非开源的)，可以用 &lt;a href=&#34;https://code.visualstudio.com/&#34;&gt;Visual Studio Code&lt;/a&gt;，可以用 &lt;a href=&#34;https://atom.io/&#34;&gt;Github Atom&lt;/a&gt;，也可以用 &lt;a href=&#34;https://tools.stefankueng.com/BowPad.html&#34;&gt;BowPad&lt;/a&gt;、&lt;a href=&#34;http://editra.org/&#34;&gt;Editra&lt;/a&gt;，甚至是国人开发的 &lt;a href=&#34;https://gitee.com/cxasm/notepad--&#34;&gt;Notepad&amp;ndash;&lt;/a&gt;），我又何必选择一个带政治倾向自己又不喜欢的编辑器呢！&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;22&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-22/</link>
      <pubDate>Thu, 23 Nov 2023 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-22/</guid>
      
    </item>
    
    <item>
      <title>兆碱基中关于 Kb、KB、Bps、bps 的区别</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;生物信息很多文章都提到 DNA 序列的 100 万个碱基数据（兆碱基）大致相当于计算机 1 兆的存储空间。借着这个问题，我们今天来聊一聊计算机存储和数据传输中 Kb、KB、Bps、bps 的一些区别，分析一下所谓的兆碱基到底是使用哪一种标准（单位）怎么计算出来的。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;h2 id=&#34;计算机存储容量单位&#34;&gt;计算机存储容量单位&lt;a class=&#34;headerlink&#34; href=&#34;#计算机存储容量单位&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Bit (binary digit)：亦称二进制位，指二进制中的一位，是信息的最小单位。位的值只会是 0 或 1。虽然计算机也提供对位的判断和操作，但是计算机指令一般以字节(Byte)为单位。在大多数的计算机系统中，八位是一个字节。一位的值通常以存储电容是否带电来衡量。&lt;/p&gt;
&lt;p&gt;B (Byte)：字节。8 个二进制位构成 1 个&amp;rdquo;字节(Byte)&amp;rdquo;，它是电脑存储空间的基本计量单位。1 字节 (Byte)=8(bit) 位，就是有 8 个二进制数组成。1 个英文字符是 1 个字节,也就是 1B；1 个汉字为 2 个字符，也就是 2B。&lt;/p&gt;
&lt;p&gt;GB (Gigabyte)：吉字节，是一种&lt;strong&gt;十进制&lt;/strong&gt;的信息计量单位。Gibibyte（giga binary byte 的缩写）则是&lt;strong&gt;二进制&lt;/strong&gt;信息计量的一个单位，简称 GiB。吉字节（Gigabyte）常容易和二进制的信息计量单位 Gibibyte 混淆。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Gibibyte 与 Gigabyte 常常被混淆，前者的计算方式是二进制，后者的计算方式是十进制。现今的计算上，常把 Gigabyte 以二进制的方式计算，即 &lt;span class=&#34;arithmatex&#34;&gt;\(2^{30} = 1,073,741,824\)&lt;/span&gt; 。(因为 Windows 对 GB 这个信息计量单位的误用，因此在 Windows 中显示的 &amp;ldquo;1GB&amp;rdquo;，其实应是指 &amp;ldquo;1GiB&amp;rdquo;，但 Windows 却显示为 &amp;ldquo;1GB&amp;rdquo;，而常造成误解。误用会普遍化的一大因素，是因为 Windows 的操作系统占有率高)，由于两种换算方法的不同，使容量在计算上相差了 7.3%，所以常有 Windows 系统报告的容量比硬盘标示的容量还要小的情况发生。但在苹果公司的 OS X 操作系统中，对于存储设备的容量计算方式与硬盘厂商一致，均为 1GB = 1,000,000,000 ( &lt;span class=&#34;arithmatex&#34;&gt;\(10^{9}\)&lt;/span&gt; ) 字节的十进制，避免了计算和使用上的麻烦。&lt;/p&gt;
&lt;p&gt;—— 维基百科 - Gibibyte，&lt;a href=&#34;https://zh.wikipedia.org/wiki/Gibibyte&#34;&gt;https://zh.wikipedia.org/wiki/Gibibyte&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;K、M、G 都是 KB、MB、GB 的简称。由于混淆已经普遍化，Gigabyte 往往是指 Gibibyte，所以平时我们说的 1 兆存储就是 1M（MB），1G 存储就是 1GB）。我们的照片一般是 104KB、209KB、1.45MB、2.45MB、3.32MB 等等。&lt;/p&gt;
&lt;p&gt;在说明其他储存单位的换算前，我们来看看两个标准：SI、IEC。&lt;/p&gt;
&lt;h3 id=&#34;国际单位制si&#34;&gt;国际单位制（SI）&lt;a class=&#34;headerlink&#34; href=&#34;#国际单位制si&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;国际单位制(简称 SI，来自于法语 Système International d&amp;rsquo;Unités)，是世界上最普遍采用的标准度量系统。国际单位制以七个基本单位(米（m），千克（kg），秒（s），安培（A），开尔文（K），摩尔（mol），坎德拉（cd）)为基础，由此建立起一系列相互换算关系明确的&amp;rdquo;一致单位&amp;rdquo;。另有二十个基于十进制的词头，当加在单位名称或符号前的时候，可用于表达该单位的倍数或分数。&lt;/p&gt;
&lt;h3 id=&#34;国际电工委员会iec&#34;&gt;国际电工委员会（IEC）&lt;a class=&#34;headerlink&#34; href=&#34;#国际电工委员会iec&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;国际电工委员会（IEC, International Electrotechnical Commission）成立于 1906 年，至今已有 90 多年的历史。它是世界上成立最早的国际性电工标准化机构，负责有关电气工程和电子工程领域中的国际标准化工作。&lt;/p&gt;
&lt;p&gt;IEC 的宗旨是，促进电气、电子工程领域中标准化及有关问题的国际合作，增进国际间的相互了解。为实现这一目的，IEC 出版包括国际标准在内的各种出版物，并希望各成员在本国条件允许的情况下，在本国的标准化工作中使用这些标准。&lt;/p&gt;
&lt;p&gt;目前 IEC 的工作领域已由单纯研究电气设备、电机的名词术语和功率等问题扩展到电子、电力、微电子及其应用、通讯、视听、机器人、信息技术、新型医疗器械和核仪表等电工技术的各个方面。IEC 标准的权威性是世界公认的，截止到 2008 年 12 月底，IEC 已制定了 5425 个国际标准。&lt;/p&gt;
&lt;p&gt;不同标准下储存单位的次方单位 ( &lt;span class=&#34;arithmatex&#34;&gt;\(2^{10}=1024\)&lt;/span&gt; )：&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;字节的次方单位&#34; src=&#34;https://slab-1251708715.cos.ap-guangzhou.myqcloud.com/KGarden/2023/byte-wiki.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;比特率单位&#34;&gt;比特率单位&lt;a class=&#34;headerlink&#34; href=&#34;#比特率单位&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;在电信和计算领域，比特率（Bit rate）是指单位时间内传输送或处理的比特的数量。比特率经常在电信领域用作连接速度、传输速度、信息传输速率和数字带宽容量的同义词。&lt;/p&gt;
&lt;p&gt;在数字多媒体领域，比特率是单位时间播放连续的媒体如压缩后的音频或视频的比特数量。在这个意义上讲，它相当于术语数字带宽消耗量，或吞吐量。&lt;/p&gt;
&lt;p&gt;比特率规定使用&amp;rdquo;比特每秒&amp;rdquo;（bit/s 或 bps）为单位，经常和国际单位制词头关联在一起：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;bps(bit/s)，即 bit pro second（位每秒）；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Kbps(Kbit/s)，即 Kilobit pro second(千位每秒)；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Mbps(Mbit/s)，即 Milionbit pro second(百万位每秒)。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;其中，bit 即比特，通常用 b（小写）表示，指一位二进制位，Milionbit=1000Kilobit=1000 000bit，所以 1Mbps=1000 000bps；&lt;/p&gt;
&lt;h3 id=&#34;bps-和-bps&#34;&gt;bps 和 Bps&lt;a class=&#34;headerlink&#34; href=&#34;#bps-和-bps&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;bps 是通常用来&lt;strong&gt;衡量带宽&lt;/strong&gt;的单位，常见于表示数据机及网络通讯的传输速率，指每秒钟传输的二进制位数。例如 GigabitEthernet 端口。
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;5 minute input rate 38410000 bits/sec, 6344 packets/sec
382410000 bits/sec = 382.41Mbps
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;通常电脑(软件)上显示的上传下载速度（如下面的阿里云 OSSBrowser、Google Chrome 数据下载速度），则是指每秒种传输的字节数（Byte）通常用 B（大写）表示：MB 即百万字节也称兆字节；KB 即千字节；B 即字节。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;1B=8b&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;1MB=1024KB=1024*1024B&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;1Mbps=1000Kbps=1000/8KBps=125KBps&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;我们通常说的 1M 带宽即指 1Mbps，因此 1M 的带宽下载的速度一般不会超过 125KB 每秒。2M、3M 带宽的下载速度分别不会超过 250KB、375KB 每秒。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;download-byte-rate&#34; src=&#34;https://slab-1251708715.cos.ap-guangzhou.myqcloud.com/KGarden/2023/download-byte-rate.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;数据传输速率的衡量单位 K 是十进制含义，但数据存储的 K 是 2 进制含义。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;1kbit/s 就是 1000bit/s，而 KB 是 1024 个字节,注意 KB(KByte) 和 kbit 的区别，另外，数据传输速率的单位是 bit/s 记作：bps 。&lt;/p&gt;
&lt;p&gt;在实际应用中：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;1kbps=1000bps&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;1Mbps=1000,000bps&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;1bps=0.000001bps&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;1Mbps 与 1m/s 是有区别的，1m/s 指的是 1024KB/s，而 1Mbps 指的是(1000/8)KB/s 也就是 125KB/S。&lt;/p&gt;
&lt;p&gt;记住 K 和 k 是没区别的  ，区别在于 bps 属于位每秒的单位，而 m/s ,KB/s 这两个属于字节每秒的单位，一字节等于 8 位，即 1k=8b。&lt;/p&gt;
&lt;h2 id=&#34;兆碱基&#34;&gt;兆碱基&lt;a class=&#34;headerlink&#34; href=&#34;#兆碱基&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;所以，在文章开头提到的 DNA 序列的 100 万个碱基数据（兆碱基）大致相当于计算机 1 兆的存储空间。其实也就是这么计算来得：&lt;/p&gt;
&lt;p&gt;一个碱基就是一个英文字母，而一个英文字母是 1 个字节（Byte），所以 100 万个碱基就是 1000,000 Byte。按照 SI 国际单位的十进制标准，正好相当于 1 MB，如果按照 IEC 国际电工委员会的二进制标准，应该为：1000,000 / 1024 /1024 ≈ 0.95 MB，则是大致相当于计算机 1 兆的存储空间。&lt;/p&gt;
&lt;h2 id=&#34;参考资料&#34;&gt;参考资料&lt;a class=&#34;headerlink&#34; href=&#34;#参考资料&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://zh.wikipedia.org/wiki/Gibibyte&#34;&gt;Wiki: Gibibyte&lt;/a&gt;，维基百科&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://zh.wikipedia.org/wiki/%E6%AF%94%E7%89%B9%E7%8E%87&#34;&gt;Wiki：比特率&lt;/a&gt;，维基百科&lt;/li&gt;
&lt;li&gt;沙翁，《&lt;a href=&#34;https://www.cnblogs.com/shaweng/p/3816985.html&#34;&gt;什么是 Mbps、Kbps、bps、kb、mb 及其换算和区别&lt;/a&gt;》，博客园&lt;/li&gt;
&lt;li&gt;大任 Dren，《&lt;a href=&#34;https://blog.csdn.net/a9254778/article/details/8513086&#34;&gt;bit、Byte、bps、Bps、pps、Gbps 的单位详细说明及换算&lt;/a&gt;》，CSDN-专业 IT 技术社区&lt;/li&gt;
&lt;/ul&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;20&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-20/</link>
      <pubDate>Thu, 23 Nov 2023 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-20/</guid>
      
    </item>
    
    <item>
      <title>大学计算机没有的一课</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;今天是2023年1月19日，马上要过年了，在这里先提前给大家拜年了，祝大家新年快乐，阖家幸福安康！&lt;/p&gt;
&lt;p&gt;今天来给大家推荐一个不错的开源项目。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;大学里的计算机课程往往只专注于讲授数据结构、操作系统这些知识，对于编程开发中常用的工具则留给学生自行学习。在 MIT 这个课程中，你可以了解和掌握命令行(shell)、文本编辑器(Vim)、版本控制系统(Git)等强大的工具，越早接触越能更加熟练地使用它们，有助于未来的职业生涯。
&lt;img alt=&#34;missing-semester&#34; src=&#34;https://slab-1251708715.cos.ap-guangzhou.myqcloud.com/KGarden/2023/23019-missing-semester.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;地址：&lt;/strong&gt;&lt;a href=&#34;https://github.com/missing-semester/missing-semester&#34;&gt;https://github.com/missing-semester/missing-semester&lt;/a&gt;
&lt;strong&gt;中文：&lt;/strong&gt;&lt;a href=&#34;https://missing-semester-cn.github.io/&#34;&gt;https://missing-semester-cn.github.io/&lt;/a&gt;&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;23&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-23/</link>
      <pubDate>Thu, 23 Nov 2023 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-23/</guid>
      
    </item>
    
    <item>
      <title>沉浸式双语网页翻译扩展</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;向大家极力推荐这个插件：&lt;strong&gt;沉浸式双语网页翻译扩展&lt;/strong&gt;，浏览器翻译神器，而且&lt;strong&gt;完全免费&lt;/strong&gt;！&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;GitHub：&lt;/strong&gt; &lt;a href=&#34;https://github.com/immersive-translate/immersive-translate&#34;&gt;https://github.com/immersive-translate/immersive-translate&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;如果你是 &lt;strong&gt;Mac&lt;/strong&gt; 系统，推荐：&lt;a href=&#34;https://github.com/ripperhe/Bob&#34;&gt;https://github.com/ripperhe/Bob&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;!-- more --&gt;

&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FtAZvqEDdgc3yfpbqwRq40MUEfld.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;截图&lt;/strong&gt;
&lt;img alt=&#34;Twitter 翻译&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FpC4e5Sf_G5YT9bzCWSTl4oBIBVO.png&#34; title=&#34;Twitter 翻译&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;pdf 文件翻译&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FpImmIXzUhUNXaD-OgDI1AArm2eu.png&#34; title=&#34;pdf 文件翻译&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;Reddit 高亮译文样式&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FuFqmDqRNOZl_es2sVoRkmeMDAar.png&#34; title=&#34;Reddit 高亮译文样式&#34; /&gt;&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;19&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-19/</link>
      <pubDate>Thu, 23 Nov 2023 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-19/</guid>
      
    </item>
    
    <item>
      <title>跨端博客解决方案 Elog 使用</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;Elog (&lt;a href=&#34;https://github.com/LetTTGACO/elog&#34;&gt;https://github.com/LetTTGACO/elog&lt;/a&gt;) —— 开放式跨平台博客解决方案，随意组合写作平台 (语雀/Notion/FlowUs) 和部署平台 (Hexo/Vitepress 等 。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;主要配置文件 &lt;strong&gt;elog.config.js&lt;/strong&gt;：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nx&#34;&gt;module&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;exports&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;write&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;platform&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;yuque&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;yuque&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;token&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;process&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;YUQUE_TOKEN&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;baseUrl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;login&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;process&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;YUQUE_LOGIN&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;repo&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;process&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;YUQUE_REPO&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;onlyPublic&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;onlyPublished&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;notion&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;token&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;process&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;NOTION_TOKEN&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;databaseId&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;process&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;NOTION_DATABASE_ID&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;filter&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// {property: &amp;#39;status&amp;#39;, select: {equals: &amp;#39;已发布&amp;#39;}}&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sorts&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// [{timestamp: &amp;#39;created_time&amp;#39;, direction: &amp;#39;descending&amp;#39;}],&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;catalog&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;flowus&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;tablePageId&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;process&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;FLOWUS_TABLE_PAGE_ID&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;filter&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// {property: &amp;#39;status&amp;#39;,value: &amp;#39;已发布&amp;#39;}&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sort&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// { property: &amp;#39;createdAt&amp;#39;, direction: &amp;#39;descending&amp;#39; }&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;catalog&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;deploy&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;platform&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;local&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;local&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;outputDir&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;./Cookbook&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;filename&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;title&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;//生成文档的命名格式，取值 urlname|title&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;format&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;markdown&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;catalog&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;//是否按照目录生成文档&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;formatExt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;confluence&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;process&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;CONFLUENCE_USER&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;password&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;process&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;CONFLUENCE_PASSWORD&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;baseUrl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;process&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;CONFLUENCE_BASE_URL&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;spaceKey&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;process&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;CONFLUENCE_SPACE_KEY&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;rootPageId&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;process&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;CONFLUENCE_ROOT_PAGE_ID&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// 可选&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;formatExt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// 可选&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;image&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;enable&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;platform&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;local&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;local&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;outputDir&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;./Images&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;//本地图片保存目录&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;prefixKey&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;/cookbook&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;//替换图片的url前缀，如 ![image.png](/cookbook/xxxx.png)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;oss&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;secretId&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;process&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;OSS_SECRET_ID&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;secretKey&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;process&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;OSS_SECRET_KEY&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;bucket&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;process&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;OSS_BUCKET&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;region&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;process&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;OSS_REGION&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;host&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;process&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;OSS_HOST&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;prefixKey&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;secretExt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// 可选&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;cos&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;secretId&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;process&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;COS_SECRET_ID&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;secretKey&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;process&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;COS_SECRET_KEY&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;bucket&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;process&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;COS_BUCKET&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;region&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;process&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;COS_REGION&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;host&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;process&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;COS_HOST&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;prefixKey&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;secretExt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// 可选&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;qiniu&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;secretId&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;process&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;QINIU_SECRET_ID&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;secretKey&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;process&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;QINIU_SECRET_KEY&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;bucket&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;process&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;QINIU_BUCKET&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;region&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;process&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;QINIU_REGION&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;host&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;process&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;QINIU_HOST&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;prefixKey&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;secretExt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// 可选&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;upyun&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;process&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;UPYUN_USER&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;password&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;process&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;UPYUN_PASSWORD&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;bucket&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;process&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;UPYUN_BUCKET&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;host&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;process&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;UPYUN_HOST&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;prefixKey&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;secretExt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// 可选&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;github&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;process&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;GITHUB_USER&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;token&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;process&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;GITHUB_TOKEN&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;repo&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;process&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;GITHUB_REPO&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;branch&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;host&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;prefixKey&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;secretExt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// 可选&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;基于语雀 WebHook 实现实时同步：&lt;a href=&#34;https://github.com/LetTTGACO/serverless-api&#34;&gt;https://github.com/LetTTGACO/serverless-api&lt;/a&gt;&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;18&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-18/</link>
      <pubDate>Thu, 23 Nov 2023 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-18/</guid>
      
    </item>
    
    <item>
      <title>NCBI API 使用</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;blockquote&gt;
&lt;p&gt;参考：https://www.ncbi.nlm.nih.gov/books/NBK25499/&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This chapter serves as a reference for all supported parameters for the E-utilities, along with accepted values and usage guidelines. This information is provided for each E-utility in sections below, and parameters and/or values specific to particular databases are discussed within each section. Most E-utilities have a set of parameters that are required for any call, in addition to several additional optional parameters that extend the tool&amp;rsquo;s functionality. These two sets of parameters are discussed separately in each section.&lt;/p&gt;
&lt;!-- more --&gt;

&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;17&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/tech/discussions-17/</link>
      <pubDate>Tue, 21 Nov 2023 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/tech/discussions-17/</guid>
      
    </item>
    
    <item>
      <title>基于 GitHub Discussions 的博客与站点</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;GitHub Discussions 是一个可以在每个 GitHub 仓库上启用的论坛。它使开发者能够轻松地讨论新功能，从社区获得反馈，创建投票，发布公告等。这里搜集了一些基于 GitHub Discussions 的博客与站点，以供参考。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/YeungKC/Hakuba&#34;&gt;Hakuba&lt;/a&gt; - 一个通过 Github Discussion 驱动的 Blog 启动器&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/lencx/gg&#34;&gt;GG&lt;/a&gt; - Gatsby + GitHub，好像不支持 MathJax，也不见怎么维护了&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://lencx.tech/#/&#34;&gt;lencx.tech&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://shenweiyan.github.io/gg-discussions/&#34;&gt;gg-discussions&lt;/a&gt;，个人尝试对页面进行了一些调整&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/LeetaoGoooo/pure&#34;&gt;Pure&lt;/a&gt; 一个基于 Github Discussion 的极简博客&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;15&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-15/</link>
      <pubDate>Thu, 09 Nov 2023 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-15/</guid>
      
    </item>
    
    <item>
      <title>给作者留言</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2023-11-09&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2023-11-09T00:00:00&#39;&gt;2023-11-09&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2025-12-29&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2025-12-29T00:00:00&#39;&gt;2025-12-29&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;如果你通过本人的博文/平台学到了一点东西，那么对我最好的奖赏就是请你也尝试教我些东西。你可以通过邮箱、微信，或者移步到 “&lt;a href=&#34;https://github.com/shenweiyan/Digital-Garden/discussions/16&#34;&gt;GitHub Discussions&lt;/a&gt;” 写下您的建议，或者向我提问。&lt;/p&gt;
&lt;p&gt;感谢你的一路支持！&lt;/p&gt;
&lt;p&gt;📢 如果给我发邮件，或者通过微信添加好友，请写上您的&lt;strong&gt;真名实姓&lt;/strong&gt;，让我感受到一个&lt;strong&gt;真实的人的气息&lt;/strong&gt;。我不太愿意跟&lt;strong&gt;网名&lt;/strong&gt;打交道，对于那些不知来路、上来就问问题的微信和邮件，我通常会直接忽略。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;微信：&lt;strong&gt;ishenweiyan&lt;/strong&gt;（请备注真实姓名，谢谢）&lt;/li&gt;
&lt;li&gt;邮箱：&lt;strong&gt;shenweiyan@aliyun.com&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p align=&#34;center&#34;&gt;
    &lt;img src=&#34;https://gi.weiyan.tech/0000/img/feedback.gif&#34; alt=&#34;feedback&#34;&gt;
&lt;/p&gt;

&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;16&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/message/</link>
      <pubDate>Thu, 09 Nov 2023 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/message/</guid>
      
    </item>
    
    <item>
      <title>基于 Mkdocs 的主题与站点</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;鉴于 MkDocs 的诸多优点，让它被很多知名开源项目选中，用于搭建和项目相关的文档网站。比如 Python 里知名的 Web 圈里的 &lt;a href=&#34;https://sspai.com/link?target=https%3A%2F%2Fwww.django-rest-framework.org%2F&#34;&gt;django-rest-framework&lt;/a&gt;、&lt;a href=&#34;https://sspai.com/link?target=https%3A%2F%2Ffastapi.tiangolo.com%2F&#34;&gt;FastAPI&lt;/a&gt; 以及基于 Go 编写的云网关代理服务器 &lt;a href=&#34;https://sspai.com/link?target=https%3A%2F%2Fgithub.com%2Ftraefik%2Ftraefik&#34;&gt;traefik&lt;/a&gt; 等项目的官方文档站点，都是通过 MkDocs 进行搭建。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;下面列的是搜集的一些 Mkdocs 主题与站点，以供参考。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Hello 算法 - &lt;a href=&#34;https://www.hello-algo.com/&#34;&gt;https://www.hello-algo.com/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;FDU-MSC 论坛 - &lt;a href=&#34;https://fdu-msc.github.io/forum/&#34;&gt;https://fdu-msc.github.io/forum/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Django REST framework - &lt;a href=&#34;https://www.django-rest-framework.org/&#34;&gt;https://www.django-rest-framework.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;FastAPI - &lt;a href=&#34;https://fastapi.tiangolo.com/&#34;&gt;https://fastapi.tiangolo.com/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Chrisjing 的运维之旅精选 - &lt;a href=&#34;http://www.chrisjing.com/&#34;&gt;http://www.chrisjing.com/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;艇仔粥 TingZaiZuk - &lt;a href=&#34;https://herointene.github.io/&#34;&gt;https://herointene.github.io/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Arisa | Blog - &lt;a href=&#34;https://blog.arisa.moe/&#34;&gt;https://blog.arisa.moe/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;嬉戏实验室 - &lt;a href=&#34;https://blog.xiiigame.com/&#34;&gt;https://blog.xiiigame.com/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;老胡的周刊 - &lt;a href=&#34;https://weekly.howie6879.com/&#34;&gt;weekly.howie6879.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Wcowin&amp;rsquo;s Web - &lt;a href=&#34;https://wcowin.work/&#34;&gt;https://wcowin.work/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Jeremy Feng - &lt;a href=&#34;https://fengchao.pro/&#34;&gt;https://fengchao.pro/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;我的工作学习生活笔记 - &lt;a href=&#34;https://hellowac.github.io/&#34;&gt;https://hellowac.github.io/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Power&amp;rsquo;s Wiki - &lt;a href=&#34;https://wiki-power.com/&#34;&gt;https://wiki-power.com/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;14&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-14/</link>
      <pubDate>Wed, 08 Nov 2023 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-14/</guid>
      
    </item>
    
    <item>
      <title>Python 中 tkinter 源码安装使用与中文乱码</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;主要是因为下面这两个原因，所以决定从源码编译安装去折腾一下 tkinter，以下是一些记录。&lt;/p&gt;
&lt;h2 id=&#34;_tkinter-not-found&#34;&gt;_tkinter not found&lt;a class=&#34;headerlink&#34; href=&#34;#_tkinter-not-found&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Python 3 源码编译安装，执行 &lt;code&gt;make&lt;/code&gt; 过程中提示 &lt;code&gt;_tkinter not found&lt;/code&gt;，如下：
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make
......
Python&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;build&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;finished&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;successfully!
The&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;necessary&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bits&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;build&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;these&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;optional&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;modules&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;were&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;found:
_tkinter&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;!-- more --&gt;

&lt;h2 id=&#34;中文乱码&#34;&gt;中文乱码&lt;a class=&#34;headerlink&#34; href=&#34;#中文乱码&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;使用 Anaconda 3（conda 4.5.11）的 tkinter python 包（conda install -c conda-forge tk）开发 GUI 界面程序过程中，发现 UI 界面出现的中文 Unicode 乱码一直没办法解决。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;#-*- coding: utf-8 -*-&lt;/span&gt;

&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;sys&lt;/span&gt;

&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;tkinter&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;top&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Tk&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;top&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;wm_title&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;菜单&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;top&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;geometry&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;800x600+300+100&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# 创建一个菜单项，类似于导航栏&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;menubar&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Menu&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;top&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# 创建菜单项&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;fmenu1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Menu&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;top&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# 如果该菜单时顶层菜单的一个菜单项，则它添加的是下拉菜单的菜单&lt;/span&gt;
&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;item&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;新建文件&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;打开文件&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;结果保存&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt;
    &lt;span class=&#34;n&#34;&gt;fmenu1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;add_command&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;label&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;item&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;fmenu2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Menu&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;top&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;item&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;程序设置&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;程序运行&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt;
    &lt;span class=&#34;n&#34;&gt;fmenu2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;add_command&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;label&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;item&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;fmenu3&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Menu&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;top&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;item&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;使用教程&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;版权信息&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;检查更新&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt;
    &lt;span class=&#34;n&#34;&gt;fmenu3&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;add_command&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;label&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;item&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# add_cascade 的一个很重要的属性就是 menu 属性，它指明了要把那个菜单级联到该菜单项上&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# 当然，还必不可少的就是 label 属性，用于指定该菜单项的名称&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;menubar&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;add_cascade&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;label&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;文件&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;menu&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fmenu1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;menubar&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;add_cascade&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;label&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;程序&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;menu&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fmenu2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;menubar&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;add_cascade&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;label&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;帮助&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;menu&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fmenu3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# 最后可以用窗口的 menu 属性指定我们使用哪一个作为它的顶层菜单&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;top&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;menu&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;menubar&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;top&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mainloop&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fh22i487OzvY-uSXvAuFs6rEXXvu.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;我们也可以确认一下是不是 Tk 本身的问题：
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;echo &amp;#39;pack [button .h -text &amp;quot;Hello, World! 显示中文&amp;quot; -command exit]&amp;#39; | wish
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
- 正常显示
  &lt;img alt=&#34;TK 正常显示&#34; src=&#34;https://slab-1251708715.cos.ap-guangzhou.myqcloud.com/KGarden/2023/tk-ok.png&#34; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;中文乱码
  &lt;img alt=&#34;TK 中文乱码&#34; src=&#34;https://slab-1251708715.cos.ap-guangzhou.myqcloud.com/KGarden/2023/tk-error.png&#34; /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;一些参考资料：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Python 3.x 中文编码转换的问题：&lt;a href=&#34;https://bbs.bccn.net/thread-479560-1-1.html&#34;&gt;https://bbs.bccn.net/thread-479560-1-1.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Python 2.6 Tk 中文乱码解決方法：&lt;a href=&#34;http://blogkrogh.blogspot.com/2011/03/python-26-tk.html&#34;&gt;http://blogkrogh.blogspot.com/2011/03/python-26-tk.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;tkinter 乱码，pyqt4 乱码：&lt;a href=&#34;http://aboutweb.lofter.com/post/11743e_6f7e4a5&#34;&gt;http://aboutweb.lofter.com/post/11743e_6f7e4a5&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;上面几种方法测试后，问题依然存在。在 google 上一番搜索和来回测试之后，发现了几点信息：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;有人说，可能是 tcl/tk 安装不完整造成的。&lt;/li&gt;
&lt;li&gt;tcl/tk 重装后需要对 Python 重新编译 tkinter 才能起作用。&lt;/li&gt;
&lt;li&gt;conda install -c conda-forge tk，虽然没有任何报错，python2 中 import tkinter 也正常，但 conda 的软件安装就像一个黑盒子，无法确认 tcl/tk 是否完整安装。&lt;/li&gt;
&lt;li&gt;python 的 PyPI 仓库中是没有 tkinter 包的，想要使用 &lt;code&gt;pip install tkinter&lt;/code&gt; 卸载或者重装都是行不通的。&lt;/li&gt;
&lt;li&gt;网上也有人说可以使用 &lt;code&gt;yum install python3-tk/python-tk&lt;/code&gt; 解决，但对于本人来说，没用。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;什么是-tcl-tk-tkinter&#34;&gt;什么是 tcl, tk, tkinter&lt;a class=&#34;headerlink&#34; href=&#34;#什么是-tcl-tk-tkinter&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;The &lt;a href=&#34;https://docs.python.org/3.6/library/tkinter.html#module-tkinter&#34;&gt;tkinter&lt;/a&gt; package (“Tk interface”) is the standard Python interface to the Tk GUI toolkit. Both Tk and &lt;a href=&#34;https://docs.python.org/3.6/library/tkinter.html#module-tkinter&#34;&gt;tkinter&lt;/a&gt; are available on most Unix platforms, as well as on Windows systems. (Tk itself is not part of Python; it is maintained at ActiveState.)&lt;/p&gt;
&lt;p&gt;Running &lt;code&gt;python -m tkinter&lt;/code&gt; from the command line should open a window demonstrating a simple Tk interface, letting you know that &lt;a href=&#34;https://docs.python.org/3.6/library/tkinter.html#module-tkinter&#34;&gt;tkinter&lt;/a&gt; is properly installed on your system, and also showing what version of Tcl/Tk is installed, so you can read the Tcl/Tk documentation specific to that version.&lt;/p&gt;
&lt;p&gt;From &lt;a href=&#34;https://docs.python.org/3/library/tkinter.html&#34;&gt;https://docs.python.org/3/library/tkinter.html&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Tcl 是&amp;rdquo;工具控制语言（Tool Control Language）&amp;rdquo;的缩写。Tk 是 Tcl &amp;ldquo;图形工具箱&amp;rdquo; 的扩展，它提供各种标准的 GUI 接口项，以利于迅速进行高级应用程序开发。&lt;/p&gt;
&lt;p&gt;tkinter 包（&amp;rdquo;Tk 接口&amp;rdquo;）是 Tk GUI 工具包的标准 Python 接口。 Tk 和  tkinter 在大多数 Unix 平台以及 Windows 系统上都可用（Tk 本身不是 Python 的一部分，它在 ActiveState 中维护）。您可以通过从命令行运行  &lt;code&gt;python -m tkinter&lt;/code&gt;来检查  tkinter 是否已正确安装在系统上。如果已经安装该命令会打开一个简单的 Tk 界面，该界面除了让我们知道 tkinter 已正确安装，并且还显示安装了哪个版本的 Tcl/Tk，因此我们可以阅读特定于该版本的 Tcl/Tk 文档。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FpWx6rSTKaQ1BXXPQJzchNbviKYd.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;如果  tkinter  没有安装，则会提示找不到该包（注意在 Python 2 中该包包名为 Tkinter，Python 3 中为 tkinter）：&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FrRwzLFA1tIq2VfwS4p7i0dVLTjP.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;接下来我们将尝试在 Python 2/3 中安装 Tcl/Tk，并重新编译 Python 2/3，已完成 Tkinter 安装（tkinter 为 Python 的标准库，标准库的安装需要重新编译 Python ？）。&lt;/p&gt;
&lt;h2 id=&#34;activetcl-安装&#34;&gt;ActiveTcl 安装&lt;a class=&#34;headerlink&#34; href=&#34;#activetcl-安装&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;ActiveTcl 是 ActiveState 发布的关于 Tcl/Tk 的发行版本，该发行版本包含了最新版本的 Tk 和 Tcl 程序，我们下载其免费的社区版本进行安装即可。&lt;/p&gt;
&lt;p&gt;参考下载链接：&lt;a href=&#34;https://www.activestate.com/products/activetcl/downloads/&#34;&gt;https://www.activestate.com/products/activetcl/downloads/&lt;/a&gt;
参考安装教程：&lt;a href=&#34;https://tkdocs.com/tutorial/install.html&#34;&gt;https://tkdocs.com/tutorial/install.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;以下为 CentOS 6.5 下 &lt;strong&gt;ActiveTcl-8.6.9&lt;/strong&gt; 的一些安装记录，仅作参考。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;curl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-fL&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;https://shenweiyan-generic.pkg.coding.net/btscl/activetcl/ActiveTcl-8.6.9.8609.2-x86_64-linux-glibc-2.5-dcd3ff05d.tar.gz?version=8.6.9.8609.2&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-o&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ActiveTcl-8.6.9.8609.2-x86_64-linux-glibc-2.5-dcd3ff05d.tar.gz
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tar&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;zvxf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ActiveTcl-8.6.9.8609.2-x86_64-linux-glibc-2.5-dcd3ff05d.tar.gz
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ActiveTcl-8.6.9.8609.2-x86_64-linux-glibc-2.5-dcd3ff05d
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;./install.sh
......
Cancel&lt;span class=&#34;w&#34;&gt;         &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;no&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;RET&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
Accept&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;License&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;yes&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;A&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;gt;&amp;gt;A

Please&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;specify&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;installation&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;directory.
Path&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;/opt/ActiveTcl-8.6&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/home/shenweiyan/software/ActiveTcl-8.6.9

Please&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;specify&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;directory&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;demos.
Path&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;/home/shenweiyan/software/ActiveTcl-8.6.9/demos&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;:

Please&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;specify&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;runtime&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;installation&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;directory.

This&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;is&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;directory&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;applications&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;will&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;see&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;as&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;their&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;installation&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;directory
when&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;searching&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;packages&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;and&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;libraries,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;instead&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;directory&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;files
were&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;copied&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to.&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;In&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;most&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;circumstances&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;this&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;is&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;same&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;as&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;installation
directory&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;chosen&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;before.
Path&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;/home/shenweiyan/software/ActiveTcl-8.6.9&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;:

Press&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;begin&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;installation
&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;Installation&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Directory:&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;/home/shenweiyan/software/ActiveTcl-8.6.9
&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;Demos&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Directory:&lt;span class=&#34;w&#34;&gt;         &lt;/span&gt;/home/shenweiyan/software/ActiveTcl-8.6.9/demos
&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;Runtime&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Directory:&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;See&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Installation&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Directory
&lt;span class=&#34;nv&#34;&gt;Cancel&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;C
&lt;span class=&#34;nv&#34;&gt;Next&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;RET&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;gt;&amp;gt;

Installing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ActiveTcl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;...
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;Creating&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;directory&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/home/shenweiyan/software/ActiveTcl-8.6.9/share&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;...
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;Creating&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;directory&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/home/shenweiyan/software/ActiveTcl-8.6.9/share/man&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;...
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;......

Please&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;do&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;forget&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;extend&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;your&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;PATH&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;and&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;MANPATH&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;variables&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to
get&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;access&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;applications&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;and&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;manpages&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;distributed&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ActiveTcl.

For&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;a&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;csh&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;or&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;compatible&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;perform
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;setenv&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;PATH&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;/home/shenweiyan/software/ActiveTcl-8.6.9/bin:&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PATH&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;

For&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;a&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sh&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;or&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;similar&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;perform
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;/home/shenweiyan/software/ActiveTcl-8.6.9/bin:&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PATH&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;PATH

Some&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;shells&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;bash&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;example&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;allow
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;/home/shenweiyan/software/ActiveTcl-8.6.9/bin:&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PATH&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;

Similar&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;changes&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;are&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;required&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;MANPATH
Finish&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;gt;&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;ActiveTcl 安装完成后，需要把 path 添加至环境变量（\~/.bashrc）:
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;export PATH=&amp;quot;/home/shenweiyan/software/ActiveTcl-8.6.9/bin:$PATH&amp;quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;h2 id=&#34;tcltk&#34;&gt;Tcl/Tk&lt;a class=&#34;headerlink&#34; href=&#34;#tcltk&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;我们也可以直接去 &lt;a href=&#34;https://sourceforge.net/projects/tcl/files/Tcl/&#34;&gt;https://sourceforge.net/projects/tcl/files/Tcl/&lt;/a&gt; 直接通过源码的方式去编译安装 Tcl/Tk，尤其是当你的系统版本比较低，需要低版本的 Tcl/Tk，这种方法会比较合适。&lt;/p&gt;
&lt;p&gt;以 tcl8.5.19-src.tar.gz/tk8.5.19-src.tar.gz 为例，下载完成后，直接解压，然后执行常规安装即可。
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;cd tcl8.5.19/unix
./configure
make
make test
make install
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;h2 id=&#34;python-重新编译安装&#34;&gt;Python 重新编译安装&lt;a class=&#34;headerlink&#34; href=&#34;#python-重新编译安装&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;参考：&lt;a href=&#34;https://docs.python.org/3/whatsnew/3.11.html&#34;&gt;What’s New In Python 3.11&lt;/a&gt; - doc.python.org&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;📢 &lt;strong&gt;注意：&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Python 3.11.x 起（如 Python-3.11.3）中的 &lt;code&gt;configure&lt;/code&gt; 已经把 &lt;code&gt;--with-tcltk-includes&lt;/code&gt;和&lt;code&gt;--with-tcltk-libs&lt;/code&gt;这两个参数移除！并使用 &lt;code&gt;TCLTK_CFLAGS&lt;/code&gt; 和 &lt;code&gt;TCLTK_LIBS&lt;/code&gt; 替代！！！&lt;/li&gt;
&lt;li&gt;Python 3.10.x (及以下版本，如 Python-3.9.16) 以及 Python 2.x.x 在 &lt;code&gt;configure&lt;/code&gt; 中 &lt;code&gt;--with-tcltk-includes&lt;/code&gt;和&lt;code&gt;--with-tcltk-libs&lt;/code&gt;都是有的，通过这两个参数可以解决 Tkinter 的问题！！！&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;python-3&#34;&gt;Python 3&lt;a class=&#34;headerlink&#34; href=&#34;#python-3&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;这里以 Python-3.11.6 为例，参考 &lt;a href=&#34;https://github.com/pyenv/pyenv/issues/2499&#34;&gt;Python 3.11.0 install doesn’t recognize homebrew Tcl/Tk due to &amp;ndash;with-tcltk-libs, &amp;ndash;with-tcltk-includes switches being removed from 3.11 - pyenv#2499&lt;/a&gt;，在编译安装过程中使用 &lt;code&gt;TCLTK_CFLAGS&lt;/code&gt; 和 &lt;code&gt;TCLTK_LIBS&lt;/code&gt; 解决 &lt;code&gt;_tkinter&lt;/code&gt; 缺失的问题。
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;export TCLTK_LIBS=&amp;quot;-L/home/shenweiyan/software/ActiveTcl-8.6.9/lib -ltcl8.6 -ltk8.6&amp;quot;  # 8.5.x 版本，需改为 -ltcl8.5 -ltk8.5
export TCLTK_CFLAGS=&amp;quot;-I/home/shenweiyan/software/ActiveTcl-8.6.9/include&amp;quot;

cd Python-3.11.6
/configure --prefix=/home/shenweiyan/software/python-3.11.6 ......
make &amp;amp;&amp;amp; make install
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;python3-confiigure-tkinter-yes&#34; src=&#34;https://slab-1251708715.cos.ap-guangzhou.myqcloud.com/KGarden/2023/python-3-tkinter.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;对于 Python 3.10.x (及以下版本，如 Python-3.9.18)，&lt;code&gt;configure&lt;/code&gt; 中 &lt;code&gt;--with-tcltk-includes&lt;/code&gt; 和 &lt;code&gt;--with-tcltk-libs&lt;/code&gt; 的具体使用参考 &lt;a href=&#34;https://bugs.python.org/issue21887&#34;&gt;https://bugs.python.org/issue21887&lt;/a&gt;：  &lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;tcltk-issue-21887-msg&#34; src=&#34;https://gi.weiyan.tech/2024/10/tcltk-issue-21887-msg.webp&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;python-2&#34;&gt;Python 2&lt;a class=&#34;headerlink&#34; href=&#34;#python-2&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;想要在 Python 2.7 安装 Tkinter，需要在编译过程中通过 &lt;code&gt;--with-tcltk-includes&lt;/code&gt; 和 &lt;code&gt;--with-tcltk-libs&lt;/code&gt; 中指定 ActiveTcl 的头文件以及库所在路径。&lt;/p&gt;
&lt;p&gt;如果在执行编译安装过程中，出现无法找到 libXss.so.1 共享动态库报错：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tar&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;zvxf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Python-2.7.15.tgz
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Python-2.7.15
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;./configure&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/software/python-2.7&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--with-tcltk-includes&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;-I/usr/local/software/ActiveTcl-8.6/include&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--with-tcltk-libs&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;-L/usr/local/software/ActiveTcl-8.6/lib -ltcl8.6 -ltk8.6&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--enable-optimizations
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make

......

warning:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;building&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bundled&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;copy&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;libffi&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;is&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;deprecated&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;on&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;this&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;platform.&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;It&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;will&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;be&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;distributed&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Python&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;.7
***&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;WARNING:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;renaming&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;_tkinter&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;since&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;importing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;it&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;failed:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;libXss.so.1:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;cannot&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;open&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;shared&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;object&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;No&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;such&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;or&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;directory

Python&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;build&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;finished&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;successfully!
The&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;necessary&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bits&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;build&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;these&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;optional&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;modules&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;were&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;found:
_dbm&lt;span class=&#34;w&#34;&gt;                  &lt;/span&gt;_gdbm
To&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;find&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;necessary&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bits,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;look&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;setup.py&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;detect_modules&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;module&lt;span class=&#34;err&#34;&gt;&amp;#39;&lt;/span&gt;s&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;name.

The&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;following&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;modules&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;found&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;by&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;detect_modules&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;setup.py,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;have&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;been
built&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;by&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Makefile&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;instead,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;as&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;configured&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;by&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Setup&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;files:
atexit&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;pwd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;                   &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;time&lt;/span&gt;

Following&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;modules&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;built&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;successfully&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;but&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;were&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;removed&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;because&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;they&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;could&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;be&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;imported:
_tkinter

running&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;build_scripts

......
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;CentOS 下请参考以下解决方法：
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$ sudo yum install libXScrnSaver libXScrnSaver-devel
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;h2 id=&#34;调用-tkinter&#34;&gt;调用 Tkinter&lt;a class=&#34;headerlink&#34; href=&#34;#调用-tkinter&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Python 2/3 重新编译完后，执行一下下面的命令即可显示 Tk 的 ui 界面，以及相应的 Tcl/Tk 版本。
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;python2 -m Tkinter   # python 2
python3 -m tkinter   # python 3
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;img alt=&#34;python2-m-Tkinter&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FgBtb14ZgZFZXIRhOdt6efbYz7fd.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;这时候，我们重新运行开头的 GUI 界面程序，可以看到中文已经正常显示：
&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FqRHUXczPdHrQjFUXNQr_Cg_j2B4.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;参考资料&#34;&gt;参考资料&lt;a class=&#34;headerlink&#34; href=&#34;#参考资料&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Download And Install Tcl: ActiveTcl，&lt;a href=&#34;https://www.activestate.com/products/activetcl/downloads/&#34;&gt;https://www.activestate.com/products/activetcl/downloads/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Installing Tk，&lt;a href=&#34;https://tkdocs.com/tutorial/install.html&#34;&gt;https://tkdocs.com/tutorial/install.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Python 下&amp;rdquo;No module named _tkinter&amp;rdquo;问题解决过程分析，&lt;a href=&#34;https://www.jianshu.com/p/0baa9657377f&#34;&gt;https://www.jianshu.com/p/0baa9657377f&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Python GUI 编程(Tkinter)文件对话框，&lt;a href=&#34;https://my.oschina.net/u/2245781/blog/661533&#34;&gt;https://my.oschina.net/u/2245781/blog/661533&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;12&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/tech/discussions-12/</link>
      <pubDate>Thu, 02 Nov 2023 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/tech/discussions-12/</guid>
      
    </item>
    
    <item>
      <title>Python3 源码安装</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;编程，作为生物信息学的一个基础性技能，是任何一个生信工程师都无法绕开话题。也许有些人还在纠结 Perl 和 Python 到底应该学习哪一个，但作为目前最火最流行的编程语言 Python 还是非常值得尝试的。它不但可以进行文本处理，在统计、网站、游戏、爬虫、数据可视化等方面也有非常强大的应用，比起曾经的 Perl 真的强大和全面很多，且比 Perl 更容易入手。不管从长远发展，还是短期需要，学会 Python，看懂 Perl (或者先学   Python，后学 Perl) 应该是每一个生信工程必备的基础技能之一。&lt;/p&gt;
&lt;p&gt;工欲善其事，必先利其器。关于 Python 安装教程在网上一搜一大把，但总感觉不够全面，尤其对于中间出现的一些问题的解决方法不尽如人意。鉴于此，本文基于  CentOS/RHEL Linux 对 Python 的源码编译安装进行了一下简单的总结，记录如下。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;h2 id=&#34;安装环境&#34;&gt;安装环境&lt;a class=&#34;headerlink&#34; href=&#34;#安装环境&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Red Hat 6.5 + GCC 4.4.7（GCC-7.3.0 - 此版本 gcc 为手动安装）。&lt;/p&gt;
&lt;p&gt;GCC 高级版本手动或者 &lt;code&gt;yum&lt;/code&gt; 安装参考以下文章：
- &lt;a href=&#34;https://www.yuque.com/shenweiyan/cookbook/scl-devtoolset-note&#34;&gt;SCL+Devtoolset 安装与使用笔记 · 语雀&lt;/a&gt;
- &lt;a href=&#34;https://www.yuque.com/shenweiyan/cookbook/linux-gcc-install&#34;&gt;非 root 用户手动编译安装 GCC · 语雀&lt;/a&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;lsb_release&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-a
LSB&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Version:&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;:base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch
Distributor&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ID:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;RedHatEnterpriseServer
Description:&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;Red&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Hat&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Enterprise&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Linux&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Server&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;release&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;6&lt;/span&gt;.5&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;Santiago&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
Release:&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;6&lt;/span&gt;.5
Codename:&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;Santiago

$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;gcc&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--version
gcc&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;GCC&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4&lt;/span&gt;.4.7&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;20120313&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;Red&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Hat&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4&lt;/span&gt;.4.7-4&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
Copyright&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;C&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2010&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Free&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Software&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Foundation,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Inc.
This&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;is&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;free&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;software&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;see&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;copying&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conditions.&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;There&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;is&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;NO
warranty&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;even&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;MERCHANTABILITY&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;or&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FITNESS&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FOR&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;A&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;PARTICULAR&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;PURPOSE.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;解决依赖&#34;&gt;解决依赖&lt;a class=&#34;headerlink&#34; href=&#34;#解决依赖&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;如果您拥有 root 权限，请执以下依赖安装：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;yum&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;zlib
yum&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;zlib-devel
yum&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl
yum&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-devel
yum&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;libffi
yum&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;libffi-devel
yum&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;readline&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;readline-devel&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sqlite&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sqlite-devel&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tk-devel
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;缺少库名称&lt;/th&gt;
&lt;th&gt;安装命令&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;_uuid&lt;/td&gt;
&lt;td&gt;yum install libuuid-devel&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;readline&lt;/td&gt;
&lt;td&gt;yum install readline-devel&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;_tkinter&lt;/td&gt;
&lt;td&gt;yum install tk-devel&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;_ffi&lt;/td&gt;
&lt;td&gt;yum install libffi-devel&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;_curses&lt;/td&gt;
&lt;td&gt;yum install ncurses-libs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;_sqlite&lt;/td&gt;
&lt;td&gt;yum install sqlite-devel&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;_bz2&lt;/td&gt;
&lt;td&gt;yum install bzip2-devel&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;_ssl&lt;/td&gt;
&lt;td&gt;yum install openssl-devel&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;_gdbm&lt;/td&gt;
&lt;td&gt;yum install gdbm-devel&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;_dbi&lt;/td&gt;
&lt;td&gt;yum install libdbi-devel&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;_zlib&lt;/td&gt;
&lt;td&gt;yum install zlib-devel&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;lzma&lt;/td&gt;
&lt;td&gt;yum install xz-devel (yum install python-backports-lzma)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;如果您没有 root 权限，可以参考《&lt;a href=&#34;https://www.yuque.com/shenweiyan/cookbook/install-latest-r-from-source&#34;&gt;手把手教你在 Linux 源码安装最新版本的 R&lt;/a&gt;》一文，手动一个个去解决以上的依赖。&lt;/p&gt;
&lt;h3 id=&#34;_sqlite3&#34;&gt;_sqlite3&lt;a class=&#34;headerlink&#34; href=&#34;#_sqlite3&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;执行 &lt;strong&gt;make&lt;/strong&gt; 过程中提示 &lt;strong&gt;_sqlite3 not found&lt;/strong&gt;，如下：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make
......
Python&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;build&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;finished&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;successfully!
The&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;necessary&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bits&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;build&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;these&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;optional&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;modules&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;were&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;found:
_sqlite3&lt;span class=&#34;w&#34;&gt;              &lt;/span&gt;_ssl
To&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;find&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;necessary&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bits,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;look&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;setup.py&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;detect_modules&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;module&lt;span class=&#34;err&#34;&gt;&amp;#39;&lt;/span&gt;s&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;name.

The&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;following&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;modules&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;found&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;by&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;detect_modules&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;setup.py,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;have&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;been
built&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;by&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Makefile&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;instead,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;as&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;configured&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;by&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Setup&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;files:
_abc&lt;span class=&#34;w&#34;&gt;                  &lt;/span&gt;atexit&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;pwd&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;time&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4 id=&#34;系统已安装-sqlite3&#34;&gt;系统已安装 sqlite3&lt;a class=&#34;headerlink&#34; href=&#34;#系统已安装-sqlite3&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;如果执行 &lt;strong&gt;rpm -qa|grep sqlite&lt;/strong&gt; 看到 sqlite 和 sqlite-devel 都已经安装（libsqlite3.so 默认保存在 /usr/lib64 下； &lt;code&gt;sqlite3.h&lt;/code&gt; 默认保存在 &lt;code&gt;/usr/include&lt;/code&gt; 下）。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sqlite3&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-version
&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;.6.20

$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ll&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/lib64/libsqlite3.so
lrwxrwxrwx&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;root&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;root&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;19&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Apr&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;23&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2015&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/lib64/libsqlite3.so&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;libsqlite3.so.0.8.6

$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ll&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/include/sqlite3.h
-rw-r--r--&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;root&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;root&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;263K&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Nov&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;25&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2009&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/include/sqlite3.h
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;但是，执行 &lt;code&gt;make&lt;/code&gt; 依然出现以上报错，参考下面的方法《&lt;a href=&#34;https://stackoverflow.com/questions/32779768/python-build-from-source-cannot-build-optional-module-sqlite3&#34;&gt;python build from source: cannot build optional module sqlite3 - Stack Overflow&lt;/a&gt;》。&lt;/p&gt;
&lt;h4 id=&#34;手动安装-sqlite3&#34;&gt;手动安装 sqlite3&lt;a class=&#34;headerlink&#34; href=&#34;#手动安装-sqlite3&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;wget&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://www.sqlite.org/2021/sqlite-autoconf-3360000.tar.gz&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--no-check-certificate
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tar&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;zvxf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sqlite-autoconf-3360000.tar.gz
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sqlite-autoconf-3360000
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;./configure&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/home/shenweiyan/software/sqlite-3.36.0
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4 id=&#34;配置-sqlite3&#34;&gt;配置 sqlite3&lt;a class=&#34;headerlink&#34; href=&#34;#配置-sqlite3&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;配置环境&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;LD_LIBRARY_PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/home/shenweiyan/software/sqlite-3.36.0/lib:&lt;span class=&#34;nv&#34;&gt;$LD_LIBRARY_PATH&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
2. 调整源码或编译&lt;/p&gt;
&lt;p&gt;对于 3.11.x 以上版本的 Python 可以在 &lt;code&gt;configure&lt;/code&gt; 指定自定义安装的 sqlite3 路径解决 &lt;code&gt;_sqlite3&lt;/code&gt; 依赖。
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;./configure ... \
    LDFLAGS=&amp;quot;-L/home/shenweiyan/software/sqlite-3.36.0/lib&amp;quot; \
    CPPFLAGS=&amp;quot;-I/home/shenweiyan/software/sqlite-3.36.0/include&amp;quot; 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;有些低版本的 Python (如 3.7) 可能需要再源码文件中加入 &lt;code&gt;sqlite3.h&lt;/code&gt; 的文件路径。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;找到 &lt;strong&gt;sqlite3.h&lt;/strong&gt; 文件的保存目录。&lt;/li&gt;
&lt;li&gt;修改 &lt;strong&gt;setup.py&lt;/strong&gt; 文件，在 sqlite_inc_paths 中加上 sqlite3.h 的文件路径。&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nv&#34;&gt;sqlite_inc_paths&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;/home/shenweiyan/software/sqlite-3.36.0/include&amp;#39;&lt;/span&gt;,
&lt;span class=&#34;w&#34;&gt;                     &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;/usr/include&amp;#39;&lt;/span&gt;,
&lt;span class=&#34;w&#34;&gt;                     &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;/usr/include/sqlite&amp;#39;&lt;/span&gt;,
&lt;span class=&#34;w&#34;&gt;                     &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;/usr/include/sqlite3&amp;#39;&lt;/span&gt;,
&lt;span class=&#34;w&#34;&gt;                     &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;/usr/local/include&amp;#39;&lt;/span&gt;,
&lt;span class=&#34;w&#34;&gt;                     &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;/usr/local/include/sqlite&amp;#39;&lt;/span&gt;,
&lt;span class=&#34;w&#34;&gt;                     &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;/usr/local/include/sqlite3&amp;#39;&lt;/span&gt;,
&lt;span class=&#34;w&#34;&gt;                   &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;_ssl&#34;&gt;_ssl&lt;a class=&#34;headerlink&#34; href=&#34;#_ssl&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Python3 需要引用 &lt;code&gt;openssl&lt;/code&gt;  模块，但是 python3.7+ 在 CentOS 中要求的 openssl 版本最低为 1.0.2，而 CentOS 默认的为 1.0.1（CentOS-6.x 通过 &lt;code&gt;yum&lt;/code&gt;  源安装的 openssl 的最高版本是 1.0.1），所以需要手动更新 openssl。&lt;/p&gt;
&lt;p&gt;对于 openssl 版本的选择，建议至少选择 1.1.1+ 版本：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;urllib3 v2.0 only supports OpenSSL 1.1.1+, currently the &amp;lsquo;ssl&amp;rsquo; module is compiled with &amp;lsquo;OpenSSL 1.0.2k-fips  26 Jan 2017&amp;rsquo;. See: https://github.com/urllib3/urllib3/issues/2168&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Python requires an OpenSSL 1.0.2 or 1.1 compatible libssl with X509_VERIFY_PARAM_set1_host().&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 下载&lt;/span&gt;
wget&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;http://www.openssl.org/source/openssl-1.1.1.tar.gz

&lt;span class=&#34;c1&#34;&gt;# 解压缩&lt;/span&gt;
tar&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-zxvf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.1.1.tar.gz

&lt;span class=&#34;c1&#34;&gt;# 进入目录安装&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.1.1

&lt;span class=&#34;c1&#34;&gt;# 进行配置下，自定义&lt;/span&gt;
./config&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/home/shenweiyan/software/openssl-1.1.1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;shared&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;zlib

&lt;span class=&#34;c1&#34;&gt;# 编译并安装&lt;/span&gt;
make&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install

&lt;span class=&#34;c1&#34;&gt;# 配置到用户环境变量，随处使用&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;export LD_LIBRARY_PATH=/home/shenweiyan/software/openssl-1.1.1/lib:&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$LD_LIBRARY_PATH&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$HOME&lt;/span&gt;/.bashrc

&lt;span class=&#34;c1&#34;&gt;# 是环境变量配置生效&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$HOME&lt;/span&gt;/.bashrc
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;请注意：&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;openssl&lt;/strong&gt; 编译（config）的时候 &lt;strong&gt;必须要加上 shared  参数&lt;/strong&gt;，否者源码安装 Python 即使添加了 &lt;code&gt;--with-openssl&lt;/code&gt; 的自定义路径，依然会导致 &lt;code&gt;Could not build the ssl module!&lt;/code&gt; 报错！&lt;/li&gt;
&lt;li&gt;从 &lt;a href=&#34;https://www.openssl.org/source/&#34;&gt;https://www.openssl.org/source/&lt;/a&gt; 下载的源码 openssl-1.0.2s、openssl-1.0.2m，包括  CentOS-7.5 使用 &lt;code&gt;yum&lt;/code&gt; 安装的最高版本的 openssl-1.0.2k 目前发现依然会导致 &lt;code&gt;Could not build the ssl module&lt;/code&gt; ，建议从 &lt;a href=&#34;https://www.openssl.org/source/old/&#34;&gt;https://www.openssl.org/source/old/&lt;/a&gt; 下载 1.1.1 的源码编译安装。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;最后，在 Python 执行 &lt;code&gt;configure&lt;/code&gt; 的时候指定 openssl 的相关参数：
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;./configure ... \
    --with-openssl=/home/shenweiyan/software/openssl-1.1.1 \
    --with-openssl-rpath=/home/shenweiyan/software/openssl-1.1.1/lib \
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;h3 id=&#34;_tkinter&#34;&gt;_tkinter&lt;a class=&#34;headerlink&#34; href=&#34;#_tkinter&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Tkinter 模块缺失是一个比较棘手的问题，为此专门写了一篇文章来介绍这个问题。&lt;/p&gt;
&lt;p&gt;具体请参考：&lt;a href=&#34;https://github.com/shenweiyan/Knowledge-Garden/discussions/12&#34;&gt;Python 中 tkinter 源码安装使用与中文乱码 - Knowledge-Garden#12&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;_dbm&#34;&gt;_dbm&lt;a class=&#34;headerlink&#34; href=&#34;#_dbm&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;_dbm&lt;/code&gt; 和 &lt;code&gt;_gdbm&lt;/code&gt; 的模块缺失可以通过下面手动的方法解决。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;wget https://ftp.gnu.org/gnu/gdbm/gdbm-1.23.tar.gz
tar -zxvf gdbm-1.23.tar.gz
./configure --prefix=/home/shenweiyan/software/gdbm-1.23 --enable-libgdbm-compat  --enable-debug
make &amp;amp;&amp;amp; make install
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;最后，增加环境变量，并调整 Python 执行 &lt;code&gt;configure&lt;/code&gt; 时的参数：
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;export PATH=/home/shenweiyan/software/gdbm-1.23/bin:$PATH
export LD_LIBRARY_PATH=/home/shenweiyan/software/gdbm-1.23/lib:$LD_LIBRARY_PATH

./configure ... \
    LDFLAGS=&amp;quot;-L/home/shenweiyan/software/gdbm-1.23/lib&amp;quot; \
    CPPFLAGS=&amp;quot;-I/home/shenweiyan/software/gdbm-1.23/include&amp;quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;h3 id=&#34;_lzma&#34;&gt;_lzma&lt;a class=&#34;headerlink&#34; href=&#34;#_lzma&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;正常情况下，下面的方法可以解决该问题（如果您有 root 权限的话）。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# For ubuntu:&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sudo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;apt-get&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;liblzma-dev

&lt;span class=&#34;c1&#34;&gt;# For centos:&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;yum&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;xz-devel
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;普通用户可以手动安装解决：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;wget&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://tukaani.org/xz/xz-5.2.5.tar.gz&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--no-check-certificat
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tar&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;zvxf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;xz-5.2.5.tar.gz
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;xz-5.2.5
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;./configure&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/home/shenweiyan/software/xz-5.2.5
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;最后，配置环境：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;LD_LIBRARY_PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/home/shenweiyan/software/xz-5.2.5/lib:&lt;span class=&#34;nv&#34;&gt;$LD_LIBRARY_PATH&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;_ctypes&#34;&gt;_ctypes&lt;a class=&#34;headerlink&#34; href=&#34;#_ctypes&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;在 CentOS 6.x 安装 &lt;code&gt;libffi-devel&lt;/code&gt;  的时候出现以下问题：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;yum&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;libffi-devel
Loaded&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;plugins:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;product-id,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;refresh-packagekit,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;search-disabled-repos,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;security,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;subscription-manager
This&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;system&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;is&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;registered&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Red&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Hat&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Subscription&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Management.&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;You&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;can&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;use&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;subscription-manager&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;register.
Setting&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;up&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Process
cdrom&lt;span class=&#34;w&#34;&gt;                                                                                                                                         &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4&lt;/span&gt;.1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;kB&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;00&lt;/span&gt;:00&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;...
No&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;libffi-devel&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;available.
Error:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Nothing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;do&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;可以使用下面的方法安装：
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@log01&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# rpm -ivh http://mirror.centos.org/centos/6/os/x86_64/Packages/libffi-devel-3.0.5-3.2.el6.x86_64.rpm&lt;/span&gt;
Retrieving&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;http://mirror.centos.org/centos/6/os/x86_64/Packages/libffi-devel-3.0.5-3.2.el6.x86_64.rpm
warning:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/var/tmp/rpm-tmp.V9ihbu:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Header&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;V3&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;RSA/SHA256&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Signature,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;key&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ID&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;c105b9de:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;NOKEY
Preparing...&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;########################################### [100%]&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;:libffi-devel&lt;span class=&#34;w&#34;&gt;           &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;########################################### [100%]&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@log01&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# rpm -qa|grep libffi&lt;/span&gt;
libffi-3.0.5-3.2.el6.x86_64
libffi-devel-3.0.5-3.2.el6.x86_64
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;手动的源码方法安装如下：
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;wget&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ftp://sourceware.org/pub/libffi/libffi-3.2.1.tar.gz
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tar&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;zvxf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;libffi-3.2.1.tar.gz
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;./configure&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/home/shenweiyan/software/libffi-3.2.1
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;h3 id=&#34;pygraphviz&#34;&gt;pygraphviz&lt;a class=&#34;headerlink&#34; href=&#34;#pygraphviz&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;如果你不需要使用 pygraphviz，可以不用管这个依赖。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;PyGraphviz is a Python interface to the Graphviz graph layout and visualization package. With PyGraphviz you can create, edit, read, write, and draw graphs using Python to access the Graphviz graph data structure and layout algorithms.&lt;/p&gt;
&lt;p&gt;PyGraphviz 是 Graphviz 图形布局和可视化包的 Python 接口。 借助 PyGraphviz，您可以使用 Python 创建、编辑、读取、写入和绘制图形，以访问 Graphviz 图形数据结构和布局算法。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/home/shenweiyan/software/Python-3.7.3/bin/pip3&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pygraphviz
Collecting&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pygraphviz
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Using&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;cached&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://files.pythonhosted.org/packages/7e/b1/d6d849ddaf6f11036f9980d433f383d4c13d1ebcfc3cd09bc845bda7e433/pygraphviz-1.5.zip
Installing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;collected&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;packages:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pygraphviz
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Running&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;setup.py&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pygraphviz&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;error
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;Complete&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;output&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;command&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/home/shenweiyan/software/Python-3.7.3/bin/python3.7&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-u&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-c&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;import setuptools, tokenize;__file__=&amp;#39;/tmp/pip-install-_zdjdg0j/pygraphviz/setup.py&amp;#39;;f=getattr(tokenize, &amp;#39;open&amp;#39;, open)(__file__);code=f.read().replace(&amp;#39;\r\n&amp;#39;, &amp;#39;\n&amp;#39;);f.close();exec(compile(code, __file__, &amp;#39;exec&amp;#39;))&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--record&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/tmp/pip-record-g0mz7lrq/install-record.txt&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--single-version-externally-managed&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--compile:
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;running&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;Trying&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;dpkg
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;Failed&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;find&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;dpkg
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;Trying&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pkg-config
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;Package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;libcgraph&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;was&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;found&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pkg-config&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;search&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;path.
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;Perhaps&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;you&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;should&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;add&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;directory&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;containing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;libcgraph.pc&lt;span class=&#34;s1&#34;&gt;&amp;#39;&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;    to the PKG_CONFIG_PATH environment variable&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;    No package &amp;#39;&lt;/span&gt;libcgraph&lt;span class=&#34;s1&#34;&gt;&amp;#39; found&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;    Traceback (most recent call last):&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;      File &amp;quot;&amp;lt;string&amp;gt;&amp;quot;, line 1, in &amp;lt;module&amp;gt;&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;      File &amp;quot;/tmp/pip-install-_zdjdg0j/pygraphviz/setup.py&amp;quot;, line 93, in &amp;lt;module&amp;gt;&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;        tests_require=[&amp;#39;&lt;/span&gt;nose&amp;gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.3.7&lt;span class=&#34;s1&#34;&gt;&amp;#39;, &amp;#39;&lt;/span&gt;doctest-ignore-unicode&amp;gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;.1.2&lt;span class=&#34;s1&#34;&gt;&amp;#39;, &amp;#39;&lt;/span&gt;mock&amp;gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;.0.0&lt;span class=&#34;s1&#34;&gt;&amp;#39;],&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;      File &amp;quot;/home/shenweiyan/software/Python-3.7.3/lib/python3.7/site-packages/setuptools/__init__.py&amp;quot;, line 145, in setup&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;        return distutils.core.setup(**attrs)&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;      File &amp;quot;/home/shenweiyan/software/Python-3.7.3/lib/python3.7/distutils/core.py&amp;quot;, line 148, in setup&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;        dist.run_commands()&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;      File &amp;quot;/home/shenweiyan/software/Python-3.7.3/lib/python3.7/distutils/dist.py&amp;quot;, line 966, in run_commands&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;        self.run_command(cmd)&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;      File &amp;quot;/home/shenweiyan/software/Python-3.7.3/lib/python3.7/distutils/dist.py&amp;quot;, line 985, in run_command&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;        cmd_obj.run()&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;      File &amp;quot;/tmp/pip-install-_zdjdg0j/pygraphviz/setup_commands.py&amp;quot;, line 44, in modified_run&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;        self.include_path, self.library_path = get_graphviz_dirs()&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;      File &amp;quot;/tmp/pip-install-_zdjdg0j/pygraphviz/setup_extra.py&amp;quot;, line 162, in get_graphviz_dirs&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;        include_dirs, library_dirs = _try_configure(include_dirs, library_dirs, _pkg_config)&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;      File &amp;quot;/tmp/pip-install-_zdjdg0j/pygraphviz/setup_extra.py&amp;quot;, line 117, in _try_configure&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;        i, l = try_function()&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;      File &amp;quot;/tmp/pip-install-_zdjdg0j/pygraphviz/setup_extra.py&amp;quot;, line 72, in _pkg_config&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;        output = S.check_output([&amp;#39;&lt;/span&gt;pkg-config&lt;span class=&#34;s1&#34;&gt;&amp;#39;, &amp;#39;&lt;/span&gt;--libs-only-L&lt;span class=&#34;s1&#34;&gt;&amp;#39;, &amp;#39;&lt;/span&gt;libcgraph&lt;span class=&#34;s1&#34;&gt;&amp;#39;])&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;      File &amp;quot;/home/shenweiyan/software/Python-3.7.3/lib/python3.7/subprocess.py&amp;quot;, line 395, in check_output&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;        **kwargs).stdout&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;      File &amp;quot;/home/shenweiyan/software/Python-3.7.3/lib/python3.7/subprocess.py&amp;quot;, line 487, in run&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;        output=stdout, stderr=stderr)&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;    subprocess.CalledProcessError: Command &amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;pkg-config&amp;#39;&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;--libs-only-L&amp;#39;&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;libcgraph&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39; returned non-zero exit status 1.&lt;/span&gt;

&lt;span class=&#34;s1&#34;&gt;    ----------------------------------------&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;Command &amp;quot;/home/shenweiyan/software/Python-3.7.3/bin/python3.7 -u -c &amp;quot;import setuptools, tokenize;__file__=&amp;#39;&lt;/span&gt;/tmp/pip-install-_zdjdg0j/pygraphviz/setup.py&lt;span class=&#34;s1&#34;&gt;&amp;#39;;f=getattr(tokenize, &amp;#39;&lt;/span&gt;open&lt;span class=&#34;s1&#34;&gt;&amp;#39;, open)(__file__);code=f.read().replace(&amp;#39;&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\r\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;, &amp;#39;&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;);f.close();exec(compile(code, __file__, &amp;#39;&lt;/span&gt;exec&lt;span class=&#34;err&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;))&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot; install --record /tmp/pip-record-g0mz7lrq/install-record.txt --single-version-externally-managed --compile&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;failed&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;error&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;code&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/tmp/pip-install-_zdjdg0j/pygraphviz/
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;参考：《&lt;a href=&#34;https://github.com/pygraphviz/pygraphviz/issues/11&#34;&gt;Installation:fatal error: &amp;lsquo;graphviz/cgraph.h&amp;rsquo; file not found&lt;/a&gt;》&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;wget&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://graphviz.gitlab.io/pub/graphviz/stable/SOURCES/graphviz.tar.gz
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tar&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;zvxf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;graphviz.tar.gz
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;graphviz-2.40.1
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;./configure&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/home/shenweiyan/software/graphviz-2.40.1
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;推荐把安装好的 graphviz 添加到环境变量，这样可以避免运行过程中出现：&lt;strong&gt;&amp;ldquo;pygraphviz/graphviz_wrap.c:2987:29: fatal error: graphviz/cgraph.h: No such file or directory&amp;rdquo;&lt;/strong&gt; 无法找到头文件的异常。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;PKG_CONFIG_PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/home/shenweiyan/software/graphviz-2.40.1/lib/pkgconfig:&lt;span class=&#34;nv&#34;&gt;$PKG_CONFIG_PATH&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;LD_LIBRARY_PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/home/shenweiyan/software/graphviz-2.40.1/lib:&lt;span class=&#34;nv&#34;&gt;$LD_LIBRARY_PATH&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;C_INCLUDE_PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/home/shenweiyan/software/graphviz-2.40.1/include:&lt;span class=&#34;nv&#34;&gt;$C_INCLUDE_PATH&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;CPLUS_INCLUDE_PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/home/shenweiyan/software/graphviz-2.40.1/include:&lt;span class=&#34;nv&#34;&gt;$CPLUS_INCLUDE_PATH&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;如果 graphviz 添加到环境变量， &lt;code&gt;pygraphviz&lt;/code&gt; 的 python 包可以参考下面的方法安装：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/home/shenweiyan/software/Python-3.7.3/bin/pip3&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--global-option&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;build_ext&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--global-option&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;-I/home/shenweiyan/software/graphviz-2.40.1/include&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--global-option&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;-L/home/shenweiyan/software/graphviz-2.40.1/lib&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pygraphviz
/home/shenweiyan/software/Python-3.7.3/lib/python3.7/site-packages/pip/_internal/commands/install.py:207:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;UserWarning:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Disabling&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;all&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;use&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;wheels&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;due&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;use&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--build-options&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--global-options&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--install-options.
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;cmdoptions.check_install_build_global&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;options&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
Collecting&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pygraphviz
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Using&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;cached&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://files.pythonhosted.org/packages/7e/b1/d6d849ddaf6f11036f9980d433f383d4c13d1ebcfc3cd09bc845bda7e433/pygraphviz-1.5.zip
Installing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;collected&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;packages:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pygraphviz
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Running&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;setup.py&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pygraphviz&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;
Successfully&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;installed&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pygraphviz-1.5
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;编译安装&#34;&gt;编译安装&lt;a class=&#34;headerlink&#34; href=&#34;#编译安装&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;这里的编译安装，以 Python-3.11.6 为示例。&lt;/p&gt;
&lt;p&gt;第一，下载 Python 源码，解压。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 官网下载地址 https://www.python.org/downloads&lt;/span&gt;
wget&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://www.python.org/ftp/python/3.11.6/Python-3.11.6.tgz

&lt;span class=&#34;c1&#34;&gt;# 解压到指定目录&lt;/span&gt;
tar&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;zvxf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Python-3.11.6.tgz&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-C&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/local/src
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;第二，进入解压的源码路径，编译 Python 源码。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;PKG_CONFIG_PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/home/shenweiyan/software/libffi-3.2.1/lib/pkgconfig:&lt;span class=&#34;nv&#34;&gt;$PKG_CONFIG_PATH&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;PKG_CONFIG_PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/home/shenweiyan/software/graphviz-2.40.1/lib/pkgconfig:&lt;span class=&#34;nv&#34;&gt;$PKG_CONFIG_PATH&lt;/span&gt;

$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;LD_LIBRARY_PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/home/shenweiyan/software/libffi-3.2.1/lib64:&lt;span class=&#34;nv&#34;&gt;$LD_LIBRARY_PATH&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;LD_LIBRARY_PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/home/shenweiyan/software/graphviz-2.40.1/lib:&lt;span class=&#34;nv&#34;&gt;$LD_LIBRARY_PATH&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;LD_LIBRARY_PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/home/shenweiyan/software/openssl-1.1.1/lib:&lt;span class=&#34;nv&#34;&gt;$LD_LIBRARY_PATH&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;LD_LIBRARY_PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/home/shenweiyan/software/sqlite-3.36.0/lib:&lt;span class=&#34;nv&#34;&gt;$LD_LIBRARY_PATH&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;LD_LIBRARY_PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/home/shenweiyan/software/gdbm-1.23/lib:&lt;span class=&#34;nv&#34;&gt;$LD_LIBRARY_PATH&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;LD_LIBRARY_PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/home/shenweiyan/software/ActiveTcl-8.6.9/lib:&lt;span class=&#34;nv&#34;&gt;$LD_LIBRARY_PATH&lt;/span&gt;

$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;TCLTK_LIBS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;-L/home/shenweiyan/software/ActiveTcl-8.6.9/lib -ltcl8.6 -ltk8.6&amp;quot;&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;TCLTK_CFLAGS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;-I/home/shenweiyan/software/ActiveTcl-8.6.9/include&amp;quot;&lt;/span&gt;

$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;./configure&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&lt;/span&gt;
--enable-optimizations&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&lt;/span&gt;
--prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/home/shenweiyan/software/Python-3.11.6&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&lt;/span&gt;
--with-openssl&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/home/shenweiyan/software/openssl-1.1.1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&lt;/span&gt;
--with-openssl-rpath&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/home/shenweiyan/software/openssl-1.1.1/lib&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;CC&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/home/shenweiyan/software/gcc-7.3.0/bin/gcc&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;CXX&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/home/shenweiyan/software/gcc-7.3.0/bin/c++&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;LDFLAGS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;-L/home/shenweiyan/software/libffi-3.2.1/lib64 \&lt;/span&gt;
&lt;span class=&#34;s2&#34;&gt;         -L/home/shenweiyan/software/graphviz-2.40.1/lib \&lt;/span&gt;
&lt;span class=&#34;s2&#34;&gt;         -L/RiboBio/home/shenweiyan/software/sqlite-3.36.0/lib \&lt;/span&gt;
&lt;span class=&#34;s2&#34;&gt;         -L/home/shenweiyan/software/gdbm-1.23/lib&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;CPPFLAGS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;-I/home/shenweiyan/software/graphviz-2.40.1/include \&lt;/span&gt;
&lt;span class=&#34;s2&#34;&gt;          -I/home/shenweiyan/software/sqlite-3.36.0/include \&lt;/span&gt;
&lt;span class=&#34;s2&#34;&gt;          -I/home/shenweiyan/software/gdbm-1.23/include&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;PKG_CONFIG_PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;/home/shenweiyan/software/libffi-3.2.1/lib/pkgconfig: \&lt;/span&gt;
&lt;span class=&#34;s2&#34;&gt;                 /home/shenweiyan/software/graphviz-2.40.1/lib/pkgconfig&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;--enable-optimizations&lt;/code&gt;  是优化选项（LTO，PGO  等）加上这个  flag  编译后，性能有  10%  左右的优化，但是这会明显的增加编译时间。建议使用这个参数；&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--prefix&lt;/code&gt;  声明安装路径；&lt;/li&gt;
&lt;li&gt;安装多个 python 的版本，如果不开启&lt;code&gt;--enable-shared&lt;/code&gt;，指定不同路径即可。当开启&lt;code&gt;--enable-shared&lt;/code&gt; 时，默认只有一个版本的 python。&lt;/li&gt;
&lt;li&gt;Python 3 编译可以在 configure 或者环境变量中指定 OpenSSL 安装路径进行编译的方式解决 OpenSSL 依赖，否则 &lt;code&gt;make&lt;/code&gt;  过程可能出错。&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make
......
The&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;following&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;modules&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;found&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;by&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;detect_modules&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;setup.py,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;have&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;been
built&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;by&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Makefile&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;instead,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;as&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;configured&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;by&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Setup&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;files:
_abc&lt;span class=&#34;w&#34;&gt;                  &lt;/span&gt;atexit&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;pwd&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;time&lt;/span&gt;


Failed&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;build&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;these&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;modules:
_ctypes&lt;span class=&#34;w&#34;&gt;               &lt;/span&gt;_hashlib&lt;span class=&#34;w&#34;&gt;              &lt;/span&gt;_ssl


Could&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;build&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ssl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;module!
Python&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;requires&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;an&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;OpenSSL&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.0.2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;or&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;compatible&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;libssl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;X509_VERIFY_PARAM_set1_host&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt;.
LibreSSL&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;.6.4&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;and&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;earlier&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;do&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;provide&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;necessary&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;APIs,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://github.com/libressl-portable/portable/issues/381

......
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;make&lt;/code&gt; 过程如果出现 &lt;code&gt;ModuleNotFoundError: No module named &#39;_ctypes&#39;&lt;/code&gt; 或者 &lt;code&gt;INFO: Could not locate ffi libs and/or headers&lt;/code&gt; 参考：&lt;a href=&#34;https://groups.google.com/forum/#!topic/comp.lang.python/npv-wzmytzo&#34;&gt;https://groups.google.com/forum/#!topic/comp.lang.python/npv-wzmytzo&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FmK7bCeEeGjfbl1UVdvHyw3Jg8Zj.png&#34; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;对于低版本的 Python 如果指定 &lt;code&gt;--with-openssl=DIR&lt;/code&gt; 依然无法解决 ssl 模块的问题，可以参考修改 Modules/Setup.dist 文件（默认这块是注释的，放开注释即可。这块功能是开启 SSL 模块，不然会出现安装完毕后，提示找不到 ssl 模块的错误）再执行 configure，修改内容如下：&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# Socket module helper for SSL support; you must comment out the other&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# socket line above, and possibly edit the SSL variable:&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;SSL&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/ssl
_ssl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;_ssl.c&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;-DUSE_SSL&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-I&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;SSL&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;/include&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-I&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;SSL&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;/include/openssl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;-L&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;SSL&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;/lib&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-lssl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-lcrypto
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;第三，Makefile 生后依次在当前路径执行编译和安装命令。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;make&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;第四，安装完成。以上命令执行完毕，且无报错的情况下，我们将默认 python 换将切换至 3.11.6（一般不建议替换，个人建议把自定义安装的 Python bin 路径添加到 PATH 环境变量即可）：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 替换系统自带的 python（不建议）&lt;/span&gt;
mv&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/bin/python&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/bin/python2
ln&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-s&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/home/shenweiyan/software/Python-3.11.6/bin/python3&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/bin/python3

&lt;span class=&#34;c1&#34;&gt;# 添加新 Python 到 PATH 环境变量（建议）&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;export PATH=/home/shenweiyan/software/Python-3.11.6/bin:&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PATH&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;gt;&amp;gt;~/.bashrc
&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~/.bashrc
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;运行命令 &lt;code&gt;python -V&lt;/code&gt; ，查看是否出现 3.11.6  的版本，出现即为安装成功。&lt;/p&gt;
&lt;h2 id=&#34;其他工具&#34;&gt;其他工具&lt;a class=&#34;headerlink&#34; href=&#34;#其他工具&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Python &amp;gt;= 3.10 在安装时候，默认会同时安装 &lt;strong&gt;pip3&lt;/strong&gt;！如果你的 python &amp;lt; 3.10，可以参考下面的方法安装 pip。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 下载 setuptools 和 pip 安装程序&lt;/span&gt;
curl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://bootstrap.pypa.io/get-pip.py&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-o&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;get-pip.py
python3&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;get-pip.py
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;至此，CentOS Linux release 6.5 下的 python-3.11.6  全部安装完成。如果在安装过程中出现其他的报错，建议把 error 关键信息直接复制到 Google 进行检索，参考其他人的解决方法。&lt;/p&gt;
&lt;h2 id=&#34;其他异常与解决&#34;&gt;其他异常与解决&lt;a class=&#34;headerlink&#34; href=&#34;#其他异常与解决&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&#34;_bz2&#34;&gt;_bz2&lt;a class=&#34;headerlink&#34; href=&#34;#_bz2&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;系统：CentOS Linux release 7.7.1908 (Core)&lt;/li&gt;
&lt;li&gt;GCC：gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;在 CentOS 7 中安装 Python-3.6.9 中发现 make 过程中一直提示：&amp;rdquo;&lt;strong&gt;ModuleNotFoundError: No module named &amp;lsquo;_bz2&amp;rsquo;&lt;/strong&gt;&amp;ldquo;，尽管 &lt;code&gt;sudo yum install bzip2 bzip2-devel&lt;/code&gt;  已经安装了 bzip2 的依赖，问题还是不得其解。最后参考 stackoverflow 上的《Correctly building local python3, with bz2 support》，终于解决问题，下面记录一下。
&lt;a href=&#34;https://stackoverflow.com/questions/51149227/correctly-building-local-python3-with-bz2-support&#34;&gt;Correctly building local python3, with bz2 support&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;手动安装 bzip2：&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;wget&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://nchc.dl.sourceforge.net/project/bzip2/bzip2-1.0.6.tar.gz
tar&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;zvxf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bzip2-1.0.6.tar.gz
&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bzip2-1.0.6
make&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-f&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Makefile_libbz2_so&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 这一步是生成 libbz2.so.1.0.6 的动态库文件&lt;/span&gt;
make
make&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;PREFIX&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/software/bzip2-1.0.6
cp&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;libbz2.so.1.0.6&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/local/software/bzip2-1.0.6/lib/
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;几点说明：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;bzip2 的官网  &lt;a href=&#34;http://www.bzip.org/&#34;&gt;http://www.bzip.org/&lt;/a&gt;  已经把 bzip2 的源码下载链接放到了  SourceForge，网络上一些从  &lt;a href=&#34;http://www.bzip.org/1.0.6/bzip2-1.0.6.tar.gz&#34;&gt;http://www.bzip.org/1.0.6/bzip2-1.0.6.tar.gz&lt;/a&gt;  下载的做法已经失效。&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://sourceforge.net/projects/bzip2/files/&#34;&gt;SourceForge&lt;/a&gt; 上 bzip2 的最新版本还是 1.0.6（Last modified 2018-11-3），更高级版本的 bzip2 我也不知道是否存在，也不知道能不能用。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FvgxGWlVJSxOCvgXFo9BPOa3ODm5.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;编译安装 Python-3.6.9：&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;wget&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://www.python.org/ftp/python/3.6.9/Python-3.6.9.tgz
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tar&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;zvxf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Python-3.6.9.tgz
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Python-3.6.9
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;./configure&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--enable-optimizations&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/software/python-3.6&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;CFLAGS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;-I/usr/local/software/bzip2-1.0.6/include&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;LDFLAGS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;-L/usr/local/software/bzip2-1.0.6/lib&amp;quot;&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Python-3.6.9 中的 &lt;code&gt;./configure --help&lt;/code&gt; 中没有 &lt;code&gt;--with-openssl&lt;/code&gt; 参数！有点神奇，我也不知道原因。&lt;/li&gt;
&lt;li&gt;安装完成可以用 &lt;code&gt;from _bz2 import BZ2Compressor, BZ2Decompressor&lt;/code&gt; 测试一下 &lt;code&gt;_bz2&lt;/code&gt;  是否可用。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;参考资料&#34;&gt;参考资料&lt;a class=&#34;headerlink&#34; href=&#34;#参考资料&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;行者无疆-ITer,《&lt;a href=&#34;https://www.cnblogs.com/ITer-jack/p/8305912.html&#34;&gt;python2.7 源码编译安装&lt;/a&gt;》, 博客园&lt;/li&gt;
&lt;li&gt;Scott Frazer,《&lt;a href=&#34;https://stackoverflow.com/questions/23548188/how-do-i-compile-python-3-4-with-custom-openssl&#34;&gt;How do I compile Python 3.4 with custom OpenSSL?&lt;/a&gt;》, Stack Overflow&lt;/li&gt;
&lt;/ol&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;13&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/tech/discussions-13/</link>
      <pubDate>Thu, 02 Nov 2023 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/tech/discussions-13/</guid>
      
    </item>
    
    <item>
      <title>飞书文档初体验</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;2023 年的 1024 程序员节前一天，语雀服务器崩溃长达 8 个小时的余温还没消，就迫不及待再去体验了一把飞书文档，说几点个人感受。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;&lt;img alt=&#34;20231023-yuque&#34; src=&#34;https://slab-1251708715.cos.ap-guangzhou.myqcloud.com/Gitbook/2023/20231023-yuque.png&#34; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.zhihu.com/question/627418678&#34;&gt;如何看待语雀因网络故障导致用户无法正常访问文档？在线文档的可靠性还值得信任吗？&lt;/a&gt; - 知乎&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.v2ex.com/t/984728&#34;&gt;鉴于昨天的语雀，有啥推荐的笔记软件么&lt;/a&gt; -V2EX&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;首先，飞书文档&lt;a href=&#34;https://www.feishu.cn/&#34;&gt;国内版本&lt;/a&gt;和&lt;a href=&#34;https://www.larksuite.com/&#34;&gt;国际版本&lt;/a&gt;的区别可不是一般的大。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;飞书文档国内版本&#34; src=&#34;https://slab-1251708715.cos.ap-guangzhou.myqcloud.com/Gitbook/2023/feishu-cn-admin.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;飞书文档国际版本&#34; src=&#34;https://slab-1251708715.cos.ap-guangzhou.myqcloud.com/Gitbook/2023/larksuite-admin.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;第二，书写体验相当不错。&lt;/p&gt;
&lt;p&gt;第三，最然支持 Markdown 所见即所得的编辑模式，但没法查看单篇文档的 Markdown，这也是我最不满意的地方。&lt;/p&gt;
&lt;p&gt;第四，API 很强大，文档很丰富，但没找到怎么通过 API 获取 wiki 知识库内容的介绍！&lt;/p&gt;
&lt;p&gt;截止 2023.10.25 了解到飞书目前是没有 wiki 知识库内容的 API 接口，不清楚后面是否会有这方面的支持，且持续关注中。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;飞书文档 wiki 知识库 API&#34; src=&#34;https://slab-1251708715.cos.ap-guangzhou.myqcloud.com/KGarden/2023/feishu-wiki-api.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;事实上，飞书是支持 通过 API 接口获取 wiki 知识库内容的（上面截图中客服的回答并不准确），具体可以参考 &lt;a href=&#34;https://github.com/longbridgeapp/feishu-pages#feishu-pages&#34;&gt;Feishu Pages&lt;/a&gt; 实现 wiki 知识库的内容导出。&lt;/p&gt;
&lt;p&gt;第五，经历语雀宕机事件，不得不考虑多平台备份的问题，对于飞书文档目前没发现比较好的方法。&lt;/p&gt;
&lt;p&gt;经过了这个事件很多人都对在线文档产生了一些动摇，但总体来说在使用性和方便性上在线文档还是很有优势的，但值得注意的是不能把所有的鸡蛋都放到一个篮子 —— 备份很重要！&lt;strong&gt;通用格式&lt;/strong&gt; 和 &lt;strong&gt;数据可控&lt;/strong&gt; 或者可以成为一个评判的基础，那些过于封闭不支持导出(甚至是批量导出)的平台基本可以放弃了。&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;11&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-11/</link>
      <pubDate>Tue, 24 Oct 2023 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-11/</guid>
      
    </item>
    
    <item>
      <title>WebStack-Hugo | 一个静态响应式导航主题</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;blockquote&gt;
&lt;p&gt;Via：&lt;a href=&#34;https://mp.weixin.qq.com/s/gVWGjxG9qd7qSyX3N8Zgag&#34;&gt;我给自己做了一个导航网站&lt;/a&gt; | &lt;a href=&#34;https://github.com/bioitee&#34;&gt;BioIT爱好者&lt;/a&gt;    &lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;📢 让更多人的人制作自己的导航网站。如果你觉得本主题对你有所帮助，欢迎请作者 &lt;a href=&#34;https://gi.weiyan.tech/0000/img/donate.webp&#34;&gt;喝杯咖啡&lt;/a&gt; &amp;gt;.&amp;lt;&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&#34;主题开源地址&#34;&gt;主题开源地址&lt;a class=&#34;headerlink&#34; href=&#34;#主题开源地址&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/shenweiyan/WebStack-Hugo&#34;&gt;&lt;strong&gt;GitHub&lt;/strong&gt;&lt;/a&gt; | &lt;a href=&#34;https://gitee.com/shenweiyan/WebStack-Hugo&#34;&gt;&lt;strong&gt;Gitee&lt;/strong&gt;&lt;/a&gt; | &lt;a href=&#34;https://gitcode.com/shenweiyan/WebStack-Hugo&#34;&gt;&lt;strong&gt;GitCode&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;主题展示地址&#34;&gt;主题展示地址&lt;a class=&#34;headerlink&#34; href=&#34;#主题展示地址&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://np.pagex.top/&#34;&gt;&lt;strong&gt;WebStack-Hugo 网址导航&lt;/strong&gt;&lt;/a&gt; | &lt;a href=&#34;https://hao.bioit.top/&#34;&gt;&lt;strong&gt;生信网址导航&lt;/strong&gt;&lt;/a&gt; &lt;/p&gt;
&lt;!-- more --&gt;

&lt;h2 id=&#34;为什么做这个网站&#34;&gt;为什么做这个网站&lt;a class=&#34;headerlink&#34; href=&#34;#为什么做这个网站&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;之所以想着要给自己倒腾一个导航网站，主要有几个原因：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;购买了一个域名，且也备案成功了，总想折腾点跟它有关的事情；&lt;/li&gt;
&lt;li&gt;经常在公司、家里（有时候还有其他的临时场所）更换电脑，每次同步书签（或者登陆一些导航网站）需要各种登陆，麻烦。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;说干就干，从 &lt;a href=&#34;https://github.com/WebStackPage/WebStackPage.github.io&#34;&gt;WebStack 的开源项目&lt;/a&gt;开始，断断续续的折腾了好几天，终于把轮子造起来了。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://gi.weiyan.tech/2023/11/webstack-hugo-collapse.png&#34; width=800&gt;
&lt;img src=&#34;https://gi.weiyan.tech/2023/11/webstack-hugo-expand.png&#34; width=800&gt;
&lt;img src=&#34;https://gi.weiyan.tech/2023/11/webstack-hugo-search.png&#34; width=800&gt;
&lt;img src=&#34;https://gi.weiyan.tech/2023/11/webstack-hugo-phone.png&#34; alt=&#34;webstack-apple&#34; width=600&gt;&lt;/p&gt;
&lt;h2 id=&#34;跟其他导航网站有什么区别&#34;&gt;跟其他导航网站有什么区别&lt;a class=&#34;headerlink&#34; href=&#34;#跟其他导航网站有什么区别&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;这是 Hugo 版 WebStack 主题。可以借助 Github/Gitee Pages 或者云平台直接托管部署，无需服务器。&lt;/p&gt;
&lt;p&gt;本项目是基于纯静态的网址导航网站 &lt;a href=&#34;https://github.com/WebStackPage/WebStackPage.github.io&#34;&gt;webstack.cc&lt;/a&gt; 制作的 &lt;a href=&#34;https://gohugo.io/&#34;&gt;Hugo&lt;/a&gt; 主题，其中部分代码参考了以下几个开源项目：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/WebStackPage/WebStackPage.github.io&#34;&gt;https://github.com/WebStackPage/WebStackPage.github.io&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/WebStackPage/WebStackPage.github.io&#34;&gt;https://github.com/liutongxu/liutongxu.github.io&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/iplaycode/webstack-hugo&#34;&gt;https://github.com/iplaycode/webstack-hugo&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;总体说一下特点：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;采用了一直以来最喜欢的 hugo 部署方式，方便高效。&lt;/li&gt;
&lt;li&gt;主要的配置信息都集成到了 &lt;strong&gt;config.toml&lt;/strong&gt;，一键完成各种自定义的配置。&lt;/li&gt;
&lt;li&gt;导航的各个信息都集成在 &lt;strong&gt;data/webstack.yml&lt;/strong&gt; 文件中，方便后续增删改动。&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;p p-Indicator&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;taxonomy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l l-Scalar l-Scalar-Plain&#34;&gt;科研办公&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;icon&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l l-Scalar l-Scalar-Plain&#34;&gt;fas fa-flask fa-lg&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;list&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p p-Indicator&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;term&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l l-Scalar l-Scalar-Plain&#34;&gt;生物信息&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;links&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;p p-Indicator&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l l-Scalar l-Scalar-Plain&#34;&gt;NCBI&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;logo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l l-Scalar l-Scalar-Plain&#34;&gt;n/ncbi.jpg&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l l-Scalar l-Scalar-Plain&#34;&gt;https://www.ncbi.nlm.nih.gov/&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;description&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l l-Scalar l-Scalar-Plain&#34;&gt;National Center for Biotechnology Information.&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;p p-Indicator&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l l-Scalar l-Scalar-Plain&#34;&gt;Bioconda&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;logo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l l-Scalar l-Scalar-Plain&#34;&gt;b/bioconda.jpg&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l l-Scalar l-Scalar-Plain&#34;&gt;https://anaconda.org/bioconda/&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;description&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;Bioconda&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;Anaconda.org.&amp;quot;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p p-Indicator&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;term&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l l-Scalar l-Scalar-Plain&#34;&gt;云服务器&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;links&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;p p-Indicator&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l l-Scalar l-Scalar-Plain&#34;&gt;阿里云&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;logo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l l-Scalar l-Scalar-Plain&#34;&gt;a/aliyun.jpg&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l l-Scalar l-Scalar-Plain&#34;&gt;https://www.aliyun.com/&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;description&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l l-Scalar l-Scalar-Plain&#34;&gt;上云就上阿里云。&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;p p-Indicator&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l l-Scalar l-Scalar-Plain&#34;&gt;腾讯云&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;logo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l l-Scalar l-Scalar-Plain&#34;&gt;c/cloud-tencent.jpg&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l l-Scalar l-Scalar-Plain&#34;&gt;https://cloud.tencent.com/&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;description&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l l-Scalar l-Scalar-Plain&#34;&gt;产业智变，云启未来。&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;做了手机电脑自适应以及夜间模式。&lt;/li&gt;
&lt;li&gt;增加了搜索功能，以及下拉的热词选项（基于百度 API）。&lt;/li&gt;
&lt;li&gt;增加了一言、和风天气的 API（和风天气 API 已经官方已经不再支持，目前还没到到替代）。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;windows-下安装部署&#34;&gt;Windows 下安装部署&lt;a class=&#34;headerlink&#34; href=&#34;#windows-下安装部署&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;本安装部署在 Windows 7 x64 上测试没问题，相关操作同样适用于 Windows 10，如有任何问题，欢迎留言或者微信与我联系。&lt;/p&gt;
&lt;h3 id=&#34;第一下载-hugo&#34;&gt;第一，下载 hugo&lt;a class=&#34;headerlink&#34; href=&#34;#第一下载-hugo&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;下载链接：&lt;a href=&#34;https://github.com/gohugoio/hugo/releases&#34;&gt;https://github.com/gohugoio/hugo/releases&lt;/a&gt;，在这里我们下载 &lt;a href=&#34;https://github.com/gohugoio/hugo/releases/download/v0.89.4/hugo_0.89.4_Windows-64bit.zip&#34;&gt;hugo_0.89.4_Windows-64bit.zip&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;download-hugo-windows&#34; src=&#34;https://gi.weiyan.tech/2023/11/download-hugo-windows.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;第二解压&#34;&gt;第二，解压&lt;a class=&#34;headerlink&#34; href=&#34;#第二解压&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;我们把 &lt;a href=&#34;https://github.com/gohugoio/hugo/releases/download/v0.89.4/hugo_0.89.4_Windows-64bit.zip&#34;&gt;hugo_0.89.4_Windows-64bit.zip&lt;/a&gt; 下载到 &lt;strong&gt;F:\WebStack&lt;/strong&gt; 目录下，然后解压到当前文件夹。&lt;/p&gt;
&lt;p&gt;解压完成后，在该目录会多出 &lt;code&gt;hugo.exe&lt;/code&gt;、&lt;code&gt;LICENSE&lt;/code&gt;、&lt;code&gt;README.md&lt;/code&gt; 三个文件：&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;unzip hugo_0.89.4_Windows-64bit&#34; src=&#34;https://gi.weiyan.tech/2023/11/unzip-hugo-0.89.4-windows-64bit.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;第三检测是否安装成功&#34;&gt;第三，检测是否安装成功&lt;a class=&#34;headerlink&#34; href=&#34;#第三检测是否安装成功&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;通过下面的方法，检测 &lt;code&gt;hugo&lt;/code&gt; 是否安装成功。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;🏷️ 温馨提示：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Windows 命令运行窗口中可以使用 Tab 进行命令行补全，例如你当前目录下有一个 WebStack-Hugo 目录，你在命令行窗口中输入一个 w 后按下 Tab 键，命令行就会自动出现 WebStack-Hugo！&lt;/p&gt;
&lt;p&gt;使用命令行补全，可以减少代码（或者文件名）的输入，方便快捷，又能减少错误！&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ol&gt;
&lt;li&gt;在 Windows 中使用 &lt;strong&gt;Win+R&lt;/strong&gt; 打开“&lt;strong&gt;运行&lt;/strong&gt;”对话框，在对话框中输入“&lt;strong&gt;cmd&lt;/strong&gt;”，点击确认。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img alt=&#34;win-r-cmd&#34; src=&#34;https://gi.weiyan.tech/2023/11/win-r-cmd.png&#34; /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;在 Windows 运行窗口，先切换盘符到 &lt;strong&gt;F&lt;/strong&gt; 盘，然后进入 &lt;code&gt;hugo&lt;/code&gt; 的解压缩目录（&lt;strong&gt;F:\WebStack&lt;/strong&gt;），具体操作如下。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在光标处输入 &lt;strong&gt;F:&lt;/strong&gt;，然后按回车；&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;cmd-change-dir&#34; src=&#34;https://gi.weiyan.tech/2023/11/cmd-change-dir.png&#34; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;我们就将盘符切换为 &lt;strong&gt;F&lt;/strong&gt; 盘；&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;cmd-f-dir&#34; src=&#34;https://gi.weiyan.tech/2023/11/cmd-f-dir.png&#34; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;接着输入 &lt;strong&gt;cd WebStack&lt;/strong&gt;，回车，就进入了 &lt;strong&gt;F:\WebStack&lt;/strong&gt; 目录；使用 &lt;strong&gt;ls&lt;/strong&gt; 可以看到当前目录下的文件。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;webstack-win-ls&#34; src=&#34;https://gi.weiyan.tech/2023/11/webstack-win-ls.png&#34; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;最后，输入 &lt;strong&gt;hugo.exe version&lt;/strong&gt;，回车，如图所示，则代表安装成功。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;hugo-exe-version&#34; src=&#34;https://gi.weiyan.tech/2023/11/hugo-exe-version.png&#34; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;第四下载-webstack-hugo&#34;&gt;第四，下载 WebStack-Hugo&lt;a class=&#34;headerlink&#34; href=&#34;#第四下载-webstack-hugo&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;浏览器打开 &lt;a href=&#34;https://github.com/shenweiyan/WebStack-Hugo&#34;&gt;https://github.com/shenweiyan/WebStack-Hugo&lt;/a&gt;，点击 Code 下的 &lt;strong&gt;&amp;ldquo;Download ZIP&amp;rdquo;&lt;/strong&gt;，把 &lt;strong&gt;WebStack-hugo-main.zip&lt;/strong&gt; 下载到刚才 hugo 解压缩的目录（&lt;strong&gt;F:\WebStack&lt;/strong&gt;）。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;webstack-download-zip&#34; src=&#34;https://gi.weiyan.tech/2023/11/webstack-download-zip.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;webstack-hugo-main-zip&#34; src=&#34;https://gi.weiyan.tech/2023/11/webstack-hugo-main-zip.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;第五解压和重命名&#34;&gt;第五，解压和重命名&lt;a class=&#34;headerlink&#34; href=&#34;#第五解压和重命名&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;把 &lt;strong&gt;WebStack-Hugo-main.zip&lt;/strong&gt; 解压到当前目录。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;webstack-hugo-main-unzip&#34; src=&#34;https://gi.weiyan.tech/2023/11/webstack-hugo-main-unzip.png&#34; /&gt;
&lt;img alt=&#34;webstack-hugo-main-rename&#34; src=&#34;https://gi.weiyan.tech/2023/11/webstack-hugo-main-rename.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;第六安装主题&#34;&gt;第六，安装主题&lt;a class=&#34;headerlink&#34; href=&#34;#第六安装主题&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;首先，进入 &lt;strong&gt;F:\WebStack&lt;/strong&gt; 目录；&lt;/p&gt;
&lt;p&gt;然后，创建一个 &lt;strong&gt;themes&lt;/strong&gt; 的文件夹；&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;create-themes-dir&#34; src=&#34;https://gi.weiyan.tech/2023/11/create-themes-dir.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;接着，把解压后的 &lt;strong&gt;WebStack-Hugo&lt;/strong&gt; 整个文件夹移动到 &lt;strong&gt;themes&lt;/strong&gt; 中。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;mv-webstack-hugo-to-themes&#34; src=&#34;https://gi.weiyan.tech/2023/11/mv-webstack-hugo-to-themes.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;第四，将 &lt;code&gt;themes/WebStack-Hugo/exampleSite&lt;/code&gt; 目录下的所有文件复制到 hugo 站点根目录（即 &lt;code&gt;F:\WebStack&lt;/code&gt;）。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;cp-examplesite&#34; src=&#34;https://gi.weiyan.tech/2023/11/cp-examplesite.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;第七启动预览&#34;&gt;第七，启动预览&lt;a class=&#34;headerlink&#34; href=&#34;#第七启动预览&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;在刚才已经打开的 Windows 命令运行窗口中，使用下面的命令执行 &lt;strong&gt;hugo server&lt;/strong&gt;，启动站点——Hugo 可以启动一个 Web 服务器，同时构建站点内容到内存中并在检测到文件更改后重新渲染，方便我们在开发环境实时预览对站点所做的更改。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;hugo.exe&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;server
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;hugo-exe-server&#34; src=&#34;https://gi.weiyan.tech/2023/11/hugo-exe-server.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;最后，在浏览器中打开 &lt;a href=&#34;http://127.0.0.1:1313/&#34;&gt;&lt;strong&gt;http://127.0.0.1:1313/&lt;/strong&gt;&lt;/a&gt;，即可看到生成的站点。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;webstack-hugo-1313&#34; src=&#34;https://gi.weiyan.tech/2023/11/webstack-hugo-1313.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;linux-下安装部署&#34;&gt;Linux 下安装部署&lt;a class=&#34;headerlink&#34; href=&#34;#linux-下安装部署&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;安装完本 WebStack-Hugo 主题后，将 exampleSite 目录下的文件复制到 hugo 站点根目录，根据需要把 config.toml 的一些信息改成自己的，导航的网址信息可通过 data 目录下 webstack.yml 修改。&lt;/p&gt;
&lt;p&gt;具体执行步骤如下：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;mkdir&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/home/shenweiyan/mysite
&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/home/shenweiyan/mysite

&lt;span class=&#34;c1&#34;&gt;# 安装 WebStack-Hugo 主题&lt;/span&gt;
git&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;clone&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://github.com/shenweiyan/WebStack-Hugo.git&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;themes/WebStack-Hugo

&lt;span class=&#34;c1&#34;&gt;# 将 exampleSite 目录下的文件复制到 hugo 站点根目录&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/home/shenweiyan/mysite
cp&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-r&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;themes/WebStack-Hugo/exampleSite/*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;./

&lt;span class=&#34;c1&#34;&gt;# 启动 hugo 站点&lt;/span&gt;
hugo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;server
&lt;span class=&#34;c1&#34;&gt;# 如果你知道你的公网 ip, 如下面的 132.76.230.31, 可以使用下面的方式执行 hugo server&lt;/span&gt;
hugo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;server&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--baseUrl&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;132&lt;/span&gt;.76.230.31&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--bind&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;.0.0.0
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;也可以参考 &lt;a href=&#34;https://github.com/jetsung&#34;&gt;@jetsung&lt;/a&gt; 在 &lt;a href=&#34;https://github.com/shenweiyan/WebStack-Hugo/pull/15&#34;&gt;pull 15&lt;/a&gt; 所用的方法安装部署：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 创建项目&lt;/span&gt;
mkdir&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;navsites
&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$_&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# 初始化项目&lt;/span&gt;
git&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;init

&lt;span class=&#34;c1&#34;&gt;# 将 WebStack-Hugo 源下载到 themes/WebStack-Hugo 文件夹&lt;/span&gt;
git&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;submodule&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;add&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://github.com/shenweiyan/WebStack-Hugo.git&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;themes/WebStack-Hugo
cp&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-r&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;themes/WebStack-Hugo/exampleSite/*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;./

&lt;span class=&#34;c1&#34;&gt;# 安装 hugo&lt;/span&gt;
go&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;github.com/gohugoio/hugo@latest

&lt;span class=&#34;c1&#34;&gt;# 本地测试&lt;/span&gt;
hugo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;server

&lt;span class=&#34;c1&#34;&gt;# 生成 docs 文件夹，将并静态内容生成至此处&lt;/span&gt;
hugo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-D
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;导出-html-静态资源&#34;&gt;导出 HTML 静态资源&lt;a class=&#34;headerlink&#34; href=&#34;#导出-html-静态资源&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Windows/Linux 下执行的 &lt;strong&gt;hugo server&lt;/strong&gt; 命令将会通过热加载的方式临时启动一个 Hugo 服务器（Hugo 可以启动一个 Web 服务器，同时构建站点内容到内存中并在检测到文件更改后重新渲染，方便我们在开发环境实时预览对站点所做的更改），这个时候我们打开浏览器 &lt;a href=&#34;http://127.0.0.1:1313/&#34;&gt;http://127.0.0.1:1313/&lt;/a&gt;，就可以看到我们站点的样子了。&lt;/p&gt;
&lt;p&gt;如果我们想要把我们的站点部署到 GitHub/Gitee Pages（或者本地的服务器），我们可以：&lt;/p&gt;
&lt;h3 id=&#34;1-生成静态页面内容&#34;&gt;1. 生成静态页面内容&lt;a class=&#34;headerlink&#34; href=&#34;#1-生成静态页面内容&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;可以通过下面的命令，生成(构建)静态页面内容。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;hugo&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;或者&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hugo&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;minify&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;这个命令会默认在 &lt;strong&gt;&lt;code&gt;public/&lt;/code&gt;&lt;/strong&gt; 目录中生成您的网站，当然您可以通过改变站点配置中的 &lt;strong&gt;&lt;code&gt;publishDir&lt;/code&gt;&lt;/strong&gt; 选项来配置这个输出目录。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;🏷️ Hugo 小知识 - 草案、未来和过期内容&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Hugo 允许您在网站内容的前言设定中设置文档的&lt;code&gt;draft&lt;/code&gt;，&lt;code&gt;publishdate&lt;/code&gt;甚至&lt;code&gt;expirydate&lt;/code&gt;字段。默认情况下，Hugo 不会发布下面内容：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;publishdate&lt;/code&gt; 发布日期值设定在未来的内容；&lt;/li&gt;
&lt;li&gt;&lt;code&gt;draft:true&lt;/code&gt; 草案状态设置为真的内容；&lt;/li&gt;
&lt;li&gt;&lt;code&gt;expirydate&lt;/code&gt; 过期日期值设置为过去某事件的内容。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;这三个可以在本地开发和部署编译时通过对&lt;code&gt;hugo&lt;/code&gt;和&lt;code&gt;hugo server&lt;/code&gt;分别添加如下参数来重新设定，或者在配置文件中设定对应(不包含&lt;code&gt;--&lt;/code&gt;)域的 boolean 值：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;-F, &amp;ndash;buildFuture include content with publishdate in the future&lt;/li&gt;
&lt;li&gt;-D, &amp;ndash;buildDrafts include content marked as draft&lt;/li&gt;
&lt;li&gt;-E, &amp;ndash;buildExpired include expired content&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;2-部署站点&#34;&gt;2. 部署站点&lt;a class=&#34;headerlink&#34; href=&#34;#2-部署站点&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;把生成的 &lt;code&gt;public/&lt;/code&gt; 静态内容目录上传到 GitHub，开启 GitHub/Gitee Pages，并且绑定 cname 域名即可。&lt;/p&gt;
&lt;h2 id=&#34;使用说明与技巧&#34;&gt;使用说明与技巧&lt;a class=&#34;headerlink&#34; href=&#34;#使用说明与技巧&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;这是一个开源的公益项目，你可以拿来制作自己的网址导航，也可以做与导航无关的网站。&lt;/p&gt;
&lt;h3 id=&#34;左导航栏图标&#34;&gt;左导航栏图标&lt;a class=&#34;headerlink&#34; href=&#34;#左导航栏图标&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;左侧、顶部导航栏图标用的都是 &lt;strong&gt;Font Awesome&lt;/strong&gt; 图标库 &lt;strong&gt;v5&lt;/strong&gt; 版本 &lt;strong&gt;Free&lt;/strong&gt; 的图标。链接如下：&lt;/p&gt;
&lt;p&gt;🔗 &lt;a href=&#34;https://fontawesome.com/v5/search?o=r&amp;amp;m=free&#34;&gt;https://fontawesome.com/v5/search?o=r&amp;amp;m=free&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;fontawesome-v5-free&#34; src=&#34;https://gi.weiyan.tech/2023/11/fontawesome-v5-free.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;调整头部搜索栏&#34;&gt;调整头部搜索栏&lt;a class=&#34;headerlink&#34; href=&#34;#调整头部搜索栏&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;头部搜索栏的默认位置可以通过下面的方法进行修改。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;直接修改 &lt;strong&gt;layouts/partials/content_search.html&lt;/strong&gt;，调整对应部分的位置。&lt;/li&gt;
&lt;li&gt;调整默认的搜索（即点击&amp;rdquo;常用/搜索/工具 ....&amp;rdquo; 时下指箭头的指向），把对应的 id 添加到对应的 label 里面。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img alt=&#34;set-default-search-bing&#34; src=&#34;https://gi.weiyan.tech/2023/11/set-default-search-bing.png&#34; /&gt;
&lt;img alt=&#34;view-default-search-bing&#34; src=&#34;https://gi.weiyan.tech/2023/11/view-default-search-bing.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;自定义头部导航&#34;&gt;自定义头部导航&lt;a class=&#34;headerlink&#34; href=&#34;#自定义头部导航&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/shenweiyan/WebStack-Hugo&#34;&gt;WebStack-Hugo&lt;/a&gt; 把头部的导航菜单的各个信息集成在了 &lt;strong&gt;data/header.yml&lt;/strong&gt; 文件中，每个人可以根据自己的需要调整。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;p p-Indicator&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;item&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l l-Scalar l-Scalar-Plain&#34;&gt;首页&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;icon&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l l-Scalar l-Scalar-Plain&#34;&gt;fa fa-home&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;link&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;./&amp;quot;&lt;/span&gt;

&lt;span class=&#34;p p-Indicator&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;item&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l l-Scalar l-Scalar-Plain&#34;&gt;作者&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;icon&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l l-Scalar l-Scalar-Plain&#34;&gt;fa fa-book&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;link&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l l-Scalar l-Scalar-Plain&#34;&gt;https://www.yuque.com/shenweiyan&lt;/span&gt;

&lt;span class=&#34;p p-Indicator&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;item&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l l-Scalar l-Scalar-Plain&#34;&gt;配置&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;icon&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l l-Scalar l-Scalar-Plain&#34;&gt;fa fa-cog&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;link&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;&amp;quot;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;list&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p p-Indicator&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l l-Scalar l-Scalar-Plain&#34;&gt;源码&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;#&amp;quot;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p p-Indicator&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l l-Scalar l-Scalar-Plain&#34;&gt;图标&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;#&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;获取网站图标&#34;&gt;获取网站图标&lt;a class=&#34;headerlink&#34; href=&#34;#获取网站图标&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://nav.bioitee.com/&#34;&gt;Bio &amp;amp; IT 网址导航&lt;/a&gt;默认使用的是个人收集的网站图标，主要是查看网站源码、百度、谷歌等途径把对应导航的图标下载下来，这个方法比较原始繁琐，适合导航不是很多的情况。&lt;/p&gt;
&lt;h4 id=&#34;一为&#34;&gt;一为&lt;a class=&#34;headerlink&#34; href=&#34;#一为&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;你也可以使用一为提供的的 &lt;a href=&#34;https://www.iowen.cn/tag/favicon/&#34;&gt;Favicon&lt;/a&gt; 图标 &lt;a href=&#34;https://www.iowen.cn/tag/api/&#34;&gt;API&lt;/a&gt;：&lt;a href=&#34;https://api.iowen.cn/doc/favicon.html&#34;&gt;获取网站 Favicon - 免费 API 数据接口调用服务平台&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;使用方法：&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;获取 Favicon 图标
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;https://api.iowen.cn/favicon/www.iowen.cn.png
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;刷新缓存
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;https://api.iowen.cn/favicon/www.iowen.cn.png?refresh=true
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;将上方代码中的 &lt;code&gt;www.iowen.cn&lt;/code&gt; 替换为你需要获取的网址域名。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&#34;faviconim&#34;&gt;Favicon.im&lt;a class=&#34;headerlink&#34; href=&#34;#faviconim&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;除了一为的 API，你也可以使用 &lt;a href=&#34;https://favicon.im/&#34;&gt;https://favicon.im/&lt;/a&gt; 来在网页中插入其他网站的 Favicon 图片，可以放大显示。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;favicon-im&#34; src=&#34;https://gi.weiyan.tech/2024/08/favicon-im.webp&#34; /&gt;&lt;/p&gt;
&lt;h4 id=&#34;favicon-extractor&#34;&gt;Favicon Extractor&lt;a class=&#34;headerlink&#34; href=&#34;#favicon-extractor&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;类似网站 &lt;a href=&#34;https://www.faviconextractor.com/&#34;&gt;Favicon Downloader&lt;/a&gt;，代码&lt;a href=&#34;https://github.com/seadfeng/favicon-downloader&#34;&gt;开源&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;favicon-extractor&#34; src=&#34;https://gi.weiyan.tech/2024/08/favicon-extractor.webp&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;已知问题&#34;&gt;已知问题&lt;a class=&#34;headerlink&#34; href=&#34;#已知问题&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;日间模式与夜间模式切换时候，头部搜索栏的背景图片切换不够流畅（个人的 js 知识有限，在 footer.html 做了一些简单的调整来实现），如果你有更好的想法，欢迎 PR 或者交流。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;感谢墙&#34;&gt;感谢墙&lt;a class=&#34;headerlink&#34; href=&#34;#感谢墙&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;本主题的部分代码参考了以下几个开源项目，特此感谢。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/WebStackPage/WebStackPage.github.io&#34;&gt;WebStackPage/WebStackPage.github.io&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/liutongxu/liutongxu.github.io&#34;&gt;liutongxu/liutongxu.github.io&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/iplaycode/webstack-hugo&#34;&gt;iplaycode/webstack-hugo&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;感谢 &lt;a href=&#34;https://github.com/WebStackPage/WebStackPage.github.io&#34;&gt;WebStack&lt;/a&gt; 的作者 &lt;a href=&#34;https://twitter.com/decohack&#34;&gt;Viggo&lt;/a&gt; 的肯定和&lt;a href=&#34;https://twitter.com/decohack/status/1569188705478516738&#34;&gt;推广宣传&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;twitter-decohack-webstack-hugo&#34; src=&#34;https://gi.weiyan.tech/2023/11/twitter-decohack-webstack-hugo.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;感谢以下所有朋友对本主题所做出的贡献。     &lt;br /&gt;
&lt;strong&gt;&lt;a href=&#34;https://github.com/yinhanghang&#34;&gt;@yanbeiyinhanghang&lt;/a&gt;&lt;/strong&gt;    &lt;br /&gt;
&lt;strong&gt;&lt;a href=&#34;https://github.com/jetsung&#34;&gt;@jetsung&lt;/a&gt;&lt;/strong&gt;       &lt;/p&gt;
&lt;h2 id=&#34;赞赏&#34;&gt;赞赏&lt;a class=&#34;headerlink&#34; href=&#34;#赞赏&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;如果你觉得本项目对你有所帮助，欢迎请作者喝杯热咖啡 &amp;gt;.&amp;lt;     &lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;donate-wecaht-aliapy&#34; src=&#34;https://gi.weiyan.tech/0000/img/donate.webp&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;反馈与交流&#34;&gt;反馈与交流&lt;a class=&#34;headerlink&#34; href=&#34;#反馈与交流&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;最后，最重要的，秉承 WebStack 的宗旨，这是一个开源的公益项目，你可以拿来制作自己的网址导航，也可以做与导航无关的网站。&lt;/p&gt;
&lt;p&gt;WebStack 有非常多的魔改版本，这是其中一个。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;如果你对本主题进行了一些个性化调整，欢迎在本项目中 &lt;/strong&gt;&lt;a href=&#34;https://github.com/shenweiyan/WebStack-Hugo/issues&#34;&gt;&lt;strong&gt;issues&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; 中一起分享交流！&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;如果参考本主题构建了属于你自己的网址导航，欢迎在本评论区（或源码 &lt;/strong&gt;&lt;a href=&#34;https://github.com/shenweiyan/WebStack-Hugo/issues&#34;&gt;&lt;strong&gt;issues&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; 区）留下你网站的访问链接 &amp;gt;.&amp;lt;&lt;/strong&gt;&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;10&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/tech/discussions-10/</link>
      <pubDate>Mon, 23 Oct 2023 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/tech/discussions-10/</guid>
      
    </item>
    
    <item>
      <title>个人域名跳转至语雀个人主页</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;语雀的个人使用目前是不支持自定义域名的，虽然空间的使用可以自定义二级域名，如：&lt;a href=&#34;https://weiyan.yuque.com/&#34;&gt;weiyan.yuque.com&lt;/a&gt;，但是空间知识库必须要先登录，不方便其他人查看，尤其是对于没有注册语雀的用户。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;现在的情况是，我有一个已经备案的个人域名 &lt;code&gt;www.example.com&lt;/code&gt;，现在我想：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;让所有 &lt;code&gt;www.example.com&lt;/code&gt; 的访问地址都跳转到 &lt;a href=&#34;https://www.yuque.com/shenweiyan&#34;&gt;https://www.yuque.com/shenweiyan&lt;/a&gt;，比如 &lt;code&gt;https://www.example.com/cookbook&lt;/code&gt; 跳转到 &lt;a href=&#34;https://www.yuque.com/shenweiyan/cookbook&#34;&gt;https://www.yuque.com/shenweiyan/cookbook&lt;/a&gt;。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;www.example.com&lt;/code&gt; 的访问地址跳转同时支持 http/https。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;example.com/www.example.com&lt;/code&gt; 同时实现以上跳转。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;反正就一句话，让下面的链接都跳转到 &lt;a href=&#34;https://www.yuque.com/shenweiyan&#34;&gt;https://www.yuque.com/shenweiyan&lt;/a&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://example.com&#34;&gt;http://example.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.example.com&#34;&gt;http://www.example.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://example.com&#34;&gt;https://example.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.example.com&#34;&gt;https://www.example.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;下面简单记录一下具体的实现过程。&lt;/p&gt;
&lt;h2 id=&#34;背景知识&#34;&gt;背景知识&lt;a class=&#34;headerlink&#34; href=&#34;#背景知识&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;显性 URL 转发：&lt;/strong&gt; 用的是 301 重定向技术，效果为浏览器地址栏输入 &lt;a href=&#34;http://a.com/&#34;&gt;http://a.com&lt;/a&gt; 回车，打开网站内容是目标地址 &lt;a href=&#34;http://cloud.baidu.com/&#34;&gt;http://cloud.baidu.com/&lt;/a&gt; 的网站内容，且地址栏显示目标地址 &lt;a href=&#34;http://cloud.baidu.com/&#34;&gt;http://cloud.baidu.com/&lt;/a&gt; 。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;隐性 URL 转发：&lt;/strong&gt; 用的是 iframe 框架技术、非重定向技术，效果为浏览器地址栏输入 &lt;a href=&#34;http://a.com/&#34;&gt;http://a.com&lt;/a&gt; 回车，打开网站内容是目标地址 &lt;a href=&#34;http://cloud.baidu.com/&#34;&gt;http://cloud.baidu.com/&lt;/a&gt; 的网站内容，但地址栏显示当前地址 &lt;a href=&#34;http://a.com/&#34;&gt;http://a.com&lt;/a&gt; 。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;301 重定向是什么？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;301 重定向表示网页由一个地址永久地移动到了另外一个地址。这里中的 301 是被重定向网页的 HTTP 状态代码。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;例如：&lt;/strong&gt; &lt;a href=&#34;https://blog.ahrefs.com/&#34;&gt;blog.ahrefs.com&lt;/a&gt; 重定向到了 &lt;a href=&#34;https://ahrefs.com/blog&#34;&gt;ahrefs.com/blog&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;简单来说，301 重定向是在告诉浏览器：“这个页面已经永久迁移了。这个是新的地址，我们不打算把它移回去啦。”这时，浏览器会回复：“没问题！我现在（开始）就把用户引向这里！”&lt;/p&gt;
&lt;p&gt;这就是为什么访问 blog.ahrefs.com 已经不可能了。你最后会去到的网页是 ahrefs.com/blog。&lt;/p&gt;
&lt;h2 id=&#34;前提条件&#34;&gt;前提条件&lt;a class=&#34;headerlink&#34; href=&#34;#前提条件&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;前提条件可以分为&lt;strong&gt;有服务器&lt;/strong&gt;和&lt;strong&gt;无服务器&lt;/strong&gt;两种情况，下面具体说一下。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;有服务器（可以考虑腾讯云或者阿里云的轻量云服务器，双十一优惠价一年也就几十块）；&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;阿里云轻量云服务器：&lt;a href=&#34;https://www.aliyun.com/activity/1111?userCode=mx65q35j&#34;&gt;购买链接&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;腾讯云轻量云服务器：&lt;a href=&#34;https://curl.qcloud.com/0Sy0R0AX&#34;&gt;购买链接&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;域名（域名需要已经完成备案）；&lt;/li&gt;
&lt;li&gt;SSL 证书（可以使用阿里云或者腾讯云的免费域名证书）；&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;无服务器&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;可以考虑使用 &lt;a href=&#34;https://support.cloudflare.com/hc/zh-cn/articles/218411427&#34;&gt;Cloudflare Page Rules&lt;/a&gt;（页面规则）；当然，其他的平台也可以；&lt;/li&gt;
&lt;li&gt;域名（有些域名可以不用备案）；&lt;/li&gt;
&lt;li&gt;SSL 证书（如果你用的是 &lt;a href=&#34;https://support.cloudflare.com/hc/zh-cn/articles/218411427&#34;&gt;Cloudflare Page Rules&lt;/a&gt;，可以不用 SSL 证书 ）。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;操作步骤有服务器&#34;&gt;操作步骤：有服务器&lt;a class=&#34;headerlink&#34; href=&#34;#操作步骤有服务器&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;本操作以 &lt;strong&gt;ncbix.com&lt;/strong&gt; 域名为示例。&lt;/p&gt;
&lt;h3 id=&#34;1-域名解析&#34;&gt;1. 域名解析&lt;a class=&#34;headerlink&#34; href=&#34;#1-域名解析&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;在你的域名供应商后台点击“添加记录”，分别输入 www 和 @，记录类型“A”，记录值就是你虚拟主机或 VPS 服务器的 IP 地址，最后保存。以 DNSPOD 为例。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub-1251708715.cos.ap-guangzhou.myqcloud.com/elog-cookbook-img/FqvWUx6cyUz-O8d1avOdFZ1aDIWF.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;2-ssl-证书&#34;&gt;2. SSL 证书&lt;a class=&#34;headerlink&#34; href=&#34;#2-ssl-证书&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;申请免费证书，具体操作可以自行百度。以腾讯云为例：&lt;a href=&#34;https://console.cloud.tencent.com/ssl&#34;&gt;https://console.cloud.tencent.com/ssl&lt;/a&gt;。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub-1251708715.cos.ap-guangzhou.myqcloud.com/elog-cookbook-img/Fo4XBIRStXxx27kvjKULIjHazdJ9.png&#34; /&gt;
根据截图，一步步点击操作。申请完成后，把证书下载并上传到你的服务器。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub-1251708715.cos.ap-guangzhou.myqcloud.com/elog-cookbook-img/FqamrO4EBSQuO6wsJ28y8g-AH63E.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;3-安装-nginx&#34;&gt;3. 安装 Nginx&lt;a class=&#34;headerlink&#34; href=&#34;#3-安装-nginx&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;可以直接使用 &lt;strong&gt;yum/apt&lt;/strong&gt; 的方式直接安装；源码方式的安装，参考：《&lt;a href=&#34;https://www.yuque.com/shenweiyan/cookbook/centos-install-nginx&#34;&gt;CentOS 7 下编译安装 Nginx · 语雀&lt;/a&gt;》。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# Debian/Ubuntu&lt;/span&gt;
apt&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;update
apt&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;nginx

&lt;span class=&#34;c1&#34;&gt;# CentOS/RHEL&lt;/span&gt;
yum&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;nginx
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;4-配置-nginx&#34;&gt;4. 配置 Nginx&lt;a class=&#34;headerlink&#34; href=&#34;#4-配置-nginx&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;通过 &lt;strong&gt;yum/apt&lt;/strong&gt; 安装的 Nginx 默认的置文件在 &lt;strong&gt;/etc/nginx/nginx.conf&lt;/strong&gt;，编辑该文件。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;k&#34;&gt;http&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;##&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# Basic Settings&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;##&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;......&lt;/span&gt;

&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;##&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# Virtual Host Configs&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;##&lt;/span&gt;
&lt;span class=&#34;s&#34;&gt;server&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;listen&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;80&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;listen&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;443&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;ssl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;server_name&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;ncbix.com&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;www.ncbix.com&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;ssl_certificate&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;/etc/nginx/ssl/nginx/www.ncbix.com_bundle.crt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;ssl_certificate_key&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;/etc/nginx/ssl/nginx/www.ncbix.com.key&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;index&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;index.php&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;index.html&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;index.htm&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;

&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$scheme&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;http&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;return&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;301&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;https://www.yuque.com/shenweiyan&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$request_uri&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;#确保跳转到新域名HTTPS如果没有HTTPS可以去掉&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;location&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;rewrite&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;/.*&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;https://www.yuque.com/shenweiyan&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$uri&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;redirect&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;#跳转到新域名并重写为新域名&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;

&lt;span class=&#34;kn&#34;&gt;include&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;/etc/nginx/conf.d/*.conf&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;include&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;/etc/nginx/sites-enabled/*&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;5-重启-nginx&#34;&gt;5. 重启 Nginx&lt;a class=&#34;headerlink&#34; href=&#34;#5-重启-nginx&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;最后，通过下面的命令重启 Nginx 服务即可。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;service&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;nginx&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;restart
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;操作步骤无服务器&#34;&gt;操作步骤：无服务器&lt;a class=&#34;headerlink&#34; href=&#34;#操作步骤无服务器&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;我们以 &lt;a href=&#34;https://support.cloudflare.com/hc/zh-cn/articles/218411427&#34;&gt;Cloudflare Page Rules&lt;/a&gt; 为例，说明一下具体怎么操作。&lt;/p&gt;
&lt;h3 id=&#34;1-cloudflare-中添加站点&#34;&gt;1. Cloudflare 中添加站点&lt;a class=&#34;headerlink&#34; href=&#34;#1-cloudflare-中添加站点&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub-1251708715.cos.ap-guangzhou.myqcloud.com/elog-cookbook-img/Fjd2wS9yVs0ZiBBalZQVOuPQHbU1.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;添加完站点后，可以选择 &lt;strong&gt;Free 计划&lt;/strong&gt;，然后点击继续：
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub-1251708715.cos.ap-guangzhou.myqcloud.com/elog-cookbook-img/FumaUELUaIJnv9s0Q4paKUDIAWTL.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;点击继续后，Cloudflare 会自动扫描你对应域名的一些解析记录：
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub-1251708715.cos.ap-guangzhou.myqcloud.com/elog-cookbook-img/FtQZKAyQd_6dd5d7A_ZLCVp4NUEg.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;我们可以直接选择 &lt;strong&gt;&amp;ldquo;继续&amp;rdquo;&lt;/strong&gt;。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub-1251708715.cos.ap-guangzhou.myqcloud.com/elog-cookbook-img/Fvkt0gHVP7lmiqapWf3pM7Zx4YwN.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;2-修改域名-dns&#34;&gt;2. 修改域名 DNS&lt;a class=&#34;headerlink&#34; href=&#34;#2-修改域名-dns&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;首先，我的域名是在腾讯云注册的，可以去腾讯云控制台 &lt;strong&gt;&amp;ldquo;我的域名&amp;rdquo;&lt;/strong&gt; 中直接修改 DNS：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;# 添加 Cloudflare 名称服务器
imani.ns.cloudflare.com
caroline.dnspod.net
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub-1251708715.cos.ap-guangzhou.myqcloud.com/elog-cookbook-img/FlKyYHHLGHwD9IPKYvLtPorghBpr.png&#34; /&gt;
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub-1251708715.cos.ap-guangzhou.myqcloud.com/elog-cookbook-img/FmRwodrlbkBt6SkX7RsG2ec1iruc.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;3-完成-cloudflare-添加站点&#34;&gt;3. 完成 Cloudflare 添加站点&lt;a class=&#34;headerlink&#34; href=&#34;#3-完成-cloudflare-添加站点&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;可以把后面快速指南的这几个配置都勾选。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub-1251708715.cos.ap-guangzhou.myqcloud.com/elog-cookbook-img/FtULJ4uM_TuPjPkkMtdXAhxpyDes.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;等待几分钟就可以看到你的域名站点已经添加到 Cloudflare 上了！
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub-1251708715.cos.ap-guangzhou.myqcloud.com/elog-cookbook-img/Fk8Hv5dkW8kHd1IorhNfT427RliQ.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;4-设置-dns-记录&#34;&gt;4. 设置 DNS 记录&lt;a class=&#34;headerlink&#34; href=&#34;#4-设置-dns-记录&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;The first thing you will need is a DNS record for &lt;strong&gt;@&lt;/strong&gt;, &lt;strong&gt;www&lt;/strong&gt; and any other subdomains you want to redirect, set to &lt;img alt=&#34;image.png&#34; src=&#34;https://shub-1251708715.cos.ap-guangzhou.myqcloud.com/elog-cookbook-img/FjjhP041Zj-aZVPAHpQ-YnHIzMA6.png&#34; /&gt;. This can point to any IP address as the redirection page rule will execute first. I would recommend pointing them to 192.0.2.1 , a dummy IP.&lt;/p&gt;
&lt;p&gt;From：&lt;a href=&#34;https://community.cloudflare.com/t/redirecting-one-domain-to-another/81960&#34;&gt;https://community.cloudflare.com/t/redirecting-one-domain-to-another/81960&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;在配置 Cloudflare 站点的页面规则前，你需要把该域名的 &lt;strong&gt;@&lt;/strong&gt;，&lt;strong&gt;www&lt;/strong&gt; 或者其他你想要进行重定向的子域名添加到 DNS 记录中，这个记录的值可以指向任何 IP 地址，因为重定向页面规则将首先执行。我建议将它们指向 192.0.2.1 ，一个虚拟 IP。&lt;/p&gt;
&lt;p&gt;在这里，我们以 &lt;strong&gt;@&lt;/strong&gt; 和 &lt;strong&gt;note&lt;/strong&gt; 子域名为例，添加 DNS 记录，先让它们指向一个虚拟 IP。
&lt;img alt=&#34;images&#34; src=&#34;https://shub-1251708715.cos.ap-guangzhou.myqcloud.com/elog-cookbook-img/Fk08ydFuPukTv88AAa0V27T4xTBh.png&#34; title=&#34;以 ncbix.com 和 note.ncbix.com 为例，均重定向到 https://www.yuque.com/shenweiyan 页面&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;5-配置-cloudflare-站点页面规则&#34;&gt;5. 配置 Cloudflare 站点页面规则&lt;a class=&#34;headerlink&#34; href=&#34;#5-配置-cloudflare-站点页面规则&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;首先，在 Cloudflare 的主页上点击对应的站点，选择 &lt;strong&gt;&amp;ldquo;页面规则&amp;rdquo;&lt;/strong&gt;，点击。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub-1251708715.cos.ap-guangzhou.myqcloud.com/elog-cookbook-img/FqolXaSzUdkgtKo66yRC3xRkV7mv.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;点击 &lt;strong&gt;&amp;ldquo;创建页面规则&amp;rdquo;&lt;/strong&gt;：
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub-1251708715.cos.ap-guangzhou.myqcloud.com/elog-cookbook-img/FnF2bk6hzYvulCtXdLSQSUiV1Z44.png&#34; /&gt;
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub-1251708715.cos.ap-guangzhou.myqcloud.com/elog-cookbook-img/Fp5DSLxKInn25a591hjYjDNpUeRn.png&#34; /&gt;
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub-1251708715.cos.ap-guangzhou.myqcloud.com/elog-cookbook-img/FiFuRSizKlmkmJ5LxiBfkIGreBdm.png&#34; /&gt;
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub-1251708715.cos.ap-guangzhou.myqcloud.com/elog-cookbook-img/FtNPR2rLIFDKMYz3N8gqkLBcQFnG.png&#34; /&gt;&lt;/p&gt;
&lt;h4 id=&#34;什么是页面规则&#34;&gt;什么是页面规则？&lt;a class=&#34;headerlink&#34; href=&#34;#什么是页面规则&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;blockquote&gt;
&lt;p&gt;页面规则为 Cloudflare 设置提供基于 URL 的粒度控制。关于页面规则需要了解的最重要事情是，针对一个 URL 仅触发一个页面规则，因此一定要按照优先级顺序对页面规则进行排序并将最具体的页面规则放在顶部。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h5 id=&#34;页面规则中允许哪些模式&#34;&gt;页面规则中允许哪些模式？&lt;a class=&#34;headerlink&#34; href=&#34;#页面规则中允许哪些模式&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h5&gt;
&lt;blockquote&gt;
&lt;p&gt;如果使用的是转发页面规则，则可以将这些通配符映射到变量。在转发 URL 中，可以按照从左到右的顺序指定与原始 URL 中的通配符相匹配的 &lt;span class=&#34;arithmatex&#34;&gt;\(1、\)&lt;/span&gt;2，以此类推。&lt;/p&gt;
&lt;p&gt;例如，可以将 &lt;code&gt;http://.example.com/&lt;/code&gt; 转发到 &lt;code&gt;http://$2.example.com/$1.jpg&lt;/code&gt;。此规则将与 &lt;a href=&#34;http://cloud.example.com/flare&#34;&gt;http://cloud.example.com/flare&lt;/a&gt; 相匹配，这最终将转发到 &lt;a href=&#34;http://flare.example.com/cloud.jpg&#34;&gt;http://flare.example.com/cloud.jpg&lt;/a&gt;。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h5 id=&#34;一些有用的提示&#34;&gt;一些有用的提示：&lt;a class=&#34;headerlink&#34; href=&#34;#一些有用的提示&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h5&gt;
&lt;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;如果要同时匹配 http 和 https，只需编写 example.com 即可。无需编写 example.com。&lt;/li&gt;
&lt;li&gt;如果要匹配域中的每个页面，则需要编写 example.com/，仅编写 example.com 是不够的。&lt;/li&gt;
&lt;li&gt;请参阅 &lt;a href=&#34;https://support.cloudflare.com/hc/articles/218411427&#34;&gt;了解和配置 Cloudflare 页面规则&lt;/a&gt; 了解有关页面规则模式的更多详细信息。&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;6-配置-ssl不必要&#34;&gt;6. 配置 SSL(不必要)&lt;a class=&#34;headerlink&#34; href=&#34;#6-配置-ssl不必要&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;📢 Update 2022.09.05：这一步不是必要的，这里仅供参考！&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;申请 &lt;a href=&#34;http://www.example.com&#34;&gt;www.example.com&lt;/a&gt; 域名的 SSL 证书；&lt;/li&gt;
&lt;li&gt;把 DNS 验证域名的记录添加到 Cloudfare 的 DNS 中；&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub-1251708715.cos.ap-guangzhou.myqcloud.com/elog-cookbook-img/FiEmXujpQKK0j0p2GxzaOgTC3xwN.png&#34; /&gt;
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub-1251708715.cos.ap-guangzhou.myqcloud.com/elog-cookbook-img/FnOHAmNIAcEmwBD_fv3eIUBzxmiB.png&#34; /&gt;
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub-1251708715.cos.ap-guangzhou.myqcloud.com/elog-cookbook-img/FtxcA4iXJhT029vkw35EVkDN-2QG.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意：&lt;/strong&gt;
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub-1251708715.cos.ap-guangzhou.myqcloud.com/elog-cookbook-img/FgrIb03h7Inot6k7fa1BHGH4G3HO.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;参考资料&#34;&gt;参考资料&lt;a class=&#34;headerlink&#34; href=&#34;#参考资料&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&#34;https://segmentfault.com/q/1010000015157572&#34;&gt;nginx 实现两个域名之间跳转配置 - SegmentFault 思否&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cloud.baidu.com/doc/DNS/s/ukq4w1pji&#34;&gt;智能云解析 DNS - 通过 Nginx 实现 URL 转发 | 百度智能云文档&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://ahrefs.com/blog/zh/301-redirects/&#34;&gt;SEO 的 301 重定向：你需要知道的一切&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;8&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/tech/discussions-8/</link>
      <pubDate>Mon, 23 Oct 2023 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/tech/discussions-8/</guid>
      
    </item>
    
    <item>
      <title>在 Linux 上给用户赋予指定目录的读写权限</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;在 Linux 上指定目录的读写权限赋予用户，有两种方法可以实现这个目标：第一种是使用 ACL (访问控制列表)，第二种是创建用户组来管理文件权限，下面会一一介绍。为了完成这个教程，我们将使用以下设置：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;操作系统：CentOS 7&lt;/li&gt;
&lt;li&gt;测试目录：/data/share&lt;/li&gt;
&lt;li&gt;测试用户：shenweiyan&lt;/li&gt;
&lt;li&gt;文件系统类型：ext4&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;请确认所有的命令都是使用 root 用户执行的，或者使用 sudo 命令来享受与之同样的权限。让我们开始吧！下面，先使用 mkdir 命令来创建一个名为 share 的目录。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mkdir&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-p&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/data/share
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;!-- more --&gt;

&lt;h2 id=&#34;1-acl-权限设置&#34;&gt;1. ACL 权限设置&lt;a class=&#34;headerlink&#34; href=&#34;#1-acl-权限设置&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;重要提示：&lt;/strong&gt;     &lt;br /&gt;
打算使用此方法的话，您需要确认您的 Linux 文件系统类型（如 ext3 和 ext4, NTFS, BTRFS）支持 ACL。&lt;/p&gt;
&lt;h3 id=&#34;11-查看内核是否支持-acl&#34;&gt;1.1. 查看内核是否支持 ACL&lt;a class=&#34;headerlink&#34; href=&#34;#11-查看内核是否支持-acl&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;依照以下命令在您的系统中检查当前文件系统类型，并且查看内核是否支持 ACL：**&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;df&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-T&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;awk&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;{print $1,$2,$NF}&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;grep&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;^/dev&amp;quot;&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;grep&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-i&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;acl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/boot/config*
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;从下方的截屏可以看到，文件系统类型是 ext4，并且从 &lt;code&gt;CONFIG_EXT4_FS_POSIX_ACL=y&lt;/code&gt; 选项可以发现内核是支持 POSIX ACL 的。
&lt;img alt=&#34;config-ext4-fs-posix-acl&#34; src=&#34;https://gi.weiyan.tech/2024/08/config-ext4-fs-posix-acl.webp&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;12-挂载是否使用了-acl&#34;&gt;1.2. 挂载是否使用了 ACL&lt;a class=&#34;headerlink&#34; href=&#34;#12-挂载是否使用了-acl&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;使用下面的命令，查看文件系统（分区）挂载时是否使用了 ACL 选项。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tune2fs&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-l&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/dev/vda1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;grep&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;acl
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;tune2fs-acl&#34; src=&#34;https://gi.weiyan.tech/2024/08/tune2fs-acl.webp&#34; /&gt;    &lt;br /&gt;
通过上边的输出可以发现，默认的挂载项目中已经对 ACL 进行了支持。如果发现结果不如所愿，你可以通过以下命令对指定分区（此例中使用 /dev/sda3）开启 ACL 的支持）。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mount&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-o&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;remount,acl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tune2fs&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-o&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;acl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/dev/sda3
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;13-设置-acl-权限&#34;&gt;1.3. 设置 ACL 权限&lt;a class=&#34;headerlink&#34; href=&#34;#13-设置-acl-权限&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;setfacl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-m&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;m:rx&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;文件名&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 给 mask 的权限为 r-x ，使用 &amp;quot;m:rx&amp;quot;格式 &lt;/span&gt;

setfacl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-m&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;u:用户名:权限&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-R&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;目录名&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 递归 ACL 权限(针对目录现有的文件设置 ACL) &lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;例如，指定目录 &lt;code&gt;share&lt;/code&gt; 的读写权限分配给名为 &lt;code&gt;shenweiyan&lt;/code&gt; 的用户了，依照以下命令执行即可。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 检查目录默认的 ACL 设置（Check the default ACL settings for the directory）&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;getfacl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/data/share

&lt;span class=&#34;c1&#34;&gt;# 指定用户读写权限（Give rw access to user shenweiyan）&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# 对于目录必须增加 x (执行)权限, 否则无法进入目录&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;setfacl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-m&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;user:shenweiyan:rwx&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/data/share

&lt;span class=&#34;c1&#34;&gt;# 再次检查目录 ACL 设置（Check new ACL settings for the directory）&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;getfacl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/data/share
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;setfacl-m-user&#34; src=&#34;https://gi.weiyan.tech/2024/08/setfacl-m-user.webp&#34; /&gt;    &lt;br /&gt;
在上方的截屏中，通过输出结果的第二行 getfacl 命令可以发现，用户 shenweiyan 已经成功的被赋予了 /data/share 目录的读写权限。&lt;/p&gt;
&lt;p&gt;如果想要获取 ACL 列表的更多信息。请参考：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://www.tecmint.com/set-access-control-lists-acls-and-disk-quotas-for-users-groups/&#34;&gt;如何使用访问控制列表（ACL）为用户/组设置磁盘配额&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.tecmint.com/rhcsa-exam-configure-acls-and-mount-nfs-samba-shares/&#34;&gt;如何使用访问控制列表（ACL）挂载网络共享&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;14-删除-acl-权限&#34;&gt;1.4. 删除 ACL 权限&lt;a class=&#34;headerlink&#34; href=&#34;#14-删除-acl-权限&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;如果用户名（组名）已经删除，可以使用 UID（GID）进行删除。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;setfacl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-x&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;u:用户名&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;文件名&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 删除指定用户的 ACL 权限&lt;/span&gt;
setfacl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-x&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;g:组名&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;文件名&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 删除指定组的 ACL 权限 &lt;/span&gt;
setfacl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-b&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;文件名&lt;span class=&#34;w&#34;&gt;              &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 删除文件下所有的 ACL 权限 &lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;2-用户组权限设置&#34;&gt;2. 用户组权限设置&lt;a class=&#34;headerlink&#34; href=&#34;#2-用户组权限设置&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&#34;21-变更属组&#34;&gt;2.1. 变更属组&lt;a class=&#34;headerlink&#34; href=&#34;#21-变更属组&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;如果用户已经拥有了默认的用户组（通常组名与用户名相同），就可以简单的通过变更文件夹的所属用户组来完成。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;err&#34;&gt;$&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;chgrp&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;shenweiyan&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;share&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;另外，我们也可以通过以下方法为多个用户（需要赋予指定目录读写权限的）新建一个用户组。如此一来，也就创建了一个共享目录。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;err&#34;&gt;$&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;groupadd&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dbshare&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;22-把用户添加到属组&#34;&gt;2.2. 把用户添加到属组&lt;a class=&#34;headerlink&#34; href=&#34;#22-把用户添加到属组&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;接下来将用户 &lt;code&gt;shenweiyan&lt;/code&gt; 添加到 &lt;code&gt;dbshare&lt;/code&gt; 组中：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# add user to projects&lt;/span&gt;
&lt;span class=&#34;err&#34;&gt;$&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;usermod&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;aG&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dbshare&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;shenweiyan&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# check users groups&lt;/span&gt;
&lt;span class=&#34;err&#34;&gt;$&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;groups&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;tecmint&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;23-变更属组&#34;&gt;2.3. 变更属组&lt;a class=&#34;headerlink&#34; href=&#34;#23-变更属组&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;将目录的所属用户组变更为 &lt;code&gt;dbshare&lt;/code&gt;：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;err&#34;&gt;$&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;chgrp&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;projects&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;share&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;24-设置组员权限&#34;&gt;2.4. 设置组员权限&lt;a class=&#34;headerlink&#34; href=&#34;#24-设置组员权限&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;现在，给组成员设置读写权限。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;chmod&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-R&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0760&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/data/share

&lt;span class=&#34;c1&#34;&gt;# check new permissions&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ls&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-l&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/data/share
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;ok，在 Linux 上给用户赋予指定目录的读写权限就介绍到这里 ！&lt;/p&gt;
&lt;h2 id=&#34;3-参考资料&#34;&gt;3. 参考资料&lt;a class=&#34;headerlink&#34; href=&#34;#3-参考资料&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;高延斌，《&lt;a href=&#34;https://www.ibm.com/developerworks/cn/linux/l-acl/index.html&#34;&gt;Linux ACL 体验&lt;/a&gt;》，IBM Developer&lt;/li&gt;
&lt;li&gt;Mr-Ping，《在 Linux 上给用户赋予指定目录的读写权限》，Linux 中国&lt;/li&gt;
&lt;/ul&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;9&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/tech/discussions-9/</link>
      <pubDate>Mon, 23 Oct 2023 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/tech/discussions-9/</guid>
      
    </item>
    
    <item>
      <title>Python 导出公众号文章为 Markdown</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;记录一下个人使用 Python3 爬取个人公众号的所有文章，并把文章保存为 Markdown 格式的一些操作记录，主要介绍一下思路和一些简单的代码。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;h2 id=&#34;前提条件与思路&#34;&gt;前提条件与思路&lt;a class=&#34;headerlink&#34; href=&#34;#前提条件与思路&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;需要登录网页端微信公众号，获取对应 Cookies；&lt;/li&gt;
&lt;li&gt;通过获取的 Cookies 爬取所有的文章 url 以及其他信息；&lt;/li&gt;
&lt;li&gt;通过文章 url 获取对应文章的 HTML；&lt;/li&gt;
&lt;li&gt;最后，把 HTML 转化为 Markdown。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;之所以选择通过文章公开访问的 url 爬取对应文章的 HTML，而不是直接沿用 Cookies，主要是怕 Cookies 滥用导致其他不可预知的问题，例如封号之类。截止本文章发布前，个人公众号全部已发表的文章大约有 400 多篇，通过这个方法都能正常爬取下来。&lt;/p&gt;
&lt;h2 id=&#34;获取已发表文章数&#34;&gt;获取已发表文章数&lt;a class=&#34;headerlink&#34; href=&#34;#获取已发表文章数&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;登录公众号，按下 F12 打开开发者工具，在 &lt;code&gt;网络&lt;/code&gt; 栏中找到 &lt;code&gt;appmsgpublish&lt;/code&gt; 名称的请求。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;查看请求地址
  &lt;img alt=&#34;appmsgpublish url&#34; src=&#34;https://slab-1251708715.cos.ap-guangzhou.myqcloud.com/Gitbook/wechat_url.png&#34; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;获取 cookie
  &lt;img alt=&#34;wecaht cookie&#34; src=&#34;https://slab-1251708715.cos.ap-guangzhou.myqcloud.com/Gitbook/wecaht_cookie.png&#34; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;requests&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;json&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;#注意把 &amp;lt;Your Cookie&amp;gt; 替换成你自己的 cookie&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;headers&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Content-type&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;application/json&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;User-Agent&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
           &lt;span class=&#34;s1&#34;&gt;&amp;#39;Cookie&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Your&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Cookie&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;#这个 url 即截图中的请求地址&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;url&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;https://mp.weixin.qq.com/cgi-bin/appmsgpublish?sub=list&amp;amp;search_field=null&amp;amp;begin=0&amp;amp;count=5&amp;amp;query=&amp;amp;type=101_1&amp;amp;free_publish_type=1&amp;amp;sub_action=list_ex&amp;amp;token=&amp;lt;token&amp;gt;&amp;amp;lang=zh_CN&amp;amp;f=json&amp;amp;ajax=1&amp;#39;&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;req&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;requests&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;headers&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;headers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;req_json&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;json&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;loads&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;req&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;content&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;decode&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;utf-8&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;req_json&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# total_count 即为已发表文章的总数&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;img alt=&#34;Wecaht posts total_count&#34; src=&#34;https://slab-1251708715.cos.ap-guangzhou.myqcloud.com/Gitbook/total_count.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;获取所有的文章信息&#34;&gt;获取所有的文章信息&lt;a class=&#34;headerlink&#34; href=&#34;#获取所有的文章信息&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;以下程序的 &lt;code&gt;mp.txt&lt;/code&gt; 就是得到的该公众号所有文章信息的列表。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;allPostList&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[]&lt;/span&gt;

&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;number&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;range&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;420&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;20&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
    &lt;span class=&#34;c1&#34;&gt;#注意 begin={number}&amp;amp;count=20，即按照每页20篇文章，分页进行爬取&lt;/span&gt;
    &lt;span class=&#34;c1&#34;&gt;#根据测试每页最多只支持20篇文章&lt;/span&gt;
    &lt;span class=&#34;n&#34;&gt;url&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;https://mp.weixin.qq.com/cgi-bin/appmsgpublish?sub=list&amp;amp;search_field=null&amp;amp;begin=&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;number&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;amp;count=20&amp;amp;query=&amp;amp;type=101_1&amp;amp;free_publish_type=1&amp;amp;sub_action=list_ex&amp;amp;token=&amp;lt;token&amp;gt;&amp;amp;lang=zh_CN&amp;amp;f=json&amp;amp;ajax=1&amp;#39;, headers=headers)&amp;quot;&lt;/span&gt;
    &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;requests&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;headers&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;headers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
    &lt;span class=&#34;n&#34;&gt;posts_list&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;json&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;loads&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;json&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;loads&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;content&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;decode&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;utf-8&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;publish_page&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;publish_list&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
    &lt;span class=&#34;n&#34;&gt;allPostList&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;allPostList&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;posts_list&lt;/span&gt;  
    &lt;span class=&#34;n&#34;&gt;time&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sleep&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;k&#34;&gt;with&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;open&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;mp.txt&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;w&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;OUT&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
    &lt;span class=&#34;n&#34;&gt;OUT&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;write&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;allPostList&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;html-to-markdown&#34;&gt;HTML to Markdown&lt;a class=&#34;headerlink&#34; href=&#34;#html-to-markdown&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Python 导出公众号文章为 Markdown 最后的一步工作就是解析上一步骤得到的 &lt;code&gt;mp.txt&lt;/code&gt; 文件，然后通过 url 去逐一爬取对应的文章 HTML，然后把 Html 转化成 Markdown 即可。&lt;/p&gt;
&lt;p&gt;这些步骤都很简单，网上搜一下就有一大堆教程，感兴趣的可以去搜一下，这里文章就不写了。 &lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;7&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-7/</link>
      <pubDate>Thu, 19 Oct 2023 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-7/</guid>
      
    </item>
    
    <item>
      <title>2023年下半年的一些乱弹</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;其实写这边文章，主要是想着测试一下使用了 GitHub Actions 的 mkdocs 触发 Discussions to mkdocs blog posts 的一些效果。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;今天的天气真好啊！阳光明媚，微风拂面，仿佛是一幅美丽的画卷。这样的天气让人心情愉悦，忍不住想要出去走走，感受大自然的美丽。无论是散步还是骑自行车，都是不错的选择。我享受着这美好的一天，也期待着未来更多美好的时光。&lt;/p&gt;
&lt;p&gt;从 11 月起，公司也好，家庭也罢，陆陆续续的一些事情让生活变得此起彼伏。缺乏了一些码字的动力，整个人变得有点沮丧，空洞夹杂着混沌的状态让整个人都很显得颓废。生活需要激情，希望接下来的 12 月能回归一个更好的状态吧！&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;6&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-6/</link>
      <pubDate>Wed, 18 Oct 2023 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-6/</guid>
      
    </item>
    
    <item>
      <title>友情链接</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2023-10-16&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2023-10-16T00:00:00&#39;&gt;2023-10-16&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2026-01-28&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2026-01-28T00:00:00&#39;&gt;2026-01-28&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;style&gt;
.md-typeset .grid{grid-template-columns: repeat(auto-fit, minmax(12rem, 5fr))}
.md-sidebar--primary:is([hidden]) ~ .md-content:not(.md-content--post){margin-left: 5px;}
.md-content__inner a{font-size:14px;font-weight:700}
.md-typeset img{margin: 0 5px 0 0 !important;width: 48px;height: 48px;float:left;}
.md-typeset ul li p:last-of-type {overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px;}
&lt;/style&gt;

&lt;blockquote&gt;
&lt;p&gt;每一个独立博客都是一个信息孤岛。我们没有类似「你可能喜欢其他人写的这些文章」的推荐机制，所以除了搜索引擎、社交网络引荐之外，我们应该还需要通过某种方法将这些信息孤岛连接起来：&lt;strong&gt;交换友情链接就是一种很棒的架桥方式。&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;社交就是不断认识新的人、结交新的朋友，而友链也正是这样一种很棒的交朋友的方式，作为一个不太善于言辞的技术人，我希望结交更多的朋友，来丰富我的社交，一起成长。&lt;/p&gt;
&lt;h2 id=&#34;站点信息&#34;&gt;站点信息&lt;a class=&#34;headerlink&#34; href=&#34;#站点信息&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;申请前记得先添加本站哦&lt;/strong&gt;，站点信息如下。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;站点名称: 维燕的数字花园&lt;/li&gt;
&lt;li&gt;站点链接: &lt;a href=&#34;https://shenwy.com&#34;&gt;https://shenwy.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;站点头像: &lt;a href=&#34;https://shenwy.com/assets/logo.png&#34;&gt;https://shenwy.com/assets/logo.png&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;站点描述: BioIT 爱好者，沉淀生活，记录点滴。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;交换友链&#34;&gt;交换友链&lt;a class=&#34;headerlink&#34; href=&#34;#交换友链&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;想和我交换友链的，没啥特别需求，只是希望你的博客有足够多的&lt;strong&gt;原创&lt;/strong&gt;、&lt;strong&gt;有意义&lt;/strong&gt;的内容，并且建站已满半年。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;不接受商业性或包含侵入性广告的站点。&lt;/li&gt;
&lt;li&gt;那种塞满了转载文章的采集站点暂时不考虑。&lt;/li&gt;
&lt;li&gt;非常反感很多论坛上动不动就来交换友链的帖子，如果是出于 SEO 的一些目的来交换友链其实是没什么意义的。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;友链说明&#34;&gt;友链说明&lt;a class=&#34;headerlink&#34; href=&#34;#友链说明&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;如需申请，在下方评论区提供你的「博客名称」和「博客地址」即可。或者参考以下格式：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;博客名称：xxxxx&lt;/li&gt;
&lt;li&gt;博客地址：https://xxxx.com&lt;/li&gt;
&lt;li&gt;博客介绍：xxxxxxxx&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;友情站点&#34;&gt;友情站点&lt;a class=&#34;headerlink&#34; href=&#34;#友情站点&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;以下站点按照添加的时间顺序排列。&lt;/p&gt;
&lt;div class=&#34;grid cards&#34;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://avatars.githubusercontent.com/u/105262243&#34; /&gt; &lt;a href=&#34;https://jiaoyuan.org/&#34;&gt;&lt;strong&gt;JiaoYuan&amp;rsquo;s blog&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;思绪来得快去得也快，偶尔会在这里停留。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://avatars.githubusercontent.com/u/37357188&#34; /&gt; &lt;a href=&#34;https://blog.1874.cool&#34;&gt;&lt;strong&gt;1874’s Blog&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;有粤语歌就不会有世界末日。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://avatars.githubusercontent.com/u/97662597&#34; /&gt; &lt;a href=&#34;https://xxu.do/&#34;&gt;&lt;strong&gt;Jayden&amp;rsquo;s site&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;为天地立心，为生民立命，为往圣继绝学，为万世开太平。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://shitao5.org/logo.png&#34; /&gt; &lt;a href=&#34;https://shitao5.org/&#34;&gt;&lt;strong&gt;Shitao Wu | 吴诗涛&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;喜欢捣鼓电脑，UseR，喜欢&lt;a href=&#34;https://shitao5.org/tags/%E8%AF%BB%E5%90%8E%E6%84%9F/&#34;&gt;阅读&lt;/a&gt;，重度使用 Kindle。甘愿做一个平庸的人，走在成为我自己的道路上。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://douchi.sfo3.cdn.digitaloceanspaces.com/blog/dino_statict.png&#34; /&gt; &lt;a href=&#34;https://blog.douchi.space/&#34;&gt;&lt;strong&gt;椒盐豆豉&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;一个写了二十年博客，现居美国西雅图的女博主+码农。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://uioqps.github.io/me.jpg&#34; /&gt; &lt;a href=&#34;https://uioqps.github.io/&#34;&gt;&lt;strong&gt;Pepper 的博客&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;生命留给有价值的事物才能创造价值。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://avatars.githubusercontent.com/u/69741445&#34; /&gt; &lt;a href=&#34;https://wanjinhu.github.io/&#34;&gt;&lt;strong&gt;Wanjin Hu (胡万金)&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;思考人生，探索世界，知行合一。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://pica.zhimg.com/80/v2-74ecd899c7c4cc0258930eaff239a21b_1440w.webp&#34; /&gt; &lt;a href=&#34;https://wcowin.work/&#34;&gt;&lt;strong&gt;Wcowin&amp;rsquo;s Blog&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;循此苦旅，以达星辰。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://avatars.githubusercontent.com/u/117809044&#34; /&gt; &lt;a href=&#34;https://goslion.eu.org/&#34;&gt;&lt;strong&gt;Goslion 的博客&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;一个专注技术与写作的个人博客，记录日常与技术。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://www.boyouquan.com/assets/images/sites/logo/logo-small.svg&#34; /&gt; &lt;a href=&#34;https://www.boyouquan.com/home&#34;&gt;&lt;strong&gt;博友圈&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;博客人的朋友圈，将一个个散落在各处的孤岛连接成一片广袤无垠的新大陆！&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://hongjun.vip/assets/avatar.png&#34; /&gt; &lt;a href=&#34;https://hongjun.vip/&#34;&gt;&lt;strong&gt;极简主义&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;文档即产品。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;5&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/flinks/</link>
      <pubDate>Mon, 16 Oct 2023 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/flinks/</guid>
      
    </item>
    
    <item>
      <title>数据可视化</title>
      
      
        
      <author>沈维燕</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2023-07-25&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2023-07-25T00:00:00&#39;&gt;2023-07-25&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2024-04-11&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2024-04-11T00:00:00&#39;&gt;2024-04-11&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;基于 R 和 Python 的数据可视化。&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E5%8F%AF%E8%A7%86%E5%8C%96/</link>
      <pubDate>Tue, 25 Jul 2023 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%8F%AF%E8%A7%86%E5%8C%96/</guid>
      
    </item>
    
    <item>
      <title>Development 和 Operations</title>
      
      
        
      <author>沈维燕</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2023-07-25&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2023-07-25T00:00:00&#39;&gt;2023-07-25&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2024-04-11&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2024-04-11T00:00:00&#39;&gt;2024-04-11&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;DevOps 将开发 (Dev) 和运营 (Ops) 相结合，从而在应用程序规划、开发、交付和运营中统一人员、流程和技术。&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/</link>
      <pubDate>Tue, 25 Jul 2023 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/</guid>
      
    </item>
    
    <item>
      <title>Linux 专栏</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2023-07-25&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2023-07-25T00:00:00&#39;&gt;2023-07-25&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2023-07-25&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2023-07-25T08:09:10&#39;&gt;2023-07-25&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id=&#34;什么是-linux&#34;&gt;什么是 Linux？&lt;a class=&#34;headerlink&#34; href=&#34;#什么是-linux&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Linux® 是一个&lt;a href=&#34;https://www.redhat.com/zh/topics/linux/what-is-linux&#34;&gt;开源的操作系统（OS）&lt;/a&gt;。它由 Linus Torvalds 于 &lt;a href=&#34;https://groups.google.com/g/comp.os.minix/c/dlNtH7RRrGA/m/SwRavCzVE7gJ&#34;&gt;1991&lt;/a&gt; 年构思设计而成，最初这只是他的一项兴趣爱好。当时还在读大学的 Linus 想要基于 Unix 的原则和设计来创建一个免费的开源系统，从而代替 MINIX 操作系统。自此，这项兴趣爱好便逐步演变成了拥有最大用户群的操作系统。如今，它不仅是公共互联网服务器上最常用的操作系统，还是速度排名前 500 的超级电脑上使用的唯一一款操作系统。&lt;/p&gt;
&lt;figure&gt;
&lt;p&gt;&lt;img alt=&#34;linux-logo&#34; src=&#34;https://shub.weiyan.tech/mkdocs/tux-327x360.png&#34; title=&#34;Tux，Linux 吉祥物，Larry Ewing 设计&#34; /&gt;&lt;/p&gt;
&lt;figcaption&gt;Tux，Linux 吉祥物，Larry Ewing 设计&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Linux 最大的优势当属它的开源属性。Linux 是一款基于 &lt;a href=&#34;https://www.gnu.org/licenses/licenses.html&#34;&gt;GNU 通用公共许可证（GPL）&lt;/a&gt; 发布的操作系统。这意味着，所有人都能运行、研究、分享和修改这个软件。经过修改后的代码还能重新分发，甚至出售，但必须基于同一个许可证。这一点与传统操作系统（如 Unix 和 Windows）截然不同，因为传统操作系统都是锁定供应商、以原样交付且无法修改的专有系统。&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/</link>
      <pubDate>Tue, 25 Jul 2023 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/</guid>
      
    </item>
    
    <item>
      <title>数据库技术</title>
      
      
        
      <author>沈维燕</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2023-07-25&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2023-07-25T00:00:00&#39;&gt;2023-07-25&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2024-04-11&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2024-04-11T00:00:00&#39;&gt;2024-04-11&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;关于 MySQL、PostgreSQL，以及 SQLite 数据库的一些使用和介绍。&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E6%95%B0%E6%8D%AE%E5%BA%93/</link>
      <pubDate>Tue, 25 Jul 2023 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E6%95%B0%E6%8D%AE%E5%BA%93/</guid>
      
    </item>
    
    <item>
      <title>生物信息学</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2023-07-25&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2023-07-25T00:00:00&#39;&gt;2023-07-25&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2023-07-25&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2023-07-25T08:09:10&#39;&gt;2023-07-25&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;生物信息学（bioinformatics）利用应用数学、信息学、统计学和计算机科学的方法研究生物学的问题。 生物信息学以各种各样的生物学数据为研究材料，通过计算机处理后再进行结果解读，处理方法包括对生物学数据的搜索（收集和筛选）、处理（编辑、整理、管理和显示）及利用（计算、模拟）。&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E7%94%9F%E7%89%A9%E4%BF%A1%E6%81%AF/</link>
      <pubDate>Tue, 25 Jul 2023 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E7%94%9F%E7%89%A9%E4%BF%A1%E6%81%AF/</guid>
      
    </item>
    
    <item>
      <title>代码改变世界</title>
      
      
        
      <author>沈维燕</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2023-07-25&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2023-07-25T00:00:00&#39;&gt;2023-07-25&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2024-04-11&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2024-04-11T00:00:00&#39;&gt;2024-04-11&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Write the Code. Change the World.&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E7%BC%96%E7%A8%8B%E6%8A%80%E6%9C%AF/</link>
      <pubDate>Tue, 25 Jul 2023 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E7%BC%96%E7%A8%8B%E6%8A%80%E6%9C%AF/</guid>
      
    </item>
    
    <item>
      <title>专题类知识文档</title>
      
      
        
      <author>沈维燕</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2023-07-24&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2023-07-24T00:00:00&#39;&gt;2023-07-24&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2023-07-24&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2023-07-24T08:08:08&#39;&gt;2023-07-24&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;这是作者关于特定方向的专题类的文档，如 Galaxy Project、Rocky Linux 等。目前正在努力更新中。&lt;/p&gt;
&lt;h2 id=&#34;galaxy-project&#34;&gt;Galaxy Project&lt;a class=&#34;headerlink&#34; href=&#34;#galaxy-project&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The Galaxy Project has produced numerous open source software offerings to help you build your science analysis infrastructure. Our software covers the gamut from helping you integrate new software into our platform, to a production-ready engine to run those programs in complex MapReduce workflows.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;galaxyproject&#34; src=&#34;https://kg.weiyan.tech/2025/03/galaxyproject.jpg&#34; /&gt;&lt;/p&gt;</description>
      <link>https://shenwy.com/topic/</link>
      <pubDate>Mon, 24 Jul 2023 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/topic/</guid>
      
    </item>
    
    <item>
      <title>Galaxy Project 文档</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2023-07-24&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2023-07-24T00:00:00&#39;&gt;2023-07-24&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2023-07-24&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2023-07-24T08:08:08&#39;&gt;2023-07-24&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Galaxy Project 中文版本文档。目前正在努力更新中。&lt;/p&gt;</description>
      <link>https://shenwy.com/topic/galaxy/</link>
      <pubDate>Mon, 24 Jul 2023 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/topic/galaxy/</guid>
      
    </item>
    
    <item>
      <title>语雀知识库</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2023-07-24&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2023-07-24T00:00:00&#39;&gt;2023-07-24&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2024-01-24&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2024-01-24T08:08:08&#39;&gt;2024-01-24&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div class=&#34;admonition quote&#34;&gt;
  &lt;p align=&#34;center&#34;&gt;&#34;Real beauty comes from learning, growing, and loving in the ways of life. That is the Art of Life.&#34;&lt;/p&gt;
  &lt;p align=&#34;center&#34;&gt;&#34;感谢你的支持，我们一定会越来越好&#34;&lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;语雀，是一个非常优秀的文档和知识库工具，也曾经是个人知识和文档记录的一个非常重要的平台。但由于工作和其他的一些原因，逐渐从&lt;a href=&#34;https://www.yuque.com/shenweiyan&#34;&gt;语雀&lt;/a&gt;转移到了 &lt;a href=&#34;https://github.com/shenweiyan/Digital-Garden/&#34;&gt;GitHub&lt;/a&gt;，作为历史文章的一个备份，你可以通过下面的链接访问我的语雀花园主页。&lt;/p&gt;
&lt;!--p style=&#34;text-align:center&#34;&gt;&lt;a href=&#34;https://www.yuque.com/shenweiyan&#34; target=&#34;_blank&#34;&gt;章鱼猫先生 - 语雀&lt;/a&gt;&lt;/p--&gt;

&lt;p align=&#34;center&#34;&gt;
  &lt;a href=&#34;https://www.yuque.com/shenweiyan&#34; class=&#34;rounded-button&#34;&gt;
      &lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; viewBox=&#34;0 0 512 512&#34;&gt;&lt;!--!Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.--&gt;&lt;path d=&#34;M160 96a96 96 0 1 1 192 0A96 96 0 1 1 160 96zm80 152V512l-48.4-24.2c-20.9-10.4-43.5-17-66.8-19.3l-96-9.6C12.5 457.2 0 443.5 0 427V224c0-17.7 14.3-32 32-32H62.3c63.6 0 125.6 19.6 177.7 56zm32 264V248c52.1-36.4 114.1-56 177.7-56H480c17.7 0 32 14.3 32 32V427c0 16.4-12.5 30.2-28.8 31.8l-96 9.6c-23.2 2.3-45.9 8.9-66.8 19.3L272 512z&#34;&gt;&lt;/path&gt;&lt;/svg&gt;
      章鱼猫先生 - 语雀
  &lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;这个节点的文章最初是保存在语雀的 &amp;ldquo;&lt;a href=&#34;https://www.yuque.com/shenweiyan/cookbook&#34;&gt;技术私房菜&lt;/a&gt;&amp;rdquo; 知识库，后来借助 &lt;a href=&#34;https://github.com/LetTTGACO/elog&#34;&gt;LetTTGACO/elog&lt;/a&gt; 备份到了个人托管在 GitHub 的 &lt;a href=&#34;https://github.com/shenweiyan/Digital-Garden&#34;&gt;Digital-Garden&lt;/a&gt; 仓库（对部分文章内容已经进行了更新），并最终基于 &lt;a href=&#34;https://squidfunk.github.io/mkdocs-material/&#34;&gt;mkdocs-material&lt;/a&gt; 在这里展现了出来。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;yuque-cookbook&#34; src=&#34;https://shub.weiyan.tech/mkdocs/yuque-cookbook.webp&#34; /&gt;&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/</link>
      <pubDate>Mon, 24 Jul 2023 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/</guid>
      
    </item>
    
    <item>
      <title>这个 R 包折腾了一天终于安装上了</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2023-06-14&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2023-06-14T00:00:00&#39;&gt;2023-06-14&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2023-08-24&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2023-08-24T11:16:13&#39;&gt;2023-08-24&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;事情起因于在推特看到关于&lt;code&gt;ggVennDiagram&lt;/code&gt;这个 R 包教程的一条推文，想着去复现一下，于是开始去安装，不料安装过程中出现了&lt;code&gt;sf&lt;/code&gt;这个依赖包始终安装不成功的一堆错误，于是有了这一篇文章，特此记录一下，也希望给遇到类似问题的小伙伴一个参考。&lt;/p&gt;
&lt;h2 id=&#34;第一个错误&#34;&gt;第一个错误&lt;a class=&#34;headerlink&#34; href=&#34;#第一个错误&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;首先说明一下，我用的 R 版本是 4.3.0，Linux 系统是 Red Hat 6.5。
最开始安装&lt;code&gt;sf&lt;/code&gt;这个 R 包遇到的第一个 error 是 GDAL/GEOS/Proj.4 版本不符合要求的提示。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FtlKgbSLps692sB0pokkqd6pQBm4.png&#34; /&gt;
于是，开始手动去安装 GDAL/GEOS/Proj.4，之所以选择基于普通用户手动去源码编译安装，主要一个原因是系统版本太老，第二出于安全考虑避免 root 带来的一系列麻烦。&lt;/p&gt;
&lt;p&gt;一番折腾，把 &lt;strong&gt;gdal-2.2.3+geos-3.4.0+proj-4.9.1&lt;/strong&gt; 都装好了，设置完 &lt;strong&gt;PATH+LD_LIBRARY_PATH&lt;/strong&gt; 后，却悲催的出现类似这个的报错：&lt;a href=&#34;https://github.com/r-spatial/sf/issues/678&#34;&gt;https://github.com/r-spatial/sf/issues/678&lt;/a&gt; —— 这是&lt;code&gt;sf&lt;/code&gt;包的一个错误！&lt;/p&gt;
&lt;p&gt;于是，问题变成了如何成功去安装&lt;code&gt;sf&lt;/code&gt;包，或者说如何解决&lt;code&gt;sf&lt;/code&gt;的 &lt;strong&gt;proj_conf_test.c:4:28: error: expected &amp;lsquo;)&amp;rsquo; before &amp;lsquo;const&amp;rsquo;&lt;/strong&gt; 安装错误。&lt;/p&gt;
&lt;h2 id=&#34;sf-包依赖与解决&#34;&gt;sf 包依赖与解决&lt;a class=&#34;headerlink&#34; href=&#34;#sf-包依赖与解决&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;在&lt;code&gt;sf&lt;/code&gt;包的 &lt;a href=&#34;https://github.com/r-spatial/sf#linux&#34;&gt;https://github.com/r-spatial/sf#linux&lt;/a&gt; 中明确提到了这个包需要依赖 GDAL/GEOS/Proj.4，具体版本要求如下。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;📢 &lt;strong&gt;For Unix-alikes, GDAL (&amp;gt;= 2.0.1), GEOS (&amp;gt;= 3.4.0) and Proj.4 (&amp;gt;= 4.8.0) are required.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;后来经过一番的折腾尝试，才发现：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;gdal-2.2.3+geos-3.4.0+proj-4.9.1&lt;/strong&gt; 出现类似&lt;a href=&#34;https://github.com/r-spatial/sf/issues/678&#34;&gt;这个&lt;/a&gt;的报错 —— &lt;strong&gt;proj_conf_test.c:4:28: error: expected &amp;lsquo;)&amp;rsquo; before &amp;lsquo;const&amp;rsquo;&lt;/strong&gt;！&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;gdal-2.2.0+geos-3.4.0+proj-4.8.0&lt;/strong&gt; 的组合可以解决以上遇到的问题！&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;手动源码安装的话，Proj.4 要先于 GDAL 安装，因为 GDAL 安装的时候需要指定 Proj.4 进行编译。&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;geos&#34;&gt;GEOS&lt;a class=&#34;headerlink&#34; href=&#34;#geos&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;要求 GEOS version &amp;gt;= 3.4.0；&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/home/shenweiyan/software/gcc-4.8.5/bin:&lt;span class=&#34;nv&#34;&gt;$PATH&lt;/span&gt;
wget&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://download.osgeo.org/geos/geos-3.4.0.tar.bz2
tar&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;xvjf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;geos-3.4.0.tar.bz2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-C&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;../build/
&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;../build/geos-3.4.0
./configure&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/home/shenweiyan/software/geos-3.4.0
make&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-j4&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;proj4&#34;&gt;Proj.4&lt;a class=&#34;headerlink&#34; href=&#34;#proj4&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;要求 Proj.4 (&amp;gt;= 4.8.0) ；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Proj.4 要先于 GDAL 安装！&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/home/shenweiyan/software/gcc-4.8.5/bin:&lt;span class=&#34;nv&#34;&gt;$PATH&lt;/span&gt;
wget&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://download.osgeo.org/proj/proj-4.8.0.tar.gz
tar&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;zvxf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;proj-4.8.0.tar.gz&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-C&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;../build/
&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;../build/proj-4.8.0/
./configure&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/home/shenweiyan/software/proj-4.8.0
make&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-j4&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;gdal&#34;&gt;GDAL&lt;a class=&#34;headerlink&#34; href=&#34;#gdal&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;要求 GDAL version &amp;gt;= 2.0.1；记住一定要加 &lt;strong&gt;&amp;ndash;with-static-proj4&lt;/strong&gt; 进行编译，否则 &lt;a href=&#34;https://github.com/r-spatial/sf/issues/678&#34;&gt;https://github.com/r-spatial/sf/issues/678&lt;/a&gt; 这个问题没法解决！！&lt;/li&gt;
&lt;li&gt;尝试了一下 &lt;strong&gt;gdal-2.2.3+proj-4.9.1&lt;/strong&gt; 组合，好像有问题（&lt;strong&gt;configure: error: GDALAllRegister not found in libgdal&lt;/strong&gt;）；&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FlfgB4IbTnfSdtgFBbXwTw9Upwms.png&#34; /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;但是 GDAL-2.2.0+proj-4.8.0 是可以的！&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nv&#34;&gt;$enabledevtoolset4&lt;/span&gt;
wget&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;http://download.osgeo.org/gdal/2.2.0/gdal-2.2.0.tar.gz
tar&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;zvxf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;gdal-2.2.0.tar.gz&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-C&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;../build/
&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;../build/gdal-2.2.0
./configure&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/home/shenweiyan/software/gdal-2.2.0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--with-static-proj4&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/home/shenweiyan/software/proj-4.8.0/
make&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-j4&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;最终安装命令&#34;&gt;最终安装命令&lt;a class=&#34;headerlink&#34; href=&#34;#最终安装命令&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/home/shenweiyan/software/gdal-2.2.0/bin:/home/shenweiyan/software/geos-3.4.0/bin:/home/shenweiyan/software/proj-4.8.0/bin:&lt;span class=&#34;nv&#34;&gt;$PATH&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;LD_LIBRARY_PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/home/shenweiyan/software/gdal-2.2.0/lib:/home/shenweiyan/software/geos-3.4.0/lib:/home/shenweiyan/software/proj-4.8.0/lib:&lt;span class=&#34;nv&#34;&gt;$LD_LIBRARY_PATH&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;出现 &lt;strong&gt;configure: error: libproj not found in standard or given locations.&lt;/strong&gt; 异常，参考：&lt;a href=&#34;https://github.com/r-spatial/sf/issues/1471&#34;&gt;https://github.com/r-spatial/sf/issues/1471&lt;/a&gt; 得到解决：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# configure: error: libproj not found in standard or given locations.&lt;/span&gt;
options&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;repos&amp;quot;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;c&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;CRAN&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;https://mirrors.tuna.tsinghua.edu.cn/CRAN/&amp;quot;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;))&lt;/span&gt;
install.packages&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;sf&amp;#39;&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;configure.args&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;--with-gdal-config=/home/shenweiyan/software/gdal-2.2.0/bin/gdal-config --with-geos-config=/home/shenweiyan/software/geos-3.4.0/bin/geos-config --with-proj-include=/home/shenweiyan/software/proj-4.8.0/include --with-proj-lib=/home/shenweiyan/software/proj-4.8.0/lib&amp;#39;&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;configure.vars&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;GDAL_DATA=/home/shenweiyan/software/gdal-2.2.0/share/gdal&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;使用说明&#34;&gt;使用说明&lt;a class=&#34;headerlink&#34; href=&#34;#使用说明&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;安装完&lt;code&gt;sf&lt;/code&gt;和&lt;code&gt;ggVennDiagram&lt;/code&gt; 后，如果要使用这两个包，则需要：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;LD_LIBRARY_PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/home/shenweiyan/software/gdal-2.2.0/lib:/home/shenweiyan/software/geos-3.4.0/lib:/home/shenweiyan/software/proj-4.8.0/lib:&lt;span class=&#34;nv&#34;&gt;$LD_LIBRARY_PATH&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fk8F_-rrGUUjSv4dynyiGMZXOteH.png&#34; /&gt;&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E7%94%9F%E7%89%A9%E4%BF%A1%E6%81%AF/%E8%BD%AF%E4%BB%B6/2023-06-14-r-sf/</link>
      <pubDate>Wed, 14 Jun 2023 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E7%94%9F%E7%89%A9%E4%BF%A1%E6%81%AF/%E8%BD%AF%E4%BB%B6/2023-06-14-r-sf/</guid>
      
    </item>
    
    <item>
      <title>使用 John The Ripper 破解密码</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2023-05-16&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2023-05-16T00:00:00&#39;&gt;2023-05-16&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2023-05-16&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2023-05-16T16:52:13&#39;&gt;2023-05-16&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;越是简单的密码越容易破解。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/home/shenweiyan/john-1.9.0/run/john
John&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Ripper&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;password&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;cracker,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;version&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.9.0
Copyright&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;c&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1996&lt;/span&gt;-2019&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;by&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Solar&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Designer
Homepage:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;http://www.openwall.com/john/

Usage:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;john&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;OPTIONS&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;PASSWORD-FILES&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
--single&lt;span class=&#34;w&#34;&gt;                   &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;single crack&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mode
--wordlist&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;FILE&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--stdin&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;wordlist&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mode,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;read&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;words&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FILE&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;or&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;stdin
--rules&lt;span class=&#34;w&#34;&gt;                    &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;enable&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;word&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mangling&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;rules&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;wordlist&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mode
--incremental&lt;span class=&#34;o&#34;&gt;[=&lt;/span&gt;MODE&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;incremental&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mode&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;using&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;section&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;MODE&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
--external&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;MODE&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;external&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mode&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;or&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;word&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;filter
--stdout&lt;span class=&#34;o&#34;&gt;[=&lt;/span&gt;LENGTH&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;just&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;output&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;candidate&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;passwords&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;cut&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;at&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;LENGTH&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
--restore&lt;span class=&#34;o&#34;&gt;[=&lt;/span&gt;NAME&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;           &lt;/span&gt;restore&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;an&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;interrupted&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;session&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;called&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;NAME&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
--session&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;NAME&lt;span class=&#34;w&#34;&gt;             &lt;/span&gt;give&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;a&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;new&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;session&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;NAME
--status&lt;span class=&#34;o&#34;&gt;[=&lt;/span&gt;NAME&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;print&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;status&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;a&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;session&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;called&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;NAME&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
--make-charset&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;FILE&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;make&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;a&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;charset,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FILE&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;will&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;be&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;overwritten
--show&lt;span class=&#34;w&#34;&gt;                     &lt;/span&gt;show&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;cracked&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;passwords
--test&lt;span class=&#34;o&#34;&gt;[=&lt;/span&gt;TIME&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;              &lt;/span&gt;run&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tests&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;and&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;benchmarks&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;TIME&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;seconds&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;each
--users&lt;span class=&#34;o&#34;&gt;=[&lt;/span&gt;-&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;LOGIN&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;UID&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;,..&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;do&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;load&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;this&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;these&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;user&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;s&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;only
--groups&lt;span class=&#34;o&#34;&gt;=[&lt;/span&gt;-&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;GID&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;,..&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;load&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;users&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;not&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;this&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;these&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;group&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;s&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;only
--shells&lt;span class=&#34;o&#34;&gt;=[&lt;/span&gt;-&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;SHELL&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;,..&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;load&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;users&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;out&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;this&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;these&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;shell&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;s&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;only
--salts&lt;span class=&#34;o&#34;&gt;=[&lt;/span&gt;-&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;N&lt;span class=&#34;w&#34;&gt;               &lt;/span&gt;load&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;salts&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;out&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;at&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;least&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;N&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;passwords&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;only
--save-memory&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;LEVEL&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;enable&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;memory&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;saving,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;at&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;LEVEL&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;..3
--node&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;MIN&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-MAX&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;/TOTAL&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;this&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;node&lt;span class=&#34;err&#34;&gt;&amp;#39;&lt;/span&gt;s&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;number&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;range&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;out&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;TOTAL&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;count
--fork&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;N&lt;span class=&#34;w&#34;&gt;                   &lt;/span&gt;fork&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;N&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;processes
--format&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;NAME&lt;span class=&#34;w&#34;&gt;              &lt;/span&gt;force&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;hash&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;NAME:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;descrypt/bsdicrypt/md5crypt/
&lt;span class=&#34;w&#34;&gt;                           &lt;/span&gt;bcrypt/LM/AFS/tripcode/dummy/crypt
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h1 id=&#34;参考资料&#34;&gt;参考资料&lt;a class=&#34;headerlink&#34; href=&#34;#参考资料&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.hgostand.com/?p=1184&#34;&gt;使用 John The Ripper 破解密码 - 氢壳-HGOSTAND&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://guoflight.github.io/posts/47950/&#34;&gt;/etc/shadow 文件破解，密码破解，md5，SHA256，SHA512 破解&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%AE%89%E5%85%A8%E7%AE%A1%E7%90%86/2023-05-16-wuxfef4ulf24w1op/</link>
      <pubDate>Tue, 16 May 2023 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%AE%89%E5%85%A8%E7%AE%A1%E7%90%86/2023-05-16-wuxfef4ulf24w1op/</guid>
      
    </item>
    
    <item>
      <title>[micro]mamba 学习笔记</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2023-04-19&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2023-04-19T00:00:00&#39;&gt;2023-04-19&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2023-04-19&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2023-04-19T15:25:51&#39;&gt;2023-04-19&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;由于 conda 的慢，现准备转移到 [micro]mamba，这是学习和使用过程中得一些笔记。&lt;/p&gt;
&lt;h1 id=&#34;安装&#34;&gt;安装&lt;a class=&#34;headerlink&#34; href=&#34;#安装&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;官方的安装文档：&lt;a href=&#34;https://mamba.readthedocs.io/en/latest/installation.html&#34;&gt;https://mamba.readthedocs.io/en/latest/installation.html&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;mamba&#34;&gt;mamba&lt;a class=&#34;headerlink&#34; href=&#34;#mamba&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&#34;fresh-install&#34;&gt;Fresh install&lt;a class=&#34;headerlink&#34; href=&#34;#fresh-install&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;We strongly recommend to start from Mambaforge, a community project of the conda-forge community.
You can download &lt;a href=&#34;https://github.com/conda-forge/miniforge#mambaforge&#34;&gt;Mambaforge&lt;/a&gt; for Windows, macOS and Linux.
Mambaforge comes with the popular conda-forge channel preconfigured, but you can modify the configuration to use any channel you like.&lt;/p&gt;
&lt;h2 id=&#34;micromamba&#34;&gt;micromamba&lt;a class=&#34;headerlink&#34; href=&#34;#micromamba&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;mkdir&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/ifs1/micromamba
&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/ifs1/micromamba
curl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-Ls&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://micro.mamba.pm/api/micromamba/linux-64/latest&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tar&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-xvj&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bin/micromamba
sudo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ln&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-s&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/ifs1/micromamba/bin/micromamba&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/local/bin
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h1 id=&#34;使用&#34;&gt;使用&lt;a class=&#34;headerlink&#34; href=&#34;#使用&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;micromamba&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-r&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/ifs1/micromamba&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;create&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-n&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;singularity&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-c&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conda-forge&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;singularity
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FoNAPrE0dElBxqdCrxRL6Dv6kIEW.png&#34; /&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;MAMBA_ROOT_PREFIX&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/ifs1/micromamba
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;micromamba&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;run&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-n&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;singularity&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;singularity
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E8%99%9A%E6%8B%9F%E7%8E%AF%E5%A2%83/2023-04-19-tkrdu8xnidryrmqa/</link>
      <pubDate>Wed, 19 Apr 2023 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E8%99%9A%E6%8B%9F%E7%8E%AF%E5%A2%83/2023-04-19-tkrdu8xnidryrmqa/</guid>
      
    </item>
    
    <item>
      <title>Singularity 初探之安装部署与避坑</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2023-04-18&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2023-04-18T00:00:00&#39;&gt;2023-04-18&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2023-04-26&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2023-04-26T15:02:49&#39;&gt;2023-04-26&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id=&#34;背景&#34;&gt;背景&lt;a class=&#34;headerlink&#34; href=&#34;#背景&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;怎么样高效的搭建分析流程且能保证分析流程稳定运行的使用效果呢？目前主流的是 &lt;strong&gt;conda&lt;/strong&gt; 和 &lt;strong&gt;容器技术(container)&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;conda 在很多文章中中已经介绍，在这不再过多叙述。虽然 &lt;strong&gt;conda 能解决大部分生信软件安装问题&lt;/strong&gt;，但是若&lt;strong&gt;软件安装多了&lt;/strong&gt;，会出现&lt;strong&gt;兼容性&lt;/strong&gt;问题以及 &lt;strong&gt;&amp;ldquo;臃肿&amp;rdquo;&lt;/strong&gt; 现象，为此，引入容器技术 (container) 来解决这些问题。&lt;/p&gt;
&lt;p&gt;在容器技术中，&lt;strong&gt;docker&lt;/strong&gt; 和 &lt;strong&gt;singularity&lt;/strong&gt; 是常用的容器软件。但 &lt;strong&gt;docker 不太适合 HPC 环境&lt;/strong&gt;。因为在调度管理器上容器无法施加资源限制、多用户（非 root 用户）使用时会出现权限问题、而且 docker 会存在一些不必要的资源开销。&lt;/p&gt;
&lt;p&gt;为此，引进 &lt;strong&gt;singularity&lt;/strong&gt; 容器来解决 docker 的一些缺点。首先，&lt;strong&gt;singularity 可以兼容 docker 的镜像&lt;/strong&gt;，同时构建出的镜像可以很容易进行拷贝和转移，且体积更小；此外 singularity 假设用户在一个有 root 权限的系统上构建容器，在一个没有 root 权限的系统上运行容器，兼顾了数据的安全性和便捷性，更加符合实际的应用场景。&lt;/p&gt;
&lt;p&gt;🔗 来源：《&lt;a href=&#34;https://mp.weixin.qq.com/s/dILzbYZhkzqvDazj4GAHlw&#34;&gt;Singularity——生信流程搭建的幸运儿&lt;/a&gt;——&amp;ldquo;生信小尧&amp;rdquo;公众号》&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;br/&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Singularity 是一种专为科学计算和 HPC 环境设计的容器技术，具有与 HPC 环境的无缝集成、高度的可移植性和兼容性、安全性和可控性等优势。在处理大规模数据、模拟和深度学习等领域中，具有广泛的应用价值。&lt;/p&gt;
&lt;p&gt;🔗 来源：《&lt;a href=&#34;https://mp.weixin.qq.com/s/PU3orRKAT5XziBsyJdhP3Q&#34;&gt;Singularity 使用真简单&lt;/a&gt;！——&amp;ldquo;HPCLIB&amp;rdquo;公众号》&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;安装&#34;&gt;安装&lt;a class=&#34;headerlink&#34; href=&#34;#安装&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;最开始选择从 GitHub 的源码库 &lt;a href=&#34;https://github.com/sylabs/singularity/&#34;&gt;https://github.com/sylabs/singularity/&lt;/a&gt; 中进行&lt;strong&gt;非 root 的普通用户&lt;/strong&gt;手动安装。
服务器系统版本和内核版本：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;lsb_release&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-a
LSB&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Version:&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;:base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch
Distributor&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ID:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;RedHatEnterpriseServer
Description:&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;Red&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Hat&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Enterprise&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Linux&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Server&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;release&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;6&lt;/span&gt;.5&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;Santiago&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
Release:&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;6&lt;/span&gt;.5
Codename:&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;Santiago
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;uname&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-a
Linux&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;log01&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;.6.32-431.el6.x86_64&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;#1 SMP Sun Nov 10 22:19:54 EST 2013 x86_64 x86_64 x86_64 GNU/Linux&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;出现了几个问题：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;singularity 2.5.0 及以上要求升级 Linux 内核，否则&lt;code&gt;configure&lt;/code&gt;会出现错误：&lt;br/&gt;
   &lt;strong&gt;The &lt;code&gt;NO_NEW_PRIVS&lt;/code&gt; bit is supported since Linux 3.5！&lt;/strong&gt;
   &lt;br/&gt; 
   &lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;./configure&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/home/shenweiyan/software/Singularity-2.5.0
checking&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;feature:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;NO_NEW_PRIVS...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;no

ERROR!!!!!!

This&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;host&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;does&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;support&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;NO_NEW_PRIVS&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;prctl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;functions!
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;singularity 2.4.6 虽然能在&lt;strong&gt;非 root 的普通用户&lt;/strong&gt;手动安装下安装成功，但很多功能不支持，甚至导致错误：  &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在 pull 下载一些镜像时，会引发 urllib2.URLError 的 ssl 异常：&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$ singularity pull shub://vsoch/hello-world
测试在嵌套列表中插入代码

最后一行
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;build 时候，要求安装 squashfs-tools：&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;嵌套列表测试&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;singularity&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;build&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;hello-world.simg&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;shub://vsoch/hello-world
ERROR:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;You&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;must&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;squashfs-tools&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;build&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;images
ABORT:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Aborting&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;RETVAL&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;255&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;鉴于以上问题，最后选择了通过 mamba/conda 的方式安装，并最终安装成功 3.7.1 版本。
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mamba&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;create&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-n&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;singularity&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-c&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conda-forge&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;singularity
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;singularity&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;version
&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;.7.1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;测试了很多次才发现，基于 conda/mamba 安装的 singularity，使用上多少都会出现各种问题（如下面）。&lt;/p&gt;
&lt;h2 id=&#34;setuid&#34;&gt;SetUID&lt;a class=&#34;headerlink&#34; href=&#34;#setuid&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;singularity&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bi.admin@log01&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;16&lt;/span&gt;:14:41&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/home/bi.admin/Singularity
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;singularity&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;build&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--sandbox&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;lolcow/&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;library://sylabs-jms/testing/lolcow
INFO:&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;Starting&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;build...
INFO:&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;Downloading&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;library&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;image
&lt;span class=&#34;m&#34;&gt;87&lt;/span&gt;.9MiB&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;87&lt;/span&gt;.9MiB&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[==============================================================================]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;%&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;214&lt;/span&gt;.0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;KiB/s&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;0s
INFO:&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;Verifying&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bootstrap&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;image&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/home/bi.admin/.singularity/cache/library/sha256.5022b5e7c7249c40119a875c1ace0700ced4099e077acc75d0132190254563a4
WARNING:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;integrity:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;signature&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;found&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;object&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;group&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
WARNING:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Bootstrap&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;image&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;could&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;be&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;verified,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;but&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;build&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;will&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;continue&lt;/span&gt;.
ERROR:&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;unpackSIF&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;failed:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;root&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;filesystem&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;extraction&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;failed:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;could&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;extract&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;squashfs&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;data,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;unsquashfs&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;found
FATAL:&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;While&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;performing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;build:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;packer&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;failed&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pack:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;root&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;filesystem&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;extraction&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;failed:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;could&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;extract&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;squashfs&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;data,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;unsquashfs&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;found
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@log01&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Singularity&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# singularity build --sandbox lolcow/ library://sylabs-jms/testing/lolcow&lt;/span&gt;
INFO:&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;Starting&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;build...
INFO:&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;Downloading&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;library&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;image
&lt;span class=&#34;m&#34;&gt;87&lt;/span&gt;.9MiB&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;87&lt;/span&gt;.9MiB&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[==============================================================================]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;%&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;205&lt;/span&gt;.2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;KiB/s&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;0s
INFO:&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;Verifying&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bootstrap&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;image&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/root/.singularity/cache/library/sha256.5022b5e7c7249c40119a875c1ace0700ced4099e077acc75d0132190254563a4
WARNING:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;integrity:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;signature&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;found&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;object&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;group&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
WARNING:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Bootstrap&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;image&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;could&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;be&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;verified,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;but&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;build&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;will&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;continue&lt;/span&gt;.
ERROR:&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;unpackSIF&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;failed:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;root&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;filesystem&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;extraction&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;failed:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;could&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;extract&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;squashfs&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;data,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;unsquashfs&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;found
FATAL:&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;While&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;performing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;build:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;packer&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;failed&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pack:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;root&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;filesystem&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;extraction&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;failed:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;could&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;extract&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;squashfs&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;data,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;unsquashfs&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;found

&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@log01&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Singularity&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# singularity exec ubuntu_20.04.sif date&lt;/span&gt;
WARNING:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;underlay&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/etc/localtime&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;required&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;more&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;than&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;50&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;67&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mounts
FATAL:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;kernel&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;too&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;old
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;root/sudo 用户才能 build 建立镜像沙箱？说好的不依赖于 root 呢？&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;以下链接内容说明了非 root 用户也可以安装和使用 singularity：&lt;br/&gt;
  &lt;a href=&#34;https://docs.sylabs.io/guides/3.5/admin-guide/installation.html#install-nonsetuid&#34;&gt;https://docs.sylabs.io/guides/3.5/admin-guide/installation.html#install-nonsetuid&lt;/a&gt;
&lt;a href=&#34;https://github.com/apptainer/singularity/issues/1258&#34;&gt;issues 1258: Does Singularity support installation by user without root privileges?&lt;/a&gt;
但有要求：&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;内核版本 &amp;gt;=3.8 - &lt;a href=&#34;https://apptainer.org/docs/admin/main/user_namespace.html&#34;&gt;https://apptainer.org/docs/admin/main/user_namespace.html&lt;/a&gt;&lt;br/&gt;
To allow unprivileged creation of user namespaces a kernel &amp;gt;=3.8 is required, with &amp;gt;=4.18 being recommended due to support for unprivileged mounting of FUSE filesystems (needed for example for mounting SIF files). The equivalent recommendation on RHEL7 is &amp;gt;=3.10.0-1127 from release 7.8, where unprivileged mounting of FUSE filesystems was backported. To use unprivileged overlayFS for persistent overlays, kernel &amp;gt;=5.11 is recommended, but if that’s not available then Apptainer will use fuse-overlayfs instead. That feature has not been backported to RHEL7.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;默认安装要求安装文件具备 SetUID 权限，这一点暂时没能理解！！！&lt;br/&gt;
&lt;a href=&#34;http://c.biancheng.net/view/868.html&#34;&gt;Linux SetUID（SUID）文件特殊权限用法详解&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;user-namespace&#34;&gt;User Namespace&lt;a class=&#34;headerlink&#34; href=&#34;#user-namespace&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Singularity 如果不适用 SetUID，那它通过普通用户安装运行是要求开启 User Namespace！&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;When singularity/SingularityCE does not use setuid all container execution will use a user namespace.&lt;/p&gt;
&lt;p&gt;🔗 来源：&lt;a href=&#34;https://docs.sylabs.io/guides/3.8/admin-guide/user_namespace.html&#34;&gt;https://docs.sylabs.io/guides/3.8/admin-guide/user_namespace.html&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img alt=&#34;701e36aec39a4a3be99fe11548aa4da.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FkpKd2AaoQ5kl1HM67TWhEeOrzoq.jpeg&#34; /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;📢 知识点 - User namespace&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;User namespace 是 Linux 3.8 新增的一种 namespace，用于隔离安全相关的资源，包括 &lt;strong&gt;user IDs&lt;/strong&gt; and &lt;strong&gt;group IDs&lt;/strong&gt;，&lt;strong&gt;keys&lt;/strong&gt;, 和 &lt;strong&gt;capabilities&lt;/strong&gt;。同样一个用户的 user ID 和 group ID 在不同的 user namespace 中可以不一样(与 PID nanespace 类似)。换句话说，一个用户可以在一个 user namespace 中是普通用户，但在另一个 user namespace 中是超级用户。&lt;/p&gt;
&lt;p&gt;User namespace 可以嵌套(目前内核控制最多 32 层)，除了系统默认的 user namespace 外，所有的 user namespace 都有一个父 user namespace，每个 user namespace 都可以有零到多个子 user namespace。 当在一个进程中调用 unshare 或者 clone 创建新的 user namespace 时，当前进程原来所在的 user namespace 为父 user namespace，新的 user namespace 为子 user namespace。&lt;/p&gt;
&lt;p&gt;🔗 来源：《&lt;a href=&#34;https://www.cnblogs.com/sparkdev/p/9462838.html&#34;&gt;Linux Namespace: User&lt;/a&gt; - 博客园》&lt;/p&gt;
&lt;p&gt;在 CentOS 内核 3.8 或更高版本中，添加了 user namespaces （户名命名空间）功能。但是，该功能默认情况下是禁用的，原因是 Red Hat 希望该功能在社区中孵化更长时间，以确保该功能的稳定性和安全性。目前越来越多的软件开始涉及该功能，例如 Docker 等。&lt;/p&gt;
&lt;p&gt;🔗 来源：《&lt;a href=&#34;https://www.123si.org/os/article/centos-7-enable-user-namespaces/&#34;&gt;CentOS 7 启用 user namespaces（用户命名空间）&lt;/a&gt;——123si 博客》&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;在 CentOS 7.7 + 3.10.0-1062.1.1.el7.x86_64 内核下使用&lt;code&gt;conda create -n singularity -c conda-forge singularity&lt;/code&gt;安装了 singularity-3.8.6 后发现，pull/shell/exec 都没问题，但 build 会出现异常：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;singularity&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pull&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;docker://ubuntu:20.04
INFO:&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;Converting&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;OCI&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;blobs&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;SIF&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;format
INFO:&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;Starting&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;build...
Getting&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;image&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;signatures
Copying&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;blob&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ca1778b69356&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;
Copying&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;config&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;88bd689171&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;
Writing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;manifest&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;image&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;destination
Storing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;signatures
&lt;span class=&#34;m&#34;&gt;2023&lt;/span&gt;/04/19&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;09&lt;/span&gt;:59:37&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;info&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;unpack&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;layer:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sha256:ca1778b6935686ad781c27472c4668fc61ec3aeb85494f72deb1921892b9d39e
INFO:&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;Creating&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;SIF&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file...

$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;singularity&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;build&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--sandbox&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;blast&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ubuntu_20.04.sif
INFO:&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;Starting&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;build...
INFO:&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;Verifying&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bootstrap&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;image&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ubuntu_20.04.sif
WARNING:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;integrity:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;signature&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;found&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;object&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;group&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
WARNING:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Bootstrap&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;image&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;could&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;be&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;verified,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;but&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;build&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;will&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;continue&lt;/span&gt;.
ERROR:&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;unpackSIF&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;failed:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;root&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;filesystem&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;extraction&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;failed:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;could&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;extract&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;squashfs&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;data,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;unsquashfs&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;found
FATAL:&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;While&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;performing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;build:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;packer&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;failed&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pack:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;root&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;filesystem&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;extraction&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;failed:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;could&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;extract&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;squashfs&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;data,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;unsquashfs&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;found
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;使用&lt;code&gt;yum install squashfs-tools&lt;/code&gt;安装了&lt;code&gt;unsquashfs&lt;/code&gt;并添加到 $PATH 中问题依然没法解决！！！
&lt;img alt=&#34;16f4cadef5c03cdafaae5847f3e0672.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FkbnpUiB0x8v8X1EhUpD3Xm7dznd.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;源码编译&#34;&gt;源码编译&lt;a class=&#34;headerlink&#34; href=&#34;#源码编译&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;最后还是选择从源码安装。&lt;/p&gt;
&lt;h4 id=&#34;安装-go&#34;&gt;安装 Go&lt;a class=&#34;headerlink&#34; href=&#34;#安装-go&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;wget&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://dl.google.com/go/go1.20.1.linux-amd64.tar.gz
tar&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-xzvf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;go1.20.1.linux-amd64.tar.gz
sudo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ln&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-s&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;go&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/local/bin
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4 id=&#34;安装-singularity&#34;&gt;安装 singularity&lt;a class=&#34;headerlink&#34; href=&#34;#安装-singularity&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;如果想要非 root 的普通用户也能正常使用，mconfig 时候需要加上 &lt;strong&gt;&amp;ndash;without-suid&lt;/strong&gt;。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;wget&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://github.com/apptainer/singularity/releases/download/v3.8.7/singularity-3.8.7.tar.gz
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tar&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;zvxf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;singularity-3.8.7.tar.gz
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;singularity-3.8.7
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;./mconfig&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/ifs1/singularity/singularity-3.8.7&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--without-suid
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-C&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;./builddir
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-C&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;./builddir&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4 id=&#34;使用测试&#34;&gt;使用测试&lt;a class=&#34;headerlink&#34; href=&#34;#使用测试&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;初步测试 singularity build 也能正常使用了。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fg7yJ8XqLya8z_7rI38Te4cVl3YG.png&#34; /&gt;&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/Singularity/2023-04-18-try-singularity/</link>
      <pubDate>Tue, 18 Apr 2023 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/Singularity/2023-04-18-try-singularity/</guid>
      
    </item>
    
    <item>
      <title>BLAT 和 UCSC 系列工具源码编译安装</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2023-03-29&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2023-03-29T00:00:00&#39;&gt;2023-03-29&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2023-03-29&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2023-03-29T14:14:39&#39;&gt;2023-03-29&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;在 &lt;a href=&#34;https://hgdownload.cse.ucsc.edu/admin/exe/linux.x86_64/&#34;&gt;https://hgdownload.cse.ucsc.edu/admin/exe/linux.x86_64/&lt;/a&gt; 这个页面中，UCSC 官方已经提供了很多已经编译好可以直接在 Unix/Linux 直接使用的 UCSC Genome Browser 的 Utils 工具集。
但对于老旧的服务器，如 RHEL 6.X，这些编译好的工具可能会出现报错：
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fu-E8bF-CKs3bw5pUMqihPL8nOEI.png&#34; /&gt;
因此，可以通过源码编译安装的方法来解决。&lt;/p&gt;
&lt;h2 id=&#34;源码文件&#34;&gt;源码文件&lt;a class=&#34;headerlink&#34; href=&#34;#源码文件&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;UCSC Genome Browser 工具集对应的源码放在 &lt;a href=&#34;https://hgdownload.cse.ucsc.edu/admin/&#34;&gt;https://hgdownload.cse.ucsc.edu/admin/&lt;/a&gt;，对应于 jksrc.vNNN.zip 文件。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FoPLAPImyAFTqOXjsyHVUXtGvSuO.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;编译安装&#34;&gt;编译安装&lt;a class=&#34;headerlink&#34; href=&#34;#编译安装&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;编译安装可以参考 &lt;a href=&#34;https://github.com/ucscGenomeBrowser/kent/blob/master/README&#34;&gt;https://github.com/ucscGenomeBrowser/kent/blob/master/README&lt;/a&gt; 的说明。
个人在 RHEL 6.5 x86_64 服务器中编译 jksrc.v400，执行&lt;code&gt;make utils&lt;/code&gt;一步无法最终成功(错误如下)，但至少能在安装目录下得到一堆包括 blat/twoBitToFa/bigWigToWig 在内的可执行程序(虽然不是完全成功，但至少得到想要的程序)。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;unzip&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;jksrc.v400.zip
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;kent/src
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;vi&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;inc/common.mk&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;##设置 BINDIR = /home/shenweiyan/software/UCSCSuite&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$MACHTYPE&lt;/span&gt;
x86_64-redhat-linux-gnu
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;MACHTYPE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;x86_64
x86_64
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make
......
../../lib/x86_64/jkweb.a&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;windowsToAscii.o&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;In&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;windowsToAscii&lt;span class=&#34;s1&#34;&gt;&amp;#39;:&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;/Bioinfo/SRC/build/kent/src/lib/windowsToAscii.c:13: undefined reference to `libiconv_open&amp;#39;&lt;/span&gt;
/Bioinfo/SRC/build/kent/src/lib/windowsToAscii.c:19:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;undefined&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;reference&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;libiconv&lt;span class=&#34;s1&#34;&gt;&amp;#39;&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;collect2: ld returned 1 exit status&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;make[2]: *** [/home/shenweiyan/software/UCSCSuite/pslLiftSubrangeBlat] Error 1&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;make[2]: Leaving directory `/Bioinfo/SRC/build/kent/src/utils/pslLiftSubrangeBlat&amp;#39;&lt;/span&gt;
make&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;***&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;pslLiftSubrangeBlat.all&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Error&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;
make&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Leaving&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;directory&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;/Bioinfo/SRC/build/kent/src/utils&lt;span class=&#34;err&#34;&gt;&amp;#39;&lt;/span&gt;
make:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;***&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;utils&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Error&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Software Requirements 参考：&lt;a href=&#34;https://genome.ucsc.edu/goldenpath/help/mirrorManual.html&#34;&gt;Manual installation of the UCSC Genome Browser on a Unix server&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;blat-安装&#34;&gt;BLAT 安装&lt;a class=&#34;headerlink&#34; href=&#34;#blat-安装&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;📢 参考：《&lt;a href=&#34;https://nix-bio.blogspot.com/2013/10/installing-blat-and-blast.html&#34;&gt;Installing BLAT and BLAST&lt;/a&gt;》&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It&amp;rsquo;s been a while since I last installed BLAT and when I went to the download directory at UCSC: &lt;a href=&#34;http://users.soe.ucsc.edu/~kent/src/&#34;&gt;http://users.soe.ucsc.edu/~kent/src/&lt;/a&gt; I found that the latest blast is now version 35 and that the code to download was: &lt;a href=&#34;http://users.soe.ucsc.edu/~kent/src/blatSrc35.zip&#34;&gt;blatSrc35.zip&lt;/a&gt;. However, you can also get pre-compiled binaries at: &lt;a href=&#34;http://hgdownload.cse.ucsc.edu/admin/exe/&#34;&gt;http://hgdownload.cse.ucsc.edu/admin/exe/&lt;/a&gt; and that there was a linux x86_64 executable for my architecture available at: &lt;a href=&#34;http://hgdownload.cse.ucsc.edu/admin/exe/linux.x86_64/blat/&#34;&gt;http://hgdownload.cse.ucsc.edu/admin/exe/linux.x86_64/blat/&lt;/a&gt;. Though YYMV, BLAT can be a little bit of a tricky beast to get going, so I decided to download the source code and compile that.&lt;/p&gt;
&lt;p&gt;I will be compiling this code as &amp;lsquo;root&amp;rsquo; as a system tool in&lt;code&gt;/usr/local/src&lt;/code&gt;, so do not scream at me for that.&lt;/p&gt;
&lt;p&gt;First I created an&lt;code&gt;/usr/local/src/blat&lt;/code&gt;directory and I copied the blatSrc35.zip file into that.&lt;/p&gt;
&lt;p&gt;Next I used&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;unzip&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;blatSrc35.zip
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;to unpack the archive. This gives a directory blatSrc now move into that directory.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;#cd blatSrc&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;before you begin read the README file that comes with the source code.&lt;/p&gt;
&lt;p&gt;One thing about building blat is that you need to set the MACHTYPE variable so that the BLAT sources know what type of machine you are compiling the software on.&lt;/p&gt;
&lt;p&gt;on most *nix machines, typing&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$MACHTYPE&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;will return the machine architecture type.&lt;/p&gt;
&lt;p&gt;On my CentOS 6 based system this gave:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;x86_64-redhat-linux-gnu
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;However, what BLAT requires is the &lt;strong&gt;&amp;lsquo;short value&amp;rsquo;&lt;/strong&gt; (ie the first part of the MACHTYPE). To correct this, in the bash shell type (change this to the correct MACHTYPE for your system)&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nv&#34;&gt;MACHTYPE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;x86_64
&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;MACHTYPE
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;now running the command:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$MACHTYPE&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;should give the correct short form of the MACHTYPE:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;x86_64
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;now create the directory&lt;code&gt;lib/$MACHTYPE&lt;/code&gt;in the source tree. ie:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;mkdir&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;lib/&lt;span class=&#34;nv&#34;&gt;$MACHTYPE&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;For my machine, &lt;code&gt;lib/x86_64&lt;/code&gt;already existed, so I did not have to do this, but this is not the case for all architectures.&lt;/p&gt;
&lt;p&gt;The BLAT code assumes that you are compiling BLAT as a non-privileged (ie non-root) user. As a result, you must create the directory for the executables to go into:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;mkdir&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~/bin/&lt;span class=&#34;nv&#34;&gt;$MACHTYPE&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;If you are installing as a normal user, edit your&lt;code&gt;.bashrc&lt;/code&gt;to add the following (change the x86_64 to be your MACHTYPE):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;~/bin/x86_64::&lt;span class=&#34;nv&#34;&gt;$PATH&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;For me, though, this was not good enough. I wanted the executables in&lt;code&gt;/usr/local/bin&lt;/code&gt;where all my other code goes. As a result I did some hackery&amp;hellip;&lt;/p&gt;
&lt;p&gt;There is a master make template in the inc directory called common.mk and I edited this file with the command:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;vi&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;inc/common.mk
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;I replaced the line&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nv&#34;&gt;BINDIR&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;HOME&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;/bin/&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;MACHTYPE&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;with&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nv&#34;&gt;BINDIR&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/bin
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;saved and quit (as this is in my path, I do not need to do anything else)&lt;/p&gt;
&lt;p&gt;All the preparation is now done and you can create the blat executables by going into the toplevel of the blat source tree (for me it was /usr/local/src/blat/blatSrc, but change to wherever you unpacked blat into).&lt;/p&gt;
&lt;p&gt;Now simply run the command:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;make
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;to compile the code.&lt;/p&gt;
&lt;p&gt;Blat installed cleanly and the executables were all neatly placed in&lt;code&gt;/usr/local/bin/x86_64&lt;/code&gt;, just like I wanted.&lt;/p&gt;
&lt;p&gt;now simply running the command:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;blat
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;on the command line gives me information on blat and sample usage.&lt;/p&gt;
&lt;p&gt;Blat is installed and it&amp;rsquo;s installed properly in my system code tree!!!&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E7%94%9F%E7%89%A9%E4%BF%A1%E6%81%AF/%E8%BD%AF%E4%BB%B6/2023-03-29-nng7czgi43iwaw6d/</link>
      <pubDate>Wed, 29 Mar 2023 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E7%94%9F%E7%89%A9%E4%BF%A1%E6%81%AF/%E8%BD%AF%E4%BB%B6/2023-03-29-nng7czgi43iwaw6d/</guid>
      
    </item>
    
    <item>
      <title>微信 | 解决企业微信启动报错 0x0000142</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2023-03-28&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2023-03-28T00:00:00&#39;&gt;2023-03-28&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2023-04-10&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2023-04-10T10:15:52&#39;&gt;2023-04-10&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;在公司 Win10 x64 的电脑使用企业微信，一直都被企业微信启动报错 &lt;strong&gt;0x0000142&lt;/strong&gt; 无法打开这个问题&lt;a href=&#34;https://www.yuque.com/r/notes/share/c4c8db4e-c6fe-4d41-b8b0-4484defb6ade&#34;&gt;&lt;strong&gt;困扰了很久&lt;/strong&gt;&lt;/a&gt;。    &lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FlGSQU2kMVAFkkbkR2dnknWRzvUL.png&#34; /&gt;    &lt;/p&gt;
&lt;p&gt;今天，终于找到了一个靠谱的解决方案。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;📢 以下内容来源于《&lt;a href=&#34;https://blog.csdn.net/qq_35132089/article/details/128632145&#34;&gt;解决企业微信启动报错：0x0000142 无法打开&lt;/a&gt; - CSDN》，作者李晋江    &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;操作系统：&lt;/strong&gt; Win10 x64  &lt;br /&gt;
&lt;strong&gt;WXWork：&lt;/strong&gt; 4.0.20.6020    &lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;1-问题描述&#34;&gt;1. 问题描述&lt;a class=&#34;headerlink&#34; href=&#34;#1-问题描述&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;不知道从啥时候开始，打开企业微信会报错（见下图），报错代码是：0x0000142，不过我点击确定，多试几次也能正常打开，就是有点麻烦，今天突然要打开企业微信给同事远程操作，死活启动不了，一直报错，而我电脑开着一大堆编程软件，重启的话就非常麻烦，所以下定决心把这个 Bug 解决掉，后来花费一番功夫终于处理了，这里将处理过程记录下来，给大家一个参考。&lt;/p&gt;
&lt;h2 id=&#34;2-问题查找&#34;&gt;2. 问题查找&lt;a class=&#34;headerlink&#34; href=&#34;#2-问题查找&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;这里我们的系统是 Windows 系统，直接打开事件管理器（鼠标右击 Win10 界面的“此电脑”图标。在右键菜单中，点击打开 &amp;ldquo;管理&amp;rdquo;，打开计算机管理，然后在左侧菜单中，就可以看到事件查看器了），在 &lt;strong&gt;&amp;ldquo;Windows 日志&amp;rdquo;&lt;/strong&gt; 下的 &lt;strong&gt;&amp;ldquo;应用程序&amp;rdquo; &lt;/strong&gt;模块下找到该时间点对应的系统报错，这里我们看下错误应用程序，确认是 WXWork 报的错，那就定位没错。然后看下错误模块路径，这里给出的是 &lt;strong&gt;KernelEs.dll&lt;/strong&gt;，这样我们基本确认了问题出在 KernelEs.dll 动态链接文件上，现在就简单了，我们只需要去搜索系统为什么会报这个错误以及如何解决这个问题即可。  &lt;br /&gt;
&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FpG6SK1Y0I6Gi8rLRRYVZ15cE3vm.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;这里大致说一下为什么有这个错误，根据网上找到的资料，是说出现这个问题一般是单位的电脑或者是自己电脑安装过&lt;strong&gt;亿赛通&lt;/strong&gt;的防泄密软件：数据安全卫士。正巧我们公司装了亿赛通软件，感觉就是他的锅！&lt;/p&gt;
&lt;h2 id=&#34;3-问题解决&#34;&gt;3. 问题解决&lt;a class=&#34;headerlink&#34; href=&#34;#3-问题解决&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Win10 根据处理器不同位数打开如下目录：    &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;32 位：C:\Windows\System32    &lt;/li&gt;
&lt;li&gt;64 位：C:\Windows\SysWOW64    &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;我电脑是 64 位的，就打开：&lt;strong&gt;C:\Windows\SysWOW64&lt;/strong&gt; 资源路径，然后搜索：&lt;strong&gt;kernel&lt;/strong&gt;  &lt;br /&gt;
&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FvNYSLylxoKjj3yqUo4SYSkTwn_b.png&#34; /&gt;    &lt;/p&gt;
&lt;p&gt;复制一份这个文件至桌面，然后重命名为：&lt;strong&gt;kernelEs.dll&lt;/strong&gt;，再将这个 &lt;strong&gt;kernelEs.dll&lt;/strong&gt; 文件，剪切到 &lt;strong&gt;C:\Windows\SysWOW64&lt;/strong&gt; 目录下。&lt;/p&gt;
&lt;p&gt;这时候再打开企业微信就能正常打开了！&lt;/p&gt;
&lt;h2 id=&#34;4-事后感悟&#34;&gt;4. 事后感悟&lt;a class=&#34;headerlink&#34; href=&#34;#4-事后感悟&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;在解决这个问题的过程，我找到不少解决方案，然而这些解决方案要不就是使用 cmd 命名删一些东西，要不就是重装系统，这些方法根本不想试也没办法试，试出问题咋办嘞，然后更多的就是根本没用了，浪费了不少时间，不过可能他们遇到的问题和我的也有点区别，所以每次我能解决一些卡住自己很久的问题，我就会尽量写个详细的文章，希望对后人有益吧，可能多年之后，有个遇到同样问题的靓仔，正巧遇到同样的问题而搜到了我的文章从而解决了问题，那我也算做了一份贡献，诸君共勉，望我们的国家未来繁荣昌盛。&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/Windows/2023-03-28-0x0000142/</link>
      <pubDate>Tue, 28 Mar 2023 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/Windows/2023-03-28-0x0000142/</guid>
      
    </item>
    
    <item>
      <title>Python 均匀地分割字符串</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2023-03-27&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2023-03-27T00:00:00&#39;&gt;2023-03-27&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2023-03-27&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2023-03-27T11:29:53&#39;&gt;2023-03-27&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;对于一个长序列，如何通过 Python 按照一定的长度均匀的进行分割？&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;seq&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;ATGAACCACTCGCCGCTCAAGACCGCCTTGGCGTACGAATGCTTCCAGGACCAGGACAACTCCACGTTGGCTTTGCCGTCGGACCAAAAGATGAAAACAGGCACGTCTGGCAGGCAGCGCGTGCAGGAGCAGGTGATGATGACCGTCAAGCGGCAGAAGTCCAAGTCTTCCCAGTCGTCCACCCTGAGCCACTCCAATCG&amp;#39;&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;len&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;seq&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;200&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;具体方法如下：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;90&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;range&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;len&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;seq&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;seq&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;...&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;ATGAACCACTCGCCGCTCAAGACCGCCTTGGCGTACGAATGCTTCCAGGACCAGGACAACTCCACGTTGGCTTTGCCGTCGGACCAAAAG&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;ATGAAAACAGGCACGTCTGGCAGGCAGCGCGTGCAGGAGCAGGTGATGATGACCGTCAAGCGGCAGAAGTCCAAGTCTTCCCAGTCGTCC&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;ACCCTGAGCCACTCCAATCG&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;seq&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;range&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;len&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;seq&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)])&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;ATGAACCACTCGCCGCTCAAGACCGCCTTGGCGTACGAATGCTTCCAGGACCAGGACAACTCCACGTTGGCTTTGCCGTCGGACCAAAAG&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;ATGAAAACAGGCACGTCTGGCAGGCAGCGCGTGCAGGAGCAGGTGATGATGACCGTCAAGCGGCAGAAGTCCAAGTCTTCCCAGTCGTCC&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;ACCCTGAGCCACTCCAATCG&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fly8Kei6b_-KOFSCu-hPTa6rZNhT.png&#34; /&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;my_string&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;abcdefghijklmnopqrstuvwxyz&amp;#39;&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;n&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;result&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;my_string&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;range&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;len&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;my_string&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)]&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;result&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
      <link>https://shenwy.com/yuque/%E7%94%9F%E7%89%A9%E4%BF%A1%E6%81%AF/%E6%95%B0%E6%8D%AE/2023-03-27-qdlrkzttripr9wgg/</link>
      <pubDate>Mon, 27 Mar 2023 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E7%94%9F%E7%89%A9%E4%BF%A1%E6%81%AF/%E6%95%B0%E6%8D%AE/2023-03-27-qdlrkzttripr9wgg/</guid>
      
    </item>
    
    <item>
      <title>ViennaRNA 安装使用</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2023-03-23&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2023-03-23T00:00:00&#39;&gt;2023-03-23&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2023-03-28&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2023-03-28T15:34:56&#39;&gt;2023-03-28&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&#34;http://www.tbi.univie.ac.at/~ivo/RNA/man/RNAfold.html&#34;&gt;RNAfold&lt;/a&gt; 是 &lt;a href=&#34;http://www.tbi.univie.ac.at/~ivo/RNA/index.html&#34;&gt;Vienna RNA Package&lt;/a&gt; 里的一种通过计算最小自由能 (MFE: minimum free energy) 来预测 RNA 二级结构的软件。它的算法和理论支持主要来源于 M. Zuker 和 P. Stiegler 在 1981 年发表的这篇 &lt;a href=&#34;http://nar.oxfordjournals.org/content/9/1/133.short&#34;&gt;Optimal computer folding of large RNA sequences using thermodynamic and auxiliary information&lt;/a&gt;。想了解 Michael Zuker 教授小组的一系列研究情况和 MFE 算法计算依据的可以点&lt;a href=&#34;http://www.bioinfo.rpi.edu/zukerm/rna/energy/&#34;&gt;这里&lt;/a&gt;。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;h2 id=&#34;主要参数&#34;&gt;主要参数&lt;a class=&#34;headerlink&#34; href=&#34;#主要参数&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;RNAfold&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-p&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-d2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--noLP&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;lt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sequence1.fa&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sequence1.out
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;详细的参数参考：&lt;a href=&#34;https://www.tbi.univie.ac.at/RNA/RNAfold.1.html&#34;&gt;https://www.tbi.univie.ac.at/RNA/RNAfold.1.html&lt;/a&gt;。
本节部分内容来源于：&lt;a href=&#34;http://www.360doc.com/content/16/0114/00/28449293_527768719.shtml&#34;&gt;RNAfold 介绍&lt;/a&gt; - 360doc&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;-p, &amp;ndash;partfunc[=INT]&lt;/strong&gt; Calculate the partition function and base pairing probability matrix. (default=&amp;lsquo;1&amp;rsquo;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;-noLP&lt;/strong&gt; 表示不允许有孤立碱基对；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;-noPS&lt;/strong&gt; 表示不生成结构图（只计算结果，即不产生二级结构对应的 postscript 文件，这种文件可以转换为 PDF 格式）；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;d1&lt;/strong&gt; 指的是 &amp;ldquo;dangling end&amp;rdquo; (悬挂端)的能量计算按照 d1 模式（有且仅有未配对的碱基可以参与最多一个悬挂端），返回值就是“点-弧”结构图和预测的能量值。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;关于 dangling end(dangling bases) 的中文翻译在国内未能查到，这里暂翻译为“悬挂端”。可以参考这篇 &lt;a href=&#34;http://pubs.acs.org/doi/abs/10.1021/ja0255406&#34;&gt;Long RNA Dangling End Has Large Energetic Contribution to Duplex Stability&lt;/a&gt;，dangling end 指的就是在双链中未配对、会参与旁边“链栈”(stacks) 能量增益的碱基。不同的悬挂组合产生的不同的能量增益，这在 RNAfold 计算中也会被考虑（寻求最好的 dangle）。&lt;/p&gt;
&lt;h2 id=&#34;输出结果&#34;&gt;输出结果&lt;a class=&#34;headerlink&#34; href=&#34;#输出结果&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;默认参数会输出以下两种二级结构：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;optimal secondary structure&lt;/strong&gt;。最佳二级结构，保证对应的自由能最小，最小自由能简称 MFE，结果示意如下&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;centroid secondary structure&lt;/strong&gt;。自由能表征改变这个结构需要注入的能量大小，对应的数值越小，该结构越稳定。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;安装&#34;&gt;安装&lt;a class=&#34;headerlink&#34; href=&#34;#安装&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;ViennaRNA-2.5.x 要求 C++17 标准的更高版本的编译器，即 GCC 需要 5 及以上版本。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;That is unfortunate! We added dlib to our source tree for version 2.5.0 to efficiently compute concentration dependencies upon multi-strand interactions. Apparently, dlib requires a more recent compiler that actually implements the C++17 standard, which is only available since GCC 5. —— From &lt;a href=&#34;https://github.com/ViennaRNA/ViennaRNA/issues/146&#34;&gt;issues 146&lt;/a&gt;
我们在版本 2.5.0 中将 dlib 添加到了我们的源代码树中，以便高效地计算多股链交互的浓度依赖性。显然，dlib 需要一个实现了 C++17 标准的更高版本的编译器，这仅在 GCC 5 之后可用。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;./configure&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/home/shenweiyan/software/ViennaRNA-2.4.11
......
configure:

&lt;span class=&#34;o&#34;&gt;======================================&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;ViennaRNA&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;.4.11
&lt;span class=&#34;o&#34;&gt;======================================&lt;/span&gt;

Sub&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Packages
------------
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Kinfold&lt;span class=&#34;w&#34;&gt;                   &lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;yes
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;RNAforester&lt;span class=&#34;w&#34;&gt;               &lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;yes
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Analyse&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;Dists,Seqs&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;no
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;RNAlocmin&lt;span class=&#34;w&#34;&gt;                 &lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;yes
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Kinwalker&lt;span class=&#34;w&#34;&gt;                 &lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;no

Extra&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Libraries
---------------
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Support&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Vector&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Machine&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;yes
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;GNU&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Scientific&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Library&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;no
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;GNU&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;MPFR&lt;span class=&#34;w&#34;&gt;                  &lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;no
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;JSON&lt;span class=&#34;w&#34;&gt;                      &lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;yes

Features
--------
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Boustrophedon&lt;span class=&#34;w&#34;&gt;             &lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;yes
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Use&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;hash&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;NR&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Sampling&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;no
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;C11&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;features&lt;span class=&#34;w&#34;&gt;              &lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;yes
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;TTY&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;colors&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;yes
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Float&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Precision&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;PF&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;no
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Deprecation&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Warnings&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;no

Optimizations
-------------
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Auto&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Vectorization&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;yes
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Explicit&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;SIMD&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Extension&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;yes
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Link&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Time&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Optimization&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;yes
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;POSIX&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Threads&lt;span class=&#34;w&#34;&gt;             &lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;yes
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;OpenMP&lt;span class=&#34;w&#34;&gt;                    &lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;yes

Scripting&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Language&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Interfaces
-----------------------------
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Perl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;                    &lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;yes
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Python&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;                  &lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;yes
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Python&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;                  &lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;yes

Documentation
-------------
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Reference&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Manual&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;PDF&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;yes
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Reference&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Manual&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;HTML&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;yes
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Tutorial&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;PDF&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;yes
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Tutorial&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;HTML&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;           &lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;no

Unit&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Tests
----------
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Executable&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Programs&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;yes
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;C-Library&lt;span class=&#34;w&#34;&gt;                 &lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;no
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Perl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Interface&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;yes
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Python&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Interface&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;yes
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Python&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Interface&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;yes

MacOS&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;X
-------
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Universal&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Binary&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;no
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Installer&lt;span class=&#34;w&#34;&gt;                 &lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;no
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;SDK&lt;span class=&#34;w&#34;&gt;                       &lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;custom

Install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Directories
-------------------
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Executables&lt;span class=&#34;w&#34;&gt;               &lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/galaxy-dist/software/ViennaRNA-2.4.11/bin
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Libraries&lt;span class=&#34;w&#34;&gt;                 &lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/galaxy-dist/software/ViennaRNA-2.4.11/lib
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Header&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;files&lt;span class=&#34;w&#34;&gt;              &lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/galaxy-dist/software/ViennaRNA-2.4.11/include
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Extra&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Data&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/galaxy-dist/software/ViennaRNA-2.4.11/share
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Man&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pages&lt;span class=&#34;w&#34;&gt;                 &lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/galaxy-dist/software/ViennaRNA-2.4.11/share/man
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Documentation&lt;span class=&#34;w&#34;&gt;             &lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/galaxy-dist/software/ViennaRNA-2.4.11/share/doc/ViennaRNA
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;HTML&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;                  &lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/galaxy-dist/software/ViennaRNA-2.4.11/share/doc/ViennaRNA/html
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;PDF&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;                   &lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/galaxy-dist/software/ViennaRNA-2.4.11/share/doc/ViennaRNA
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Perl5&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Interface&lt;span class=&#34;w&#34;&gt;           &lt;/span&gt;:
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;binaries&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;              &lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/galaxy-dist/software/ViennaRNA-2.4.11/lib/perl5/site_perl/5.26.1/x86_64-linux-thread-multi
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;scripts&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;               &lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/galaxy-dist/software/ViennaRNA-2.4.11/lib/perl5/site_perl/5.26.1
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Python2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Interface&lt;span class=&#34;w&#34;&gt;         &lt;/span&gt;:
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;binaries&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;              &lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/galaxy-dist/software/ViennaRNA-2.4.11/lib/python2.7/site-packages
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;scripts&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;               &lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/galaxy-dist/software/ViennaRNA-2.4.11/lib/python2.7/site-packages
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Python3&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Interface&lt;span class=&#34;w&#34;&gt;         &lt;/span&gt;:
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;binaries&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;              &lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/galaxy-dist/software/ViennaRNA-2.4.11/lib/python3.6/site-packages
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;scripts&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;               &lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/galaxy-dist/software/ViennaRNA-2.4.11/lib/python3.6/site-packages

You&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;can&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;run&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;make&amp;#39;&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;make check&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;and&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;make install&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;now!
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;命令行使用示例。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;RNAfold&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-p&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-d2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--noLP&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;lt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sequence1.fa&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sequence1.out
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;使用示例&#34;&gt;使用示例&lt;a class=&#34;headerlink&#34; href=&#34;#使用示例&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&#34;rnalib-python&#34;&gt;RNAlib Python&lt;a class=&#34;headerlink&#34; href=&#34;#rnalib-python&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;参考教程：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.tbi.univie.ac.at/RNA/ViennaRNA/doc/html/helloworld_swig.html&#34;&gt;https://www.tbi.univie.ac.at/RNA/ViennaRNA/doc/html/helloworld_swig.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.tbi.univie.ac.at/RNA/ViennaRNA/doc/html/helloworld_swig.html&#34;&gt;https://www.tbi.univie.ac.at/RNA/ViennaRNA/doc/html/examples_python.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;import&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;RNA
&lt;span class=&#34;nv&#34;&gt;seq&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;GGGCUAUUAGCUCAGUUGGUUAGAGCGCACCCCUGAUAAGGGUGAGGUCGCUGAUUCGAAUUCAGCAUAGCCCA&amp;quot;&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;md&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;RNA.md&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# change temperature and dangle model&lt;/span&gt;
md.temperature&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;20&lt;/span&gt;.0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 20 Deg Celcius&lt;/span&gt;
md.dangles&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# Dangle Model 1&lt;/span&gt;
md.noLP&lt;span class=&#34;w&#34;&gt;              &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;

&lt;span class=&#34;nb&#34;&gt;fc&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;RNA.fold_compound&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;seq,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;md&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;ss,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mfe&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;fc.mfe&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt;
print&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;{}\n{} ({:6.2f})&amp;quot;&lt;/span&gt;.format&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;seq,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ss,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mfe&lt;span class=&#34;o&#34;&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;GGGCUAUUAGCUCAGUUGGUUAGAGCGCACCCCUGAUAAGGGUGAGGUCGCUGAUUCGAAUUCAGCAUAGCCCA
&lt;span class=&#34;o&#34;&gt;(((((((&lt;/span&gt;..&lt;span class=&#34;o&#34;&gt;((((&lt;/span&gt;.........&lt;span class=&#34;o&#34;&gt;))))&lt;/span&gt;.&lt;span class=&#34;o&#34;&gt;(((((&lt;/span&gt;.......&lt;span class=&#34;o&#34;&gt;)))))&lt;/span&gt;.....&lt;span class=&#34;o&#34;&gt;(((((&lt;/span&gt;.......&lt;span class=&#34;o&#34;&gt;))))))))))))&lt;/span&gt;.&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;-28.90&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;rnafold-web-server&#34;&gt;RNAfold web server&lt;a class=&#34;headerlink&#34; href=&#34;#rnafold-web-server&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;在线地址：&lt;a href=&#34;http://rna.tbi.univie.ac.at//cgi-bin/RNAWebSuite/RNAfold.cgi&#34;&gt;http://rna.tbi.univie.ac.at//cgi-bin/RNAWebSuite/RNAfold.cgi&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;示例 1：
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FqdBJC73kXJEmu4h5-dWleK6XTLg.png&#34; /&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;# Results have been computed using RNAfold 2.4.17. An equivalent command line call would have been
RNAfold -p -d0 --noClosingGU &amp;lt; test_sequenc.fa &amp;gt; test_sequenc.out
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;示例 2：
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fn1Zxi2EcpABRUbp2aRiASnbNAsj.png&#34; /&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;# Results have been computed using RNAfold 2.4.17. An equivalent command line call would have been
RNAfold -p -d0 --noLP --noClosingGU &amp;lt; test_sequenc.fa &amp;gt; test_sequenc.out
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;示例 3：
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fjnn3YPiIep8j2d385rQImBdSS7g.png&#34; /&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;# Results have been computed using RNAfold 2.4.17. An equivalent command line call would have been
RNAfold -p -d0 --noLP &amp;lt; test_sequenc.fa &amp;gt; test_sequenc.out
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;示例 4：
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fi7T_M6QDREBaMm3NgjBxfVFvSeT.png&#34; /&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;# Results have been computed using RNAfold 2.4.17. An equivalent command line call would have been
RNAfold -d0 --noLP --noClosingGU &amp;lt; test_sequenc.fa &amp;gt; test_sequenc.out
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;h2 id=&#34;参考资料&#34;&gt;参考资料&lt;a class=&#34;headerlink&#34; href=&#34;#参考资料&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.tbi.univie.ac.at/RNA/RNAfold.1.html&#34;&gt;TBI - RNAfold - Manpage&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.tbi.univie.ac.at/RNA/&#34;&gt;TBI - ViennaRNA Package 2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Galaxy Tools - &lt;a href=&#34;https://github.com/bgruening/galaxytools/tree/master/tools/rna_tools/vienna_rna&#34;&gt;vienna_rna&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Galaxy toolshed - &lt;a href=&#34;https://toolshed.g2.bx.psu.edu/repos/rnateam/viennarna_rnafold&#34;&gt;viennarna_rnafold&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <link>https://shenwy.com/yuque/%E7%94%9F%E7%89%A9%E4%BF%A1%E6%81%AF/%E8%BD%AF%E4%BB%B6/2023-03-23-rnafold/</link>
      <pubDate>Thu, 23 Mar 2023 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E7%94%9F%E7%89%A9%E4%BF%A1%E6%81%AF/%E8%BD%AF%E4%BB%B6/2023-03-23-rnafold/</guid>
      
    </item>
    
    <item>
      <title>Python 中添加环境变量</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2023-03-14&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2023-03-14T00:00:00&#39;&gt;2023-03-14&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2023-03-27&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2023-03-27T11:10:16&#39;&gt;2023-03-27&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;如何在 Python 中新增环境变量，或者从指定路径中加载模块。&lt;/p&gt;
&lt;h4 id=&#34;临时添加&#34;&gt;临时添加&lt;a class=&#34;headerlink&#34; href=&#34;#临时添加&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;方法一：程序中添加&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;sys&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;sys&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;path&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;sys&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;path&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;append&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;方法二：在 shell 终端中添加&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;PYTHONPATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/home/shen/deptools/python:/home/shen/setup/mypy:&lt;span class=&#34;nv&#34;&gt;$PYTHONPATH&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4 id=&#34;环境变量配置文件中添加&#34;&gt;环境变量配置文件中添加&lt;a class=&#34;headerlink&#34; href=&#34;#环境变量配置文件中添加&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;添加 &lt;strong&gt;PYTHONPATH&lt;/strong&gt; 的方法也是这样，在 &lt;code&gt;~/.bashrc&lt;/code&gt;中添加：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;PYTHONPATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/home/shen/deptools/python:/home/shen/setup/mypy:&lt;span class=&#34;nv&#34;&gt;$PYTHONPATH&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;保存后在终端输入&lt;code&gt;**$ source ~/.bashrc**&lt;/code&gt;使环境变量立即生效。&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E7%BC%96%E7%A8%8B%E6%8A%80%E6%9C%AF/Python/2023-03-14-hsco916i48bzedk7/</link>
      <pubDate>Tue, 14 Mar 2023 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E7%BC%96%E7%A8%8B%E6%8A%80%E6%9C%AF/Python/2023-03-14-hsco916i48bzedk7/</guid>
      
    </item>
    
    <item>
      <title>终端 | Termius 使用体验</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2023-02-21&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2023-02-21T00:00:00&#39;&gt;2023-02-21&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2023-02-21&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2023-02-21T14:51:55&#39;&gt;2023-02-21&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;看到不少文章提到 Termius 终端（官网：&lt;a href=&#34;https://termius.com/&#34;&gt;https://termius.com/&lt;/a&gt;），说是适用于 macOS， Windows 和 Linux。
&lt;a href=&#34;https://www.yuque.com/shenweiyan/cookbook/fg9x7zgnh5vzrycg?_lake_card=%7B%22status%22%3A%22done%22%2C%22name%22%3A%22putty-for-mac-video.webm%22%2C%22size%22%3A1763597%2C%22taskId%22%3A%22ue42e7651-b4da-4e74-93c2-882b5a32d50%22%2C%22taskType%22%3A%22upload%22%2C%22url%22%3Anull%2C%22cover%22%3Anull%2C%22videoId%22%3A%22inputs%2Fprod%2Fyuque%2F2023%2F126032%2Fwebm%2F1676959668849-b0d5c855-56cb-4a76-86e1-da852fa95678.webm%22%2C%22download%22%3Afalse%2C%22__spacing%22%3A%22both%22%2C%22id%22%3A%22WDXkL%22%2C%22margin%22%3A%7B%22top%22%3Atrue%2C%22bottom%22%3Atrue%7D%2C%22card%22%3A%22video%22%7D#WDXkL&#34;&gt;&lt;img alt=&#34;putty-for-mac-video.webm (1.68MB)&#34; src=&#34;https://gw.alipayobjects.com/mdn/prod_resou/afts/img/A*NNs6TKOR3isAAAAAAAAAAABkARQnAQ&#34; /&gt;&lt;/a&gt;出于好奇个人在 Win10 上尝试了一下（版本 &lt;strong&gt;7.56.1.0&lt;/strong&gt;），没有深入使用。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;不能指定安装路径，exe 文件下载后点击安装，一顿刷新后安装好了，也不知道安装到了哪里。&lt;/li&gt;
&lt;li&gt;官方不支持中文汉化，网上有一些其他的方法，可以自己折腾。&lt;/li&gt;
&lt;li&gt;颜值还不错。&lt;/li&gt;
&lt;li&gt;安装包比较大，7.56.1.0 版本的 &amp;ldquo;Install Termius.exe&amp;rdquo; 就有 153MB！&lt;/li&gt;
&lt;/ul&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/Windows/2023-02-21-fg9x7zgnh5vzrycg/</link>
      <pubDate>Tue, 21 Feb 2023 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/Windows/2023-02-21-fg9x7zgnh5vzrycg/</guid>
      
    </item>
    
    <item>
      <title>服务器显卡/显卡驱动/GPU/CUDA的一些理解</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2023-02-13&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2023-02-13T00:00:00&#39;&gt;2023-02-13&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2023-02-13&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2023-02-13T17:16:36&#39;&gt;2023-02-13&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;刚接触深度学习的童鞋经常会碰到这一堆的名词，记录一下。&lt;/p&gt;
&lt;p&gt;GPU 和显卡的关系，参考&lt;a href=&#34;https://www.zhihu.com/question/28422454&#34;&gt;资料【1】&lt;/a&gt;，总的来说即：GPU 是显卡上的一块芯片，就像 CPU 是主板上的一块芯片。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FnUNY7H8NF4mgHidyxhTLIe_C4QG.png&#34; /&gt;&lt;/p&gt;
&lt;h1 id=&#34;参考资料&#34;&gt;参考资料&lt;a class=&#34;headerlink&#34; href=&#34;#参考资料&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&#34;https://www.zhihu.com/question/28422454&#34;&gt;GPU 和显卡是什么关系？ - 知乎&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://zhuanlan.zhihu.com/p/91334380&#34;&gt;显卡，显卡驱动,nvcc, cuda driver,cudatoolkit,cudnn 到底是什么？&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.8fe.com/jiaocheng/2376.html&#34;&gt;cuda 和 nvidia 显卡驱动版本关系及安装方法_软件教程-八分网&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E5%9B%BE%E5%83%8F%E4%B8%8EGUI/2023-02-13-gkthk7lbm82t1qrl/</link>
      <pubDate>Mon, 13 Feb 2023 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E5%9B%BE%E5%83%8F%E4%B8%8EGUI/2023-02-13-gkthk7lbm82t1qrl/</guid>
      
    </item>
    
    <item>
      <title>SOAPdenovo 使用备忘</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2023-01-05&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2023-01-05T00:00:00&#39;&gt;2023-01-05&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2023-01-05&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2023-01-05T17:28:02&#39;&gt;2023-01-05&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;一些有用的参考资料：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://huangshujia.com/2015/07/2015-07-09-the-best-manual-for-soapdenovo2/&#34;&gt;目前最好最完整的 SOAPdenovo 使用说明&lt;/a&gt; - &lt;a href=&#34;https://huangshujia.com/&#34;&gt;黄树嘉个人博客&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://mp.weixin.qq.com/s/NBktjS-03LVRTPekDK0u8Q&#34;&gt;序列组装软件 SOAPdenovo2 目前最完整的使用说明和注意事项&lt;/a&gt; - 碱基矿工微信公众号&lt;/li&gt;
&lt;/ul&gt;</description>
      <link>https://shenwy.com/yuque/%E7%94%9F%E7%89%A9%E4%BF%A1%E6%81%AF/%E8%BD%AF%E4%BB%B6/2023-01-05-hru8nl3amnloeycg/</link>
      <pubDate>Thu, 05 Jan 2023 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E7%94%9F%E7%89%A9%E4%BF%A1%E6%81%AF/%E8%BD%AF%E4%BB%B6/2023-01-05-hru8nl3amnloeycg/</guid>
      
    </item>
    
    <item>
      <title>新冠肺炎与疫苗的基本知识</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2022-12-16&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2022-12-16T00:00:00&#39;&gt;2022-12-16&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2022-12-16&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2022-12-16T12:00:19&#39;&gt;2022-12-16&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id=&#34;新冠病毒疫苗接种免疫原理通俗版&#34;&gt;新冠病毒疫苗接种免疫原理（通俗版）&lt;a class=&#34;headerlink&#34; href=&#34;#新冠病毒疫苗接种免疫原理通俗版&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;灭活疫苗是一种由病毒颗粒、细菌或其他病原体组成的疫苗。制备疫苗时首先让这些病毒颗粒、细菌或其他病原体培养过程中生长，然后通过物理或化学方法（通常是利用加热或福尔马林处理）让其失去致病能力即可。&lt;/li&gt;
&lt;li&gt;重组蛋白疫苗是利用基因工程，将编码一种抗原（如新冠病毒表面蛋白）的 DNA 插入细菌或哺乳动物细胞，在这些细胞中表达抗原，然后从细胞中纯化制备成疫苗的技术。&lt;/li&gt;
&lt;li&gt;腺病毒载体疫苗是将新型冠状病毒中的一个基因传送到我们的身体中，之后我们自身的细胞将读取它并制造冠状病毒的蛋白质。就像其他所有的疫苗一样，这个想法是诱使我们的免疫系统认为我们已经被感染了。&lt;/li&gt;
&lt;li&gt;mRNA 疫苗是以新冠病毒特异性抗原蛋白对应的 mRNA 为基础，通过某种方式递送至人体细胞内，经人体细胞自行反转录为 DNA 再翻译产生蛋白、诱导机体特异性免疫反应。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;新冠肺炎-mrna-疫苗原理揭秘&#34;&gt;新冠肺炎 mRNA 疫苗原理揭秘&lt;a class=&#34;headerlink&#34; href=&#34;#新冠肺炎-mrna-疫苗原理揭秘&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;费尔法克斯县乃至全国民众都翘首期盼新冠肺炎(COVID-19)疫苗的到来。虽然疫苗如何分配尚待 披露，但我们已经得知，我们拿到的首批疫苗是 mRNA 疫苗。那麽我们现在来瞭解一下这类疫苗 的工作原理。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.cdc.gov/coronavirus/2019-ncov/vaccines/different-vaccines/mrna.html&#34;&gt;本文原载于疾病控制与预防中心(CDC)的网站。 &lt;/a&gt;&lt;/p&gt;
&lt;p&gt;为了触发免疫反应，许多疫苗会向人体注入弱化或灭活处理的细菌。但 mRNA 疫苗不是这样。它们只是告诉细胞如何制造某种蛋白质，甚至是蛋白质片段，以触发人体的免疫反应。当真实的病 毒侵入人体时，这种免疫反应可以分泌抗体，保护我们不被感染。
新冠肺炎 mRNA 疫苗向细胞发出指令，要求制造一段无害的蛋白质，称为“棘蛋白”。引起新冠 肺炎的病毒表面也有这种棘蛋白。
新冠肺炎 mRNA 疫苗透过上臂肌肉注射植入。一旦指令(mRNA)进入肌肉细胞，细胞会根据指令制造蛋白质片段。产生这种蛋白质片段后，细胞会分解和消除该指令。
然后，该蛋白质片段会出现在细胞表面。免疫系统发现这裡不应该有这种蛋白质，于是开始启动 免疫反应，并分泌抗体，这个过程与抑制新冠肺炎的自然感染一样。
到这个过程结束时，人体便已经学会如何防止未来的感染。和所有其他疫苗一样，mRNA 疫苗的优势在于接种者可以获得免疫保护，而不用冒险，不会产生感染新冠肺炎的严重后果。&lt;/p&gt;
&lt;h2 id=&#34;关于新冠肺炎-mrna-疫苗的事实&#34;&gt;关于新冠肺炎 mRNA 疫苗的事实&lt;a class=&#34;headerlink&#34; href=&#34;#关于新冠肺炎-mrna-疫苗的事实&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;它们不会导致接种者感染新冠肺炎。&lt;/li&gt;
&lt;li&gt;mRNA 疫苗不使用引起新冠肺炎的活体病毒。&lt;/li&gt;
&lt;li&gt;它们不影响人体 DNA 或以任何方式与其交互。&lt;/li&gt;
&lt;li&gt;mRNA 绝不进入保存人体 DNA（遗传物质）的细胞核。&lt;/li&gt;
&lt;li&gt;在 mRNA 按指令完成任务后，细胞很快会将其分解和消除。&lt;/li&gt;
&lt;li&gt;与美国所有其他类型的疫苗一样，它们在安全和效力方面同样有严格的标准。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;虽然 mRNA 疫苗在美国尚未取得使用许可，但研究人员对它们已进行了几十年的研究和工作。这 类疫苗可使用现成的材料在实验室开发，因此越来越受关注。这意味著可採用标准化流程大规模生产疫苗，速度比传统的疫苗生产方法更快。除了疫苗之外，癌症研究人员还使用 mRNA 针对特 定癌细胞触发免疫系统。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.cdc.gov/coronavirus/2019-ncov/vaccines/different-vaccines/mrna.html&#34;&gt;详情请浏览 CDC 网站。 &lt;/a&gt;&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E7%94%9F%E7%89%A9%E4%BF%A1%E6%81%AF/%E6%9D%82%E9%A1%B9/2022-12-16-mbk23ltbm8qq143z/</link>
      <pubDate>Fri, 16 Dec 2022 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E7%94%9F%E7%89%A9%E4%BF%A1%E6%81%AF/%E6%9D%82%E9%A1%B9/2022-12-16-mbk23ltbm8qq143z/</guid>
      
    </item>
    
    <item>
      <title>基于语雀 API 的文档管理探索</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2022-12-02&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2022-12-02T00:00:00&#39;&gt;2022-12-02&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2023-04-12&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2023-04-12T17:00:15&#39;&gt;2023-04-12&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;一直以来都有不少人在纠结语雀文档的批量导出，殊不知语雀本身提供了相当丰富的 API —— 这些 API 正好可以帮助我们实现个人知识库的批量化导入导出和备份的目的。
&lt;a href=&#34;https://www.yuque.com/yuque/developer?view=doc_embed&#34;&gt;开发者文档&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;基于-api-的应用&#34;&gt;基于 API 的应用&lt;a class=&#34;headerlink&#34; href=&#34;#基于-api-的应用&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;语雀开发者文档 —— &lt;a href=&#34;https://www.yuque.com/yuque/developer/api&#34;&gt;https://www.yuque.com/yuque/developer/api&lt;/a&gt; 的评论区列了不少基于 API 的应用和案例，感兴趣的可以去细看，这里简单列举几个个人觉得比较具有代表性的。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Node SDK：&lt;a href=&#34;https://github.com/yuque/sdk&#34;&gt;https://github.com/yuque/sdk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;回馈一个 Python SDK &amp;amp; 命令行工具：&lt;a href=&#34;https://github.com/inhzus/juq&#34;&gt;juq&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;回馈一个同步仓库文章到本地的命令行工具：&lt;a href=&#34;https://github.com/x-cold/yuque-hexo&#34;&gt;yuque-hexo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;回馈一个 Py：&lt;a href=&#34;https://github.com/Xarrow/simple-pyyuque&#34;&gt;https://github.com/Xarrow/simple-pyyuque&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;用 go 写的 SDK &lt;a href=&#34;https://github.com/my-Sakura/go-yuque-api&#34;&gt;https://github.com/my-Sakura/go-yuque-api&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;语雀 Java sdk ：&lt;a href=&#34;https://github.com/ryangsun/yuque-java-sdk&#34;&gt;https://github.com/ryangsun/yuque-java-sdk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;补充一个 Python 的导出本地备份：&lt;a href=&#34;https://github.com/shenweiyan/YQExportMD&#34;&gt;https://github.com/shenweiyan/YQExportMD&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;个人比较熟悉 Python，所以会对基于 Python 的一些 API 进行尝试和说明。&lt;/p&gt;
&lt;h2 id=&#34;api-操作与说明&#34;&gt;API 操作与说明&lt;a class=&#34;headerlink&#34; href=&#34;#api-操作与说明&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&#34;获取个人的所有知识库&#34;&gt;获取个人的所有知识库&lt;a class=&#34;headerlink&#34; href=&#34;#获取个人的所有知识库&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;requests&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;headers&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
    &lt;span class=&#34;s2&#34;&gt;&amp;quot;Content-Type&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;application/json&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
    &lt;span class=&#34;s2&#34;&gt;&amp;quot;User-Agent&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
    &lt;span class=&#34;s2&#34;&gt;&amp;quot;X-Auth-Token&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;XJ..........PQCoJtjrIO&amp;#39;&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;response&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;requests&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;method&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;GET&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;https://www.yuque.com/api/v2/users/shenweiyan/repos&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;headers&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;headers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;json&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;Out&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;16&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;data&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[{&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;227777&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
   &lt;span class=&#34;s1&#34;&gt;&amp;#39;type&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;Book&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
   &lt;span class=&#34;s1&#34;&gt;&amp;#39;slug&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;cookbook&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
   &lt;span class=&#34;s1&#34;&gt;&amp;#39;name&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;技术私房菜&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
   &lt;span class=&#34;s1&#34;&gt;&amp;#39;user_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;126032&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
   &lt;span class=&#34;s1&#34;&gt;&amp;#39;description&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;原创技术文章，记录工作，学习的知识汇总。&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
   &lt;span class=&#34;s1&#34;&gt;&amp;#39;creator_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;126032&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
   &lt;span class=&#34;s1&#34;&gt;&amp;#39;public&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
   &lt;span class=&#34;s1&#34;&gt;&amp;#39;items_count&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;218&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
   &lt;span class=&#34;s1&#34;&gt;&amp;#39;likes_count&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
   &lt;span class=&#34;s1&#34;&gt;&amp;#39;watches_count&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;182&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
   &lt;span class=&#34;s1&#34;&gt;&amp;#39;content_updated_at&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;2022-12-02T07:27:32.714Z&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
   &lt;span class=&#34;s1&#34;&gt;&amp;#39;updated_at&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;2022-12-02T07:27:33.000Z&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
   &lt;span class=&#34;s1&#34;&gt;&amp;#39;created_at&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;2019-03-01T12:22:24.000Z&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
   &lt;span class=&#34;s1&#34;&gt;&amp;#39;namespace&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;shenweiyan/cookbook&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
   &lt;span class=&#34;s1&#34;&gt;&amp;#39;user&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;126032&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
    &lt;span class=&#34;s1&#34;&gt;&amp;#39;type&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;User&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
    &lt;span class=&#34;s1&#34;&gt;&amp;#39;login&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;shenweiyan&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
    &lt;span class=&#34;s1&#34;&gt;&amp;#39;name&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;章鱼猫先生&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
    &lt;span class=&#34;s1&#34;&gt;&amp;#39;description&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;乐于分享，爱好码字，沉迷于折腾  | Bio &amp;amp; IT 爱好者&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
    &lt;span class=&#34;s1&#34;&gt;&amp;#39;avatar_url&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;https://cdn.yuque.com/yuque/0/2018/jpeg/126032/1526460304504-avatar/f6903e58-a5ec-4c79-9d61-f8c8e0e3f83c.jpeg&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
    &lt;span class=&#34;s1&#34;&gt;&amp;#39;followers_count&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;765&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
    &lt;span class=&#34;s1&#34;&gt;&amp;#39;following_count&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;95&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
    &lt;span class=&#34;s1&#34;&gt;&amp;#39;created_at&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;2018-05-16T08:29:24.000Z&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
    &lt;span class=&#34;s1&#34;&gt;&amp;#39;updated_at&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;2022-12-02T07:44:57.000Z&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
    &lt;span class=&#34;s1&#34;&gt;&amp;#39;_serializer&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;v2.user&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
   &lt;span class=&#34;s1&#34;&gt;&amp;#39;_serializer&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;v2.book&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
  &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;174556&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
   &lt;span class=&#34;s1&#34;&gt;&amp;#39;type&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;Book&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
   &lt;span class=&#34;s1&#34;&gt;&amp;#39;slug&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;own&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
   &lt;span class=&#34;s1&#34;&gt;&amp;#39;name&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;杂文私房菜&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
   &lt;span class=&#34;o&#34;&gt;.....&lt;/span&gt;
  &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
  &lt;span class=&#34;o&#34;&gt;......&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;获取某个知识库内所有文档&#34;&gt;获取某个知识库内所有文档&lt;a class=&#34;headerlink&#34; href=&#34;#获取某个知识库内所有文档&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;url&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;https://www.yuque.com/api/v2/repos/227777/docs&amp;quot;&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;# 227777 为对应知识库的 repo_id&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;resp&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;requests&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;GET&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;headers&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;headers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;repo_docs&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;resp&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;json&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;     &lt;span class=&#34;c1&#34;&gt;# 得到一个以 data 为 key 的字典&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;docs&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;repo_docs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;data&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;    &lt;span class=&#34;c1&#34;&gt;# 返回一个包含该知识库所有文档的 list&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;In&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;20&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;docs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;keys&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;     &lt;span class=&#34;c1&#34;&gt;# 每个 list 是一个包含了 27 个 key 的字典&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Out&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;20&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dict_keys&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;slug&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;title&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;description&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;user_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;book_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;format&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;public&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;status&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;view_status&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;read_status&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;likes_count&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;read_count&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;comments_count&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;content_updated_at&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;created_at&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;updated_at&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;published_at&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;first_published_at&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;draft_version&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;last_editor_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;word_count&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;cover&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;custom_description&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;last_editor&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;book&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;_serializer&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;获取某个指定文档的内容&#34;&gt;获取某个指定文档的内容&lt;a class=&#34;headerlink&#34; href=&#34;#获取某个指定文档的内容&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;h4 id=&#34;基于-api&#34;&gt;基于 API&lt;a class=&#34;headerlink&#34; href=&#34;#基于-api&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;最终的&lt;code&gt;doc[&#39;data&#39;][&#39;body&#39;]&lt;/code&gt;即为对应文章正文内容。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;repo_id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;slug&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;227777&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;webstack-hugo&amp;quot;&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;url&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;https://www.yuque.com/api/v2/repos/&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;%s&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;/docs/&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;%s&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;%&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;repo_id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;slug&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;res&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;requests&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;GET&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;headers&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;headers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;doc&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;res&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;json&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;    &lt;span class=&#34;c1&#34;&gt;# 返回一个包含 [&amp;#39;abilities&amp;#39;, &amp;#39;data&amp;#39;] 2 个 key 的字典&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;In&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;30&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;doc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;keys&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Out&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;30&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dict_keys&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;abilities&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;data&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;In&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;31&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;doc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;data&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;keys&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Out&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;31&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dict_keys&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;slug&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;title&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;book_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;book&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;user_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;creator&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;format&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;body&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;body_draft&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;body_html&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;body_lake&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;body_draft_lake&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;public&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;status&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;view_status&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;read_status&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;likes_count&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;comments_count&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;content_updated_at&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;deleted_at&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;created_at&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;updated_at&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;published_at&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;first_published_at&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;word_count&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;cover&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;description&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;custom_description&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;hits&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;_serializer&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;In&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;26&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;doc&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Out&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;26&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;abilities&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;update&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;True&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;destroy&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;True&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
 &lt;span class=&#34;s1&#34;&gt;&amp;#39;data&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;49148406&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
  &lt;span class=&#34;s1&#34;&gt;&amp;#39;slug&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;webstack-hugo&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
  &lt;span class=&#34;s1&#34;&gt;&amp;#39;title&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;WebStack-Hugo | 一个静态响应式网址导航主题&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
  &lt;span class=&#34;s1&#34;&gt;&amp;#39;book_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;227777&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
  &lt;span class=&#34;s1&#34;&gt;&amp;#39;book&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;227777&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
   &lt;span class=&#34;s1&#34;&gt;&amp;#39;type&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;Book&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
   &lt;span class=&#34;s1&#34;&gt;&amp;#39;slug&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;cookbook&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
   &lt;span class=&#34;s1&#34;&gt;&amp;#39;name&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;技术私房菜&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
   &lt;span class=&#34;s1&#34;&gt;&amp;#39;user_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;126032&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
   &lt;span class=&#34;s1&#34;&gt;&amp;#39;description&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;原创技术文章，记录工作，学习的知识汇总。&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
   &lt;span class=&#34;s1&#34;&gt;&amp;#39;creator_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;126032&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
   &lt;span class=&#34;s1&#34;&gt;&amp;#39;public&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
   &lt;span class=&#34;s1&#34;&gt;&amp;#39;items_count&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;218&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
   &lt;span class=&#34;s1&#34;&gt;&amp;#39;likes_count&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
   &lt;span class=&#34;s1&#34;&gt;&amp;#39;watches_count&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;182&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
   &lt;span class=&#34;s1&#34;&gt;&amp;#39;content_updated_at&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;2022-12-02T07:27:32.714Z&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
   &lt;span class=&#34;s1&#34;&gt;&amp;#39;updated_at&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;2022-12-02T07:27:33.000Z&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
   &lt;span class=&#34;s1&#34;&gt;&amp;#39;created_at&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;2019-03-01T12:22:24.000Z&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
   &lt;span class=&#34;s1&#34;&gt;&amp;#39;namespace&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;shenweiyan/cookbook&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
   &lt;span class=&#34;s1&#34;&gt;&amp;#39;user&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;126032&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
    &lt;span class=&#34;s1&#34;&gt;&amp;#39;type&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;User&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
    &lt;span class=&#34;s1&#34;&gt;&amp;#39;login&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;shenweiyan&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
    &lt;span class=&#34;s1&#34;&gt;&amp;#39;name&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;章鱼猫先生&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
    &lt;span class=&#34;s1&#34;&gt;&amp;#39;description&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;乐于分享，爱好码字，沉迷于折腾  | Bio &amp;amp; IT 爱好者&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
    &lt;span class=&#34;s1&#34;&gt;&amp;#39;avatar_url&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;https://cdn.yuque.com/yuque/0/2018/jpeg/126032/1526460304504-avatar/f6903e58-a5ec-4c79-9d61-f8c8e0e3f83c.jpeg&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
    &lt;span class=&#34;s1&#34;&gt;&amp;#39;books_count&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;27&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
    &lt;span class=&#34;s1&#34;&gt;&amp;#39;public_books_count&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;12&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
    &lt;span class=&#34;s1&#34;&gt;&amp;#39;followers_count&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;765&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
    &lt;span class=&#34;s1&#34;&gt;&amp;#39;following_count&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;95&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
    &lt;span class=&#34;s1&#34;&gt;&amp;#39;created_at&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;2018-05-16T08:29:24.000Z&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
    &lt;span class=&#34;s1&#34;&gt;&amp;#39;updated_at&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;2022-12-02T07:44:57.000Z&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
    &lt;span class=&#34;s1&#34;&gt;&amp;#39;_serializer&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;v2.user&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
   &lt;span class=&#34;s1&#34;&gt;&amp;#39;_serializer&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;v2.book&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
  &lt;span class=&#34;s1&#34;&gt;&amp;#39;user_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;126032&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
  &lt;span class=&#34;s1&#34;&gt;&amp;#39;creator&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;126032&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
   &lt;span class=&#34;s1&#34;&gt;&amp;#39;type&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;User&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
   &lt;span class=&#34;s1&#34;&gt;&amp;#39;login&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;shenweiyan&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
   &lt;span class=&#34;s1&#34;&gt;&amp;#39;name&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;章鱼猫先生&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
   &lt;span class=&#34;s1&#34;&gt;&amp;#39;description&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;乐于分享，爱好码字，沉迷于折腾  | Bio &amp;amp; IT 爱好者&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
   &lt;span class=&#34;s1&#34;&gt;&amp;#39;avatar_url&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;https://cdn.yuque.com/yuque/0/2018/jpeg/126032/1526460304504-avatar/f6903e58-a5ec-4c79-9d61-f8c8e0e3f83c.jpeg&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
   &lt;span class=&#34;s1&#34;&gt;&amp;#39;books_count&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;27&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
   &lt;span class=&#34;s1&#34;&gt;&amp;#39;public_books_count&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;12&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
   &lt;span class=&#34;s1&#34;&gt;&amp;#39;followers_count&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;765&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
   &lt;span class=&#34;s1&#34;&gt;&amp;#39;following_count&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;95&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
   &lt;span class=&#34;s1&#34;&gt;&amp;#39;created_at&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;2018-05-16T08:29:24.000Z&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
   &lt;span class=&#34;s1&#34;&gt;&amp;#39;updated_at&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;2022-12-02T07:44:57.000Z&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
   &lt;span class=&#34;s1&#34;&gt;&amp;#39;_serializer&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;v2.user&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
  &lt;span class=&#34;s1&#34;&gt;&amp;#39;format&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;lake&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
  &lt;span class=&#34;s1&#34;&gt;&amp;#39;body&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;:::tips&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;**📢 如果您参考本主题构建了属于你自己的网址导航，欢迎在评论区留下你网站的访问链接。**&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;:::\......&lt;/span&gt;
   &lt;span class=&#34;o&#34;&gt;.....&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4 id=&#34;不用-api&#34;&gt;不用 API&lt;a class=&#34;headerlink&#34; href=&#34;#不用-api&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;如果我们知道语雀某一篇公开文档的链接，如 &lt;a href=&#34;https://www.yuque.com/yuque/developer/api&#34;&gt;https://www.yuque.com/yuque/developer/api&lt;/a&gt;，我们可以在该 url 后增加 &lt;strong&gt;&amp;ldquo;/markdown?plain=true\&amp;amp;linebreak=false\&amp;amp;anchor=false&amp;rdquo;&lt;/strong&gt;，即可在浏览器直接查阅该文档的 markdown 格式内容。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://www.yuque.com/yuque/developer/api/markdown?plain=true&amp;amp;linebreak=false&amp;amp;anchor=false&#34;&gt;https://www.yuque.com/yuque/developer/api/markdown?plain=true&amp;amp;linebreak=false&amp;amp;anchor=false&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fn4YKs8OYiZYt-dT7TK9kg9OkjDt.png&#34; /&gt;
接下来的操作就很简单了，我们可以直接复制该 markdown 内容，或者用程序直接抓取下来。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;In&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;46&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;res&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;requests&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;GET&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;https://www.yuque.com/yuque/developer/api/markdown?plain=true&amp;amp;linebreak=false&amp;amp;anchor=false&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;headers&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;headers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;In&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;47&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;res&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;text&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Out&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;47&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;## 基本路径&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;所有 API 的路径都以 `https://www.yuque.com/api/v2` 开头。&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;空间下访问 API 的域名需要使用空间对应的域名，例如空间域名为 customspace.yuque.com， 则 API 的基础路径为 `https://customspace.yuque.com/api/v2`。&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;建议开启 follow redirect 能力:&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;```bash&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;# -L To follow redirect with Curl&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;curl -L -X &amp;quot;POST&amp;quot; &amp;quot;https://www.yuque.com/api/v2/...&amp;quot; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\\\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;     -H &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&amp;#39;&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;User-Agent: your_name&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&amp;#39;&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\\\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;     -H &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&amp;#39;&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;X-Auth-Token: your_token&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&amp;#39;&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\\\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;     -H &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&amp;#39;&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;Content-Type: application/json&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&amp;#39;&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\\\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;     -d $&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&amp;#39;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{}&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&amp;#39;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;```&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;## HTTP Verbs&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;| Verb | Description |&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;| --- | --- |&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;| GET | 用于获取数据 |&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;| POST | 用于创建数据 |&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;| PUT | 用于修改部分数据，例如一个文档标题，正文 |&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;| DELETE | 用于删除数据 |&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n\n\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;## HTTP 提交数据说明&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;当&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\xa0&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;**POST**,&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\xa0&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;**PUT**&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\xa0&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;请求的时候，请确保 Request Content-Type 是 `application/json`&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\xa0&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;类型。&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;```json&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;req.Headers.Add(&amp;quot;Content-Type&amp;quot;, &amp;quot;application/json&amp;quot;)&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;```&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n\n\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;## User-Agent Header&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;为了确保我们能知道访问者是谁，API 要求必须传递 `User-Agent` Header，否则将会拒绝请求。&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;例如:&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;```go&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;req.Headers.Add(&amp;quot;User-Agent&amp;quot;, &amp;quot;这里可以填应用名称&amp;quot;)&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;```&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;## 用户认证&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;:::info&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;语雀所有的开放 API 都需要 Token 验证之后才能访问。&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;:::&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;语雀 API 目前使用 Token 机制来实现用户认证。&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;你需要在请求的 HTTP Headers 传入 `X-Auth-Token` 带入用户的 Token 信息，用于认证。&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;获取 Token 可通过点击语雀的个人头像，并进入&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\xa0&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;[个人设置](/settings/tokens)&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\xa0&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;页面拿到，如下图：&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;![image.png](https://shub.weiyan.tech/yuque/elog-cookbook-img/Ftmao2sZGPlHd1zuq0XnqRycFqMh.png)&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n\n\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;**For example**&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;```bash&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;curl -H &amp;quot;X-Auth-Token: gCmkIlgAtuc3vFwpLfeM1w==&amp;quot; https://www.yuque.com/api/v2/hello&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;```&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;**Response**&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;```json&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;  &amp;quot;data&amp;quot;:{&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;    &amp;quot;message&amp;quot;:&amp;quot;Hello 小明&amp;quot;&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;  }&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;```&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;`X-Auth-Token` 依据用户有的权限，决定了能获取到的数据，例如，假如 “小明” 这个账号是 “[语雀/帮助](/yuque/help)” 这个文档仓库的 `Owner`，那么通过他的 Token 可以获取到这个仓库的所有信息。&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;其他情况由具体的功能权限设定来决定能获取到什么样的数据，以及那些数据有修改权限，详见后面 API 的具体接口返回的 `abilities` 描述。&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;## HTTP 状态码&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;- 200 - 成功&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;- 400 - 请求的参数不正确，或缺少必要信息，请对比文档&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;- 401 - 需要用户认证的接口用户信息不正确&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;- 403 - 缺少对应功能的权限&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;- 404 - 数据不存在，或未开放&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;- 500 - 服务器异常&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;## 参数说明&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;| Name | Description | Example |&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;| --- | --- | --- |&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;| id | 数据的唯一编号/主键 | 1984 |&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;| login | 用户／团队的唯一名称&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;用户／团队编号 | 用户：用户个人路径&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;团队：如[语雀团队](/yuque)，login 值为 `yuque` |&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;| book_slug | 仓库唯一名称 | 如[语雀开发者文档](/yuque/developer)这个仓库，`book_slug` 值为 `developer`** ** |&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;| namespace | 仓库的唯一名称&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;需要组合&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\xa0&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;`:login/:book_slug`&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;或可以直接使用仓库编号 | `yuque/developer` |&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;| slug | 文档唯一名称 | 如[当前这篇文档](/yuque/developer/api)的 slug 值为   `api` |&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;## 返回数据格式&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;- JSON 格式&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;```json&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;  &amp;quot;data&amp;quot;: {&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;    &amp;quot;id&amp;quot;: 10,&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;    &amp;quot;slug&amp;quot;: &amp;quot;weekly&amp;quot;,&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;    &amp;quot;name&amp;quot;: &amp;quot;技术周刊&amp;quot;,&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;    &amp;quot;abilities&amp;quot;: {&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;      &amp;quot;update&amp;quot;: false,&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;      &amp;quot;destroy&amp;quot;: false&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;    }&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;  },&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;  &amp;quot;meta&amp;quot;: {&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;    &amp;quot;liked&amp;quot;: false,&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;    &amp;quot;followed&amp;quot;: false,&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;  }&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;```&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;- id: 每个数据都会有的，Resource 的唯一编号，后续很多地方你可能需要用它查询&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;- abilities: 表述当前登陆者对于此资源的权限&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;- meta: 一些附加信息，例如是否赞过，是否关注过&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;## Rate Limit 访问频率限制&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;- 匿名请求，IP 限制, 200 次/小时&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;- 传递 Token 的情况下，每个用户（基于 Token 关联到的账户），5000 次/小时；&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;每次请求 `Response Header` 将会返回频率限制的信息，例如：&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;```&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;X-RateLimit-Limit: 100&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;X-RateLimit-Remaining: 75&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;```&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;- `X-RateLimit-Limit` - 总次数&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;- `X-RateLimit-Remaining` - 剩余次数&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;如果超过限制，将会返回:&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;```&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;HTTP/1.1 429 Too Many Requests&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;```&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;## DateTime 格式&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;DateTime 使用&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\xa0&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601)&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\xa0&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;标准格式，请按照标准方式进行转换。&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;In&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;48&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;语雀图片备份处理&#34;&gt;语雀图片备份处理&lt;a class=&#34;headerlink&#34; href=&#34;#语雀图片备份处理&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;语雀的图片可以直接下载到本地（参考：&lt;a href=&#34;https://github.com/shenweiyan/YQExportMD&#34;&gt;https://github.com/shenweiyan/YQExportMD&lt;/a&gt;），或者使用镜像回源的方式直接转存到阿里云/腾讯云.....的对象存储中（参考：&lt;a href=&#34;https://www.yuque.com/shenweiyan/cookbook/sync-from-yuque-to-oss?view=doc_embed&#34;&gt;语雀图片的同步迁移解决方案&lt;/a&gt;），这里暂时不展开。&lt;/p&gt;
&lt;h2 id=&#34;写在最后&#34;&gt;写在最后&lt;a class=&#34;headerlink&#34; href=&#34;#写在最后&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;基于 API 的语雀文章备份/导出，对于 markdown 的文档是一个不错的解决方案，但对于数据表、小记和其他一些记录则不适用，目前也暂时没有更好的方案。&lt;/p&gt;
&lt;p&gt;所以，如果你使用语雀作为你的 markdown 博客平台，只要 API 还在备份目前是不需要担心的！&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E8%AF%AD%E9%9B%80%E6%8A%80%E5%B7%A7/2022-12-02-try-yuque-api/</link>
      <pubDate>Fri, 02 Dec 2022 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E8%AF%AD%E9%9B%80%E6%8A%80%E5%B7%A7/2022-12-02-try-yuque-api/</guid>
      
    </item>
    
    <item>
      <title>NCBI Blast 源码编译安装方法</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2022-12-01&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2022-12-01T00:00:00&#39;&gt;2022-12-01&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2024-08-30&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2024-08-30T00:00:00&#39;&gt;2024-08-30&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;CentOS 6.5 的老服务器没法直接使用官方提供的二进制版本，其中最要命的提示就是 Glibc 的版本太低，且非 root 用户手动升级 glibc 基本是个无解的难题。于是考虑从官方提供的 Blast+ 源码进行手动编译安装。&lt;/p&gt;
&lt;p&gt;虽然 Blast 官网的帮助文档中没有提到如何从源代码编译出 Blast，但是却在 &lt;code&gt;ncbi-blast-2.xx.x+-src/c++/src/algo/blast/core/README&lt;/code&gt; 里面交代了在各个平台下编译 Blast 的方式。这里就直接把它的内容转发如下，以作补充：&lt;/p&gt;
&lt;h3 id=&#34;获取源代码&#34;&gt;获取源代码&lt;a class=&#34;headerlink&#34; href=&#34;#获取源代码&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Download the source distribution of BLAST+:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://ftp.ncbi.nlm.nih.gov/blast/executables/blast+/&#34;&gt;https://ftp.ncbi.nlm.nih.gov/blast/executables/blast+/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;安装与构建说明&#34;&gt;安装与构建说明&lt;a class=&#34;headerlink&#34; href=&#34;#安装与构建说明&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Unpack the source archive in its installation directory and change working directory to ncbi-blast-VERSION+-src/c++.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;UNIX&lt;/strong&gt;
To build these source files into a library without the rest of the NCBI BLAST+ applications/libraries, one should use the following commands:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;./configure&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--with-projects&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;scripts/projects/blast_core_lib.lst&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;--without-debug&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--with-mt&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--with-build-root&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;ReleaseMT
&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ReleaseMT/build
make&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;all_p
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;make 编译 blast 非常耗时间，大概 2 个小时后编译结束，在 &lt;code&gt;./ReleaseMT/bin&lt;/code&gt; 下会生成各种二进制可执行文件。把这个目录加入到 &lt;code&gt;PATH&lt;/code&gt; 中，你就可以使用 Blast 的各种工具了。&lt;/p&gt;
&lt;p&gt;This will configure and build an optimized library called blast, which can then be referenced in makefiles as follows:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;NCBI_HOME&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;installation&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;directory&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;of&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;the&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;NCBI&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;C&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;++&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;toolkit&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;I&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;NCBI_HOME&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;++/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ReleaseMT&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;inc&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;I&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;NCBI_HOME&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;++/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;include&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;L&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;NCBI_HOME&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;++/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ReleaseMT&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lib&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Windows&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Open the ncbi_cpp.sln project/solution file c++/compilers/msvc800_prj/static/build/ncbi_cpp.sln.&lt;/li&gt;
&lt;li&gt;Right click on the -CONFIGURE-DIALOG- project on the Solution Explorer and select &lt;strong&gt;&amp;ldquo;Build&amp;rdquo;&lt;/strong&gt; from the context menu, which will bring up a window titled &lt;strong&gt;&amp;ldquo;Project Tree Builder&amp;rdquo;&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;In the &amp;ldquo;Project Tree Builder&amp;rdquo; window&amp;rsquo;s first text box, enter scripts\projects\blast_core_lib.lst, click OK, and on the subsequent window click &amp;ldquo;Reload&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;After the environment reloads, right click on blast.lib and select &lt;strong&gt;&amp;ldquo;Build&amp;rdquo;&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The blast.lib library file will be found in c++\compilers\msvc800_prj\static\lib\CONF\blast.lib, where CONF represents the appropriate configuration (e.g.: debugdll, debugmt, releasedll, or releasemt), and the headers will be found in c++\compilers\msvc800_prj\static\inc and c++\include.&lt;/p&gt;
&lt;h3 id=&#34;安装与说明&#34;&gt;安装与说明&lt;a class=&#34;headerlink&#34; href=&#34;#安装与说明&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;h4 id=&#34;指定安装路径&#34;&gt;指定安装路径&lt;a class=&#34;headerlink&#34; href=&#34;#指定安装路径&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;在 &lt;strong&gt;&lt;code&gt;configure&lt;/code&gt;&lt;/strong&gt; 一步，我们可以使用 &lt;code&gt;--with-build-root&lt;/code&gt; 指定 blast 的安装路径：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;--with-build-root=ReleaseMT&lt;/code&gt;，将会安装到当前目录的 ReleaseMT 目录下；    &lt;br /&gt;
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FoG_RuZNkxg3zk0ce5iDaQaYUYbr.png&#34; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;--with-build-root=/usr/local/shenweiyan/ncbi-blast-2.13.0+&lt;/code&gt;，将会安装到该指定的路径中。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;gcc-版本与环境配置&#34;&gt;GCC 版本与环境配置&lt;a class=&#34;headerlink&#34; href=&#34;#gcc-版本与环境配置&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;ncbi-blast-2.13.0+ 的源码编译安装要求 &lt;strong&gt;GCC 7.1 or newer&lt;/strong&gt;：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;configure:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;error:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Please&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;upgrade&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;a&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;compiler&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;supporting&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;C++&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;17&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;such&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;as&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;GCC&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;7&lt;/span&gt;.1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;or&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;newer.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;GCC 的手动编译安装还是挺简单的，参考：《&lt;a href=&#34;https://www.yuque.com/shenweiyan/cookbook/linux-gcc-install?view=doc_embed&#34;&gt;非 root 用户手动编译安装 GCC&lt;/a&gt;》&lt;/p&gt;
&lt;p&gt;GCC 安装完以后需要执行以下两步：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;把可执行程序添加到 PATH 环境：&lt;strong&gt;&lt;code&gt;export PATH=/Path/To/gcc-7.3.0/bin:$PATH&lt;/code&gt;&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;解决 &lt;strong&gt;&lt;code&gt;libstdc++.so.6: version&lt;/code&gt;GLIBCXX_3.4.22&amp;rsquo; not found`&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FpcXY1qyhMM4EIGgd5lx2ashEm8-.png&#34; /&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;LD_LIBRARY_PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/Path/To/gcc-7.3.0/lib:/Path/To/gcc-7.3.0/lib64:&lt;span class=&#34;nv&#34;&gt;$LD_LIBRARY_PATH&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E7%94%9F%E4%BF%A1%E5%B7%A5%E5%85%B7%E4%B8%8E%E5%BA%94%E7%94%A8/2022-12-01-build-blast-from-src/</link>
      <pubDate>Thu, 01 Dec 2022 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E7%94%9F%E4%BF%A1%E5%B7%A5%E5%85%B7%E4%B8%8E%E5%BA%94%E7%94%A8/2022-12-01-build-blast-from-src/</guid>
      
    </item>
    
    <item>
      <title>博客 | Hugo 博客使用 Fancybox</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2022-11-07&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2022-11-07T00:00:00&#39;&gt;2022-11-07&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2024-11-05&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2024-11-05T00:00:00&#39;&gt;2024-11-05&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;这本来是来自于 atpX 博客上的一篇文章——《&lt;a href=&#34;https://atpx.com/hugo-fancybox/&#34;&gt;Hugo 使用 Fancybox 实现图片灯箱/放大功能&lt;/a&gt;》，个人把它应用到了自己的 &lt;a href=&#34;https://github.com/shenweiyan/ICS-Hugo-Theme&#34;&gt;ICS-Hugo-Theme&lt;/a&gt; 小破主题之中，特意记录一下。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;最开始的思路是通过 js 实现，但效率似乎不高，实现起来也麻烦。对于 Hugo 本身的 Markdown 渲染方式也没有过多的了解，网上的方法大多是引入 Fancybox 组件后通过 shortcode 的方式调用 html 实现，但这样的话以前文章的图片还得去一个一个修改，平时写起来也麻烦。&lt;/p&gt;
&lt;p&gt;好在无意中看到了 &lt;a href=&#34;https://github.com/flysnow-org/maupassant-hugo&#34;&gt;Maupassant&lt;/a&gt; 主题的一个 &lt;a href=&#34;https://github.com/flysnow-org/maupassant-hugo/pull/111/commits/ff9aac2e051e74ccb58278f151b133c171492721&#34;&gt;PR&lt;/a&gt;，查阅文档后发现他的方法是新增一个 render-image.html 文件，通过 &lt;a href=&#34;https://gohugo.io/getting-started/configuration-markup#markdown-render-hooks&#34;&gt;Markdown Render Hooks&lt;/a&gt; 的方式覆盖 Hugo 的 Markdown 渲染方式，就可以轻松的解析和处理图片内容，结构如下：&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;layouts&lt;/span&gt;
&lt;span class=&#34;err&#34;&gt;└──&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;_default&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;└──&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;_markup&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;├──&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;render&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;image&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;html&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;├──&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;render&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;image&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rss&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;xml&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;└──&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;render&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;link&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;html&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;官方解释可以通过该文件实现替换链接，修改&lt;code&gt;img&lt;/code&gt;样式，例如添加&lt;code&gt;target=_blank&lt;/code&gt;属性等功能。&lt;/p&gt;
&lt;p&gt;因此，只要借助这个方法，就可以轻松的实现 Fancybox 的功能了，你只需要做以下三步：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;修改网站根目录下的&lt;code&gt;config.toml&lt;/code&gt;或者&lt;code&gt;config.yaml&lt;/code&gt;文件，我的配置文件为 toml 格式，yaml 需要自行调整格式，在&lt;code&gt;[param]&lt;/code&gt;参数下添加以下内容：&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;param&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fancybox&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;在你的主题目录下创建以下路径和文件：&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;layouts&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;_default&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;_markup&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;render&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;image&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;html&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;编辑&lt;code&gt;render-image.html&lt;/code&gt;添加以下内容：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;err&#34;&gt;{{&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Page&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Site&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Params&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fancybox&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;}}&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;ss&#34;&gt;&amp;quot;post-img-view&amp;quot;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fancybox&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;ss&#34;&gt;&amp;quot;gallery&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;href&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;ss&#34;&gt;&amp;quot;{{ .Destination | safeURL }}&amp;quot;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;src&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;ss&#34;&gt;&amp;quot;{{ .Destination | safeURL }}&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;alt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;ss&#34;&gt;&amp;quot;{{ .Text }}&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;{{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;with&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Title&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;}}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;ss&#34;&gt;&amp;quot;{{ . }}&amp;quot;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;{{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;end&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;}}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&#34;err&#34;&gt;{{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;end&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;}}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;在你主题&lt;code&gt;layouts/partials&lt;/code&gt;目录下的&lt;code&gt;head.html&lt;/code&gt;或者&lt;code&gt;footer.html&lt;/code&gt;中添加：&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;err&#34;&gt;{{&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Page&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Site&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Params&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fancybox&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;}}&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;script&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;src&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;ss&#34;&gt;&amp;quot;https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.min.js&amp;quot;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;script&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;link&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rel&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;ss&#34;&gt;&amp;quot;stylesheet&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;href&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;ss&#34;&gt;&amp;quot;https://cdn.jsdelivr.net/gh/fancyapps/fancybox@3.5.7/dist/jquery.fancybox.min.css&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;script&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;src&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;ss&#34;&gt;&amp;quot;https://cdn.jsdelivr.net/gh/fancyapps/fancybox@3.5.7/dist/jquery.fancybox.min.js&amp;quot;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;script&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&#34;err&#34;&gt;{{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;end&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;}}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;接下来就可以直接&lt;code&gt;hugo server&lt;/code&gt;看看效果了，如果你后面不想在使用 Fancybox，只需要将第一步中的&lt;code&gt;true&lt;/code&gt;改为 &lt;code&gt;false&lt;/code&gt;即可。其实如果常态化使用的话，就不需要判断了，可以跳过第一步，把第二步和第三步中的&lt;code&gt;{{if .Page.Site.Params.fancybox }}&lt;/code&gt;和&lt;code&gt;{{ end }}&lt;/code&gt;去掉。&lt;/p&gt;
&lt;p&gt;不过通过 Markdown hooks 的方式修改图片会有一个小问题，就是在图片的上面和下面会出现空白的&lt;code&gt;&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;/code&gt;标签，如果你感兴趣的话可以看看这个具体讨论的 &lt;a href=&#34;https://github.com/gohugoio/hugo/issues/6748&#34;&gt;issue&lt;/a&gt;。&lt;/p&gt;
&lt;/blockquote&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E9%9D%99%E6%80%81%E7%BD%91%E7%AB%99/2022-11-07-dgw4bs/</link>
      <pubDate>Mon, 07 Nov 2022 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E9%9D%99%E6%80%81%E7%BD%91%E7%AB%99/2022-11-07-dgw4bs/</guid>
      
    </item>
    
    <item>
      <title>旧版 QQ 邮箱切换到新版本 UI</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2022-10-13&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2022-10-13T00:00:00&#39;&gt;2022-10-13&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2022-10-27&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2022-10-27T12:24:53&#39;&gt;2022-10-27&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;旧版本的 QQ 邮箱用的是：mail.qq.com，新版本 QQ 邮箱是：wx.mail.qq.com，一般现在新注册的 QQ 邮箱用的都是 wx.mail.qq.com，如果你想把旧版本的 QQ 邮箱也切换到新的 UI，可以参考这个方法。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;截止 2022.10.13，本人测试该方法确实有效；如有失效，欢迎提醒。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;❣️ 前提：&lt;/strong&gt;
&lt;strong&gt;经测试，旧 QQ 邮箱如果设置了 &amp;ldquo;其他邮箱&amp;rdquo;，即使用 QQ 邮箱代收其他邮箱的功能，本方法无效！&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;登陆旧版本的 QQ 邮箱，把邮箱设置改成英语，保存，刷新，然后再改成中文，保存，刷新，就切换到新版 UI 了。&lt;/strong&gt;
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FkpLyDrdreSyglhQUKdCUB721S8E.png&#34; /&gt;
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fn_tz8II2gbQcBISKeAaMqscxvyG.png&#34; /&gt;
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fv9QdKsrlH1qrOFwKgVakIcTTSou.png&#34; /&gt;
从新版本 QQ 邮箱切换回来旧版本：
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fmw9DVDjFEbiy-SVihWdXxzQWKp-.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;参考资料&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;《&lt;a href=&#34;https://www.v2ex.com/t/886502&#34;&gt;腾讯为什么不把 qq 邮箱好好整一下？&lt;/a&gt;》，V2EX&lt;/li&gt;
&lt;/ul&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/Windows/2022-10-13-bz17cy/</link>
      <pubDate>Thu, 13 Oct 2022 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/Windows/2022-10-13-bz17cy/</guid>
      
    </item>
    
    <item>
      <title>Gnuplot：安装与使用备忘</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2022-09-15&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2022-09-15T00:00:00&#39;&gt;2022-09-15&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2022-09-15&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2022-09-15T14:45:47&#39;&gt;2022-09-15&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id=&#34;异常信息&#34;&gt;异常信息&lt;a class=&#34;headerlink&#34; href=&#34;#异常信息&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;问题起源于 signalp-4.1 调用 gnuplot 进行画图，在画图的时候提示不支持 png 格式结果：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;gnuplot&lt;/span&gt;

&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;G&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;N&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;U&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;P&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;L&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;O&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;T&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Version&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;5.0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;patchlevel&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;last&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;modified&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2015-01-01&lt;/span&gt;

&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;Copyright &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;C&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1986-1993&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1998&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2004&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2007-2015&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Thomas&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Williams&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Colin&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Kelley&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;and&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;many&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;others&lt;/span&gt;

&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;gnuplot&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;home&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;http&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;://&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;www.gnuplot.info&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;faq&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bugs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;etc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;help FAQ&amp;quot;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;immediate&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;help&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;help&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;plot&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;window&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hit&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;h&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;Terminal&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;to&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;x11&amp;#39;&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;gnuplot&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;term&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;png&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;font&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;Helvetica,12&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 您必须在绘图前设置终端和输出文件名&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Terminal&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;to&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;unknown&amp;#39;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;                  &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;^&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;         &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;unknown&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;or&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ambiguous&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;terminal&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;just&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;set terminal&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;list&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;gnuplot&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;term&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;png&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;font&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;Helvetica,12&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Terminal&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;to&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;unknown&amp;#39;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;                  &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;^&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;         &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;unknown&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;or&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ambiguous&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;terminal&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;just&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;set terminal&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;list&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;gnuplot&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;terminal&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 查看 gnuplot 支持的设置格式&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;Available&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;terminal&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;types&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;           &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;canvas&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;HTML&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Canvas&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;object&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;              &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cgm&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Computer&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Graphics&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Metafile&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;context&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ConTeXt&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;with&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;MetaFun &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;PDF&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;documents&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;corel&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EPS&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;format&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;CorelDRAW&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;             &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dumb&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ascii&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;art&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;anything&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;that&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;prints&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;text&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;              &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dxf&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dxf&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;AutoCad &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;default&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;120&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x80&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;eepic&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;EEPIC&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;extended&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;LaTeX&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;picture&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;environment&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;              &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;emf&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Enhanced&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Metafile&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;format&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;emtex&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;LaTeX&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;picture&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;environment&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;with&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;emTeX&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;specials&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;         &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;epslatex&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;LaTeX&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;picture&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;environment&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;using&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;graphicx&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;package&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;              &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fig&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;FIG&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;graphics&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;language&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;XFIG&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;graphics&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;editor&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;             &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hpgl&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;HP7475&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;and&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;relatives&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;number&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;of&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pens&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;eject&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;latex&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;LaTeX&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;picture&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;environment&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;               &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mf&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Metafont&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;plotting&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;standard&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;               &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mp&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MetaPost&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;plotting&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;standard&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;             &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pcl5&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;HP&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Designjet&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;750&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;C&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;HP&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Laserjet&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;III&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;IV&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;etc. &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;many&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;options&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;             &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;......&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;因此考虑重装 gnuplot，以支持 png, jpeg, and gif terminals，具体步骤如下。&lt;/p&gt;
&lt;h2 id=&#34;安装-gd-library-库&#34;&gt;安装 GD library 库&lt;a class=&#34;headerlink&#34; href=&#34;#安装-gd-library-库&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;GD （&lt;a href=&#34;https://github.com/libgd/libgd&#34;&gt;https://github.com/libgd/libgd&lt;/a&gt;）是一个用于程序员动态创建和处理图像的开源库。手动安装步骤如下。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;curl&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;LjO&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;https&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;://&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;github.com&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;libgd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;libgd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;releases&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;download&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;gd&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;-2.2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;libgd&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;-2.2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;.tar.gz&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tar&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;zvxf&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;libgd&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;-2.2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;.tar.gz&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;libgd&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;-2.2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;5&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;configure&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;prefix&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Bioinfo&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SoftWare&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;libgd&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;-2.2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;5&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;make&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;make&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;安装-gnuplot&#34;&gt;安装 Gnuplot&lt;a class=&#34;headerlink&#34; href=&#34;#安装-gnuplot&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;官网：&lt;a href=&#34;http://www.gnuplot.info/&#34;&gt;http://www.gnuplot.info/&lt;/a&gt;
注意：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;configure 时需要把前一步安装好的 libgd 加进去；&lt;/li&gt;
&lt;li&gt;make install 如遇一下类似 Permission denied, 可忽略，不影响使用。&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;wget&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;http&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;://&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ftp.cstug.cz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pub&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;CTAN&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;graphics&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;gnuplot&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;5.2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;6&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;gnuplot&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;-5.2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;6&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;.tar.gz&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tar&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;zvxf&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;gnuplot&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;-5.2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;6&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;.tar.gz&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;gnuplot&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;-5.2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;6&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;configure&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;prefix&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Bioinfo&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SoftWare&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;gnuplot&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;-5.2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;6&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;with&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;gd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Bioinfo&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SoftWare&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;libgd&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;-2.2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;LDFLAGS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;-L/Bioinfo//SoftWare/libgd-2.2.5/lib&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;CPPFLAGS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;-I/Bioinfo/SoftWare/libgd-2.2.5/include&amp;quot;&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;checking&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;BSD&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;compatible&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;install...&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;usr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bin&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;install&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;checking&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;whether&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;build&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;environment&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;is&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sane...&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;yes&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;checking&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;thread&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;safe&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mkdir&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;p...&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bin&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mkdir&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;p&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;checking&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;gawk...&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;gawk&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;......&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;**&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Configuration&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;summary&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;gnuplot&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;5.2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;6&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;gnuplot&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;will&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;be&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;compiled&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;with&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;the&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;following&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;terminals&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;

&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Standalone&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;terminals&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;yes &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;always&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;builtin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;canvas&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cgm&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;context&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dumb&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dxf&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;eepic&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;emf&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;emtex&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;epslatex&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fig&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hpgl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;latex&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;metafont&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;metapost&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mif&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pcl5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;postscript&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pslatex&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pstex&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pstricks&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;qms&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;svg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tek40xx&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tek410x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;texdraw&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tgif&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tkcanvas&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tpic&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;vttek&lt;/span&gt;

&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dot&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;matrix&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;terminals&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;no &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;use&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;with&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bitmap&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;terminals&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;to&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;enable&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;epson&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;nec&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;okidata&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tandy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;and&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;seiko&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dp414&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;printers&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hp500c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hpdj&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hpljii&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hppj&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pbm&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sixel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;starc&lt;/span&gt;

&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;X&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Window&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;System&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;terminal&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;yes&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;with&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;multi&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;byte&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fonts&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;enable&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;plotting&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;to&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;windows&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;opened&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;by&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;external&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;apps&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;with&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;application&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;defaults&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;etc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;X11&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;app&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;defaults&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;linux&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;terminal &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;vga&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;no &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;use&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;with&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;linux&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;vga&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;to&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;enable&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;vgagl&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;terminal &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;vga&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;no &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;use&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;with&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;linux&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;vga&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;to&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;enable&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ggi&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;terminal&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;no &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;use&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;with&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ggi&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;to&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;enable&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;requires&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;libggi&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;gpic&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;terminal&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;no   &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;use&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;with&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;gpic&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;to&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;enable&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mif&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;terminal&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;no   &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;use&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;with&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mif&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;to&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;enable&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;caca&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;terminal&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;no &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;use&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;with&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;caca&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;to&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;enable&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;aqua&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;terminal &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;OSX&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;no&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;libgd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;based&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;png&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;jpeg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;and&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;gif&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;terminals&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;yes &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;with&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;animated&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;gif&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cairo&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;based&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;terminals&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;no &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;requires&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cairo&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1.2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pango&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1.22&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;glib&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2.28&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lua&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;TikZ&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;terminal&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;no&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;wxt&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;terminal&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;no &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;requires&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;C&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;wxWidgets&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2.6&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cairo&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0.9&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pango&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1.22&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Qt&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;terminal&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;yes &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;qt4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Additional&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;platform&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;specific&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;or&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;older&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;terminals&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;omitted&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;by&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;default&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;gpic&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;mif &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;FrameMaker&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hp2623a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hp2648&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;imagen&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;kyocera&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;pm &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;makefile.os2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;be &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;BeOS&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;svga &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MSDOS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;djgpp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;windows &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;several&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;options&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;gnuplot&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;will&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;be&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;compiled&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;with&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;the&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;following&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;configurable&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;features&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;

&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Mouse&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;support&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;interactive&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;terminals&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;yes&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Typing&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;space&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;plot&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;window&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;raises&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;console&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Placement&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;of&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rectangles&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;and&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;other&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;objects&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;yes&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Readline&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;library&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;GNU&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;readline&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;library&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;with&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lncurses&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Command&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;line&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;history&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;yes&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Check&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;current&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;directory&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;.gnuplot&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;no &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;use&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;with&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cwdrc&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;to&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;enable&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Sort&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;help&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;subtopic&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tables&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;by&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;column&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;no &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;use&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;without&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;row&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;help&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;to&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;enable&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;cerf&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;and&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;other&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;special&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;functions&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;no &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;libcerf&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;not&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;found&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;plugin&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;support&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;loading&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;external&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;functions&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;yes&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Use&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;TeX&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;kpsexpand&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;to&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;search&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fonts&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;no &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;use&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;with&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;kpsexpand&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;to&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;enable&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Hidden3d&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;optimization &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;gridbox&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;quadtree&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;none&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;quadtree&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Allow&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;deprecated&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;syntax&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;no &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;use&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;enable&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;backwards&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;compatibility&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Statistical&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;summary&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;of&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;data &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;stats&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;command&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;yes&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;......&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;make&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;make&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;install&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# 如遇一下 Permission denied, 可忽略，不影响使用&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;......&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;make&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Nothing&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;to&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;be&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;done&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;`install-exec-am&amp;#39;.&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt; /bin/mkdir -p &amp;#39;/Bioinfo/APPS/texlive/texmf-local/tex/latex/gnuplot&amp;#39;&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;/bin/mkdir: cannot create directory `&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Bioinfo&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;APPS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;texlive&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;texmf&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;local&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tex&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;latex&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;gnuplot&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;: Permission denied&lt;/span&gt;
&lt;span class=&#34;s&#34;&gt;make[3]: *** [install-texDATA] Error 1&lt;/span&gt;
&lt;span class=&#34;s&#34;&gt;make[3]: Leaving directory `/Bioinfo/Pipeline/src/pkgs/gnuplot-5.2.6/share/LaTeX&amp;#39;&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;make&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;***&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;install&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;am&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Error&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;make&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Leaving&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;directory&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;`/Bioinfo/Pipeline/src/pkgs/gnuplot-5.2.6/share/LaTeX&amp;#39;&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;make[1]: *** [install-recursive] Error 1&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;make[1]: Leaving directory `&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Bioinfo&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Pipeline&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;src&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pkgs&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;gnuplot&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;-5.2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;6&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;share&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;make&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;***&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;install&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;recursive&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Error&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;注意：configure 的提示（libgd-based png, jpeg, and gif terminals: yes）&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FiH_owHy0-t8olR5zdMPMOFRpS8p.png&#34; title=&#34;注意：configure 的提示（libgd-based png, jpeg, and gif terminals: yes）&#34; /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;集群运行时，如遇上以下报错，执行一下&lt;code&gt;**ldd /Bioinfo/SoftWare/gnuplot-5.2.6/bin/gnuplot**&lt;/code&gt;，把缺失的对应指向的 libQt*.so 拷贝到一个指定目录，然后增加一个&lt;code&gt;**export LD_LIBRARY_PATH=/Bioinfo/SoftWare/gnuplot-5.2.6/customlib:$LD_LIBRARY_PATH**&lt;/code&gt;即可。&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;gnuplot&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;error&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;while&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;loading&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;shared&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;libraries&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;libQtNetwork.so.4&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cannot&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;open&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;shared&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;object&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;No&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;such&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;or&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;directory&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Ft6ClOMih9B9QcaFlzddhuXecFUM.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;简单绘图&#34;&gt;简单绘图&lt;a class=&#34;headerlink&#34; href=&#34;#简单绘图&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;安装完成后，进入 gnuplot 简单画图并保存为 plot.png。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;gnuplot&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;term&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;png&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;font&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;Helvetica,12&amp;quot;&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;Terminal&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;is&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;now&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;png&amp;#39;&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Options&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;are&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;nocrop enhanced size 640,480 font &amp;quot;Helvetica,12.0&amp;quot; &amp;#39;&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;gnuplot&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;output&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;plot.png&amp;quot;&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;gnuplot&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;plot&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;sin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;gnuplot&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;exit&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fik8q2KEXSU_-YS3EDeKD7i2v-Jr.png&#34; /&gt;&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E5%9B%BE%E5%83%8F%E4%B8%8EGUI/2022-09-15-xydp3a/</link>
      <pubDate>Thu, 15 Sep 2022 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E5%9B%BE%E5%83%8F%E4%B8%8EGUI/2022-09-15-xydp3a/</guid>
      
    </item>
    
    <item>
      <title>多重视窗管理程序 screen</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2022-09-09&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2022-09-09T00:00:00&#39;&gt;2022-09-09&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2023-07-19&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2023-07-19T15:19:03&#39;&gt;2023-07-19&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;当我们在使用 MobaXterm/XShell 进行远程访问服务器时，进行远程访问的界面往往不能关掉，否则，程序将不再运行。而且，程序在运行的过程中，还必须时刻保证网络的通常，这些条件都很难得到满足。&lt;/p&gt;
&lt;p&gt;为了解决上述问题，可以使用 Linux 下的 &lt;code&gt;screen&lt;/code&gt; 命令，即使网络连接中断，用户也不会失去对已经打开的命令行会话的控制。下面介绍一些常用的 &lt;code&gt;screen&lt;/code&gt; 命令。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;screen&lt;/code&gt; 为多重视窗管理程序。此处所谓的视窗，是指一个全屏幕的文字模式画面。通常只有在使用 telnet 登入主机或是使用老式的终端机时，才有可能用到 &lt;code&gt;screen&lt;/code&gt; 程序。具体使用如下：&lt;/p&gt;
&lt;p&gt;我们可以使用 &lt;code&gt;screen -S name&lt;/code&gt; 创建一个叫做 &lt;strong&gt;name&lt;/strong&gt; 的 session，这时我们要进入该 session，需要使用 &lt;code&gt;screen -r name&lt;/code&gt; 进入到该 session 中，此时就可以在该 session 里进行操作了，如运行程序。之后我们可以使用 &lt;code&gt;Ctrl + a + d&lt;/code&gt; 命令将该 session 丢到后台进行处理。&lt;/p&gt;
&lt;h2 id=&#34;语法&#34;&gt;语法&lt;a class=&#34;headerlink&#34; href=&#34;#语法&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;screen&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-AmRvx&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-ls&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-wipe&lt;span class=&#34;o&#34;&gt;][&lt;/span&gt;-d&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;lt;作业名称&amp;gt;&lt;span class=&#34;o&#34;&gt;][&lt;/span&gt;-h&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;lt;行数&amp;gt;&lt;span class=&#34;o&#34;&gt;][&lt;/span&gt;-r&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;lt;作业名称&amp;gt;&lt;span class=&#34;o&#34;&gt;][&lt;/span&gt;-s&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;lt;shell&amp;gt;&lt;span class=&#34;o&#34;&gt;][&lt;/span&gt;-S&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;lt;作业名称&amp;gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;参数说明：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;-A 将所有的视窗都调整为目前终端机的大小。&lt;/li&gt;
&lt;li&gt;-d&amp;lt;作业名称&amp;gt; 将指定的 screen 作业离线。&lt;/li&gt;
&lt;li&gt;-h&amp;lt;行数&amp;gt; 指定视窗的缓冲区行数。&lt;/li&gt;
&lt;li&gt;-m 即使目前已在作业中的 screen 作业，仍强制建立新的 screen 作业。&lt;/li&gt;
&lt;li&gt;-r&amp;lt;作业名称&amp;gt; 恢复离线的 screen 作业。&lt;/li&gt;
&lt;li&gt;-R 先试图恢复离线的作业。若找不到离线的作业，即建立新的 screen 作业。&lt;/li&gt;
&lt;li&gt;-s&lt;shell&gt; 指定建立新视窗时，所要执行的 shell。&lt;/li&gt;
&lt;li&gt;-S&amp;lt;作业名称&amp;gt; 指定 screen 作业的名称。&lt;/li&gt;
&lt;li&gt;-v 显示版本信息。&lt;/li&gt;
&lt;li&gt;-x 恢复之前离线的 screen 作业。&lt;/li&gt;
&lt;li&gt;-ls 或&amp;ndash;list 显示目前所有的 screen 作业。&lt;/li&gt;
&lt;li&gt;-wipe 检查目前所有的 screen 作业，并删除已经无法使用的 screen 作业。  &lt;/li&gt;
&lt;/ul&gt;</description>
      <link>https://shenwy.com/yuque/%E7%BC%96%E7%A8%8B%E6%8A%80%E6%9C%AF/Shell/2022-09-09-screen/</link>
      <pubDate>Fri, 09 Sep 2022 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E7%BC%96%E7%A8%8B%E6%8A%80%E6%9C%AF/Shell/2022-09-09-screen/</guid>
      
    </item>
    
    <item>
      <title>AlphaFold：安装与使用备忘</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2022-09-08&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2022-09-08T00:00:00&#39;&gt;2022-09-08&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2022-10-08&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2022-10-08T15:34:09&#39;&gt;2022-10-08&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;官方在 GitHub 给出的源码（&lt;a href=&#34;https://github.com/deepmind/alphafold&#34;&gt;https://github.com/deepmind/alphafold&lt;/a&gt;）默认是基于 Docker 环境安装的，非 Docker 环境的安装参考：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;If you wish to run AlphaFold using Singularity (a common containerization platform on HPC systems) we recommend using some of the third party Singularity setups as linked in &lt;a href=&#34;https://github.com/deepmind/alphafold/issues/10&#34;&gt;#10&lt;/a&gt; or &lt;a href=&#34;https://github.com/deepmind/alphafold/issues/24&#34;&gt;#24&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;源码地址：&lt;a href=&#34;https://github.com/deepmind/alphafold&#34;&gt;https://github.com/deepmind/alphafold&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;非 Docker 环境下安装：&lt;a href=&#34;https://github.com/kalininalab/alphafold_non_docker&#34;&gt;https://github.com/kalininalab/alphafold_non_docker&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;问题一：
dm-tree 模块安装失败，需要把 alphafold-2.2.0/requirements.txt 中 dm-tree==0.1.6 调整为 &lt;strong&gt;dm-tree==0.1.7&lt;/strong&gt;！
问题二：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;sh download_db.sh -d \&lt;alphafold_data&gt; 数据库比较大，需要很长时间下载！&lt;/li&gt;
&lt;li&gt;如提示&lt;code&gt;**realpath: command not found**&lt;/code&gt;，可以使用&lt;code&gt;**readlink -f**&lt;/code&gt;进行替换！&lt;/li&gt;
&lt;/ul&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E7%94%9F%E4%BF%A1%E5%B7%A5%E5%85%B7%E4%B8%8E%E5%BA%94%E7%94%A8/2022-09-08-qyp3m9/</link>
      <pubDate>Thu, 08 Sep 2022 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E7%94%9F%E4%BF%A1%E5%B7%A5%E5%85%B7%E4%B8%8E%E5%BA%94%E7%94%A8/2022-09-08-qyp3m9/</guid>
      
    </item>
    
    <item>
      <title>RHEL6 ssh 到 RHEL9 的 no hostkey alg 错误</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2022-08-18&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2022-08-18T00:00:00&#39;&gt;2022-08-18&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2024-11-01&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2024-11-01T00:00:00&#39;&gt;2024-11-01&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;前一段时间把阿里云的一个轻量云服务器的系统升级到了 AlmaLinux release 9.0 (Emerald Puma)，开启 RHEL 9 系列的新体验。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fp2J6etLXPMJzUxy_TqI3q4deG0A.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;发现的第一个比较直观的问题：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;从 RHEL 6.x 的服务器 ssh 到 AlmaLinux 9 的轻量云服务器时候出现 no hostkey alg 错误！&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ssh&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;root@xxx.123.456.xx
no&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;hostkey&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;alg
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;一开始拿着这个错误去谷歌，看了一些回答（例如，KexAlgorithms 算法支持问题；权限问题，&lt;code&gt;/etc/ssh/ssh_host_*key&lt;/code&gt; 问题；等等）都没办法解决，后来去 AlmaLinux 社区提问，并参考了一些官方的文档说明，才最终把这个问题解决了。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Flgu92Si4SO1GDPjqVHq-UPUBRCX.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;从 RHEL9 的官网文档《&lt;a href=&#34;https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9/html-single/considerations_in_adopting_rhel_9/index#ref_considerations-security-crypto_changes-to-security&#34;&gt;1.0.2. Crypto-policies, RHEL core cryptographic components, and protocols&lt;/a&gt;（加密策略、RHEL 核心加密组件和协议）》可以看到 &lt;strong&gt;SHA-1&lt;/strong&gt; 已经在 RHEL9 中弃用了！&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;In RHEL 9, SHA-1 usage for signatures is restricted in the DEFAULT system-wide cryptographic policy. Except for HMAC, SHA-1 is no longer allowed in TLS, DTLS, SSH, IKEv2, DNSSEC, and Kerberos protocols. Individual applications not controlled by the RHEL system-wide crypto policies are also moving away from using SHA-1 hashes in RHEL 9.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;在 RHEL 9 中，用于签名的 SHA-1 用法在 DEFAULT 系统范围的加密策略中受到限制。除 HMAC 外，TLS、DTLS、&lt;strong&gt;SSH&lt;/strong&gt;、IKEv2、DNSSEC 和 Kerberos 协议中不再允许使用 &lt;strong&gt;SHA-1&lt;/strong&gt;。不受 RHEL 系统范围的加密策略控制的单个应用程序在 RHEL 9 中也不再使用 SHA-1 hashes。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;If your scenario requires the use of SHA-1 for verifying existing or third-party cryptographic signatures, you can enable it by entering the following command:&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;如果您的方案需要使用 &lt;strong&gt;SHA-1&lt;/strong&gt; 来验证现有或第三方加密签名，您可以通过输入以下命令来启用它：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# update-crypto-policies --set DEFAULT:SHA1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;或者，您可以将系统范围的加密策略切换到 &lt;code&gt;LEGACY&lt;/code&gt; 策略。请注意，&lt;code&gt;LEGACY&lt;/code&gt;还启用了许多其他不安全的算法。有关详细信息，请参阅 &lt;a href=&#34;https://docs.redhat.com/zh_hans/documentation/red_hat_enterprise_linux/9/html/security_hardening/index&#34;&gt;RHEL 9 Security hardening&lt;/a&gt;（RHEL 9 安全强化）文档中的 &lt;a href=&#34;https://docs.redhat.com/zh_hans/documentation/red_hat_enterprise_linux/9/html/security_hardening/using-the-system-wide-cryptographic-policies_security-hardening#proc_re-enabling-sha-1_using-the-system-wide-cryptographic-policies&#34;&gt;Re-enabling SHA-1&lt;/a&gt;（重新启用 SHA-1）部分。&lt;/p&gt;
&lt;h2 id=&#34;参考资料&#34;&gt;参考资料&lt;a class=&#34;headerlink&#34; href=&#34;#参考资料&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&#34;https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9/html-single/considerations_in_adopting_rhel_9/index#ref_considerations-security-crypto_changes-to-security&#34;&gt;1.0.2. Crypto-policies, RHEL core cryptographic components, and protocols&lt;/a&gt;，RHEL9 官网文档（英文）&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.redhat.com/zh_hans/documentation/red_hat_enterprise_linux/9/html/considerations_in_adopting_rhel_9/ref_considerations-security-crypto_changes-to-security&#34;&gt;20.2. crypto-policies、RHEL 内核加密组件和协议&lt;/a&gt;，Red Hat Product Documentation（中文）&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://almalinux.discourse.group/t/no-hostkey-alg-error-from-rhel6-ssh-to-almalinux9/1509&#34;&gt;No hostkey alg error from RHEL6 ssh to AlmaLinux9&lt;/a&gt;，AlmaLinux 社区&lt;/li&gt;
&lt;/ol&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%85%8D%E7%BD%AE%E4%BD%BF%E7%94%A8/2022-08-18-rhel-9-no-hostkey-alg/</link>
      <pubDate>Thu, 18 Aug 2022 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%85%8D%E7%BD%AE%E4%BD%BF%E7%94%A8/2022-08-18-rhel-9-no-hostkey-alg/</guid>
      
    </item>
    
    <item>
      <title>使用 wget/curl 下载 GitHub Release 生信软件包</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2022-08-11&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2022-08-11T00:00:00&#39;&gt;2022-08-11&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2023-03-02&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2023-03-02T17:00:13&#39;&gt;2023-03-02&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;我们在 Linux 服务器上安装软件，有时候需要在服务器下载 GitHub 上 Release 的一些资源(软件包)，这时候我们可以使用 wget 或者 curl 进行处理，这里拿 htslib 开源的配置中心 &lt;a href=&#34;https://github.com/samtools/htslib&#34;&gt;HTSlib&lt;/a&gt; 为例，下载他的 Release 版本。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FrJ3Wgrjg32ZA0B7aW_OxPSi6Mdt.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;wget&#34;&gt;wget&lt;a class=&#34;headerlink&#34; href=&#34;#wget&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;wget&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--no-check-certificate&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--content-disposition&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://github.com/samtools/htslib/releases/download/1.15.1/htslib-1.15.1.tar.bz2
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;wget 使用注意点，详细说说每个参数的含义，用法，并举例。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;#https://blog.csdn.net/xiliunian/article/details/104313511&lt;/span&gt;
nohup&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;wget&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-c&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--no-check-certificate&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--no-proxy&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://figshare.com/ndownloader/files/30835246&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;
nohup&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;wget&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-c&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://s3-eu-west-1.amazonaws.com/pfigshare-u-files/30835246/ILD_alldataset_population_noSCT.rds?X-Amz-Algorithm&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;AWS4-HMAC-SHA256&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;X-Amz-Credential&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;AKIAIYCSROOA/20230224/eu-west-1/s3/aws4_request&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;X-Amz-Date&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;20230224T170124Z&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;X-Amz-Expires&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;X-Amz-SignedHeaders&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;host&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;X-Amz-Signature&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;102d79611095e5cba52b2903044c2ba341c26&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;

nohup&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;wget&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-c&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--no-check-certificate&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--user-agent&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://figshare.com/ndownloader/files/30835246&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;

nohup&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;wget&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-c&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--no-check-certificate&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--user-agent&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://figshare.com/ndownloader/files/30836776&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;

nohup&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;curl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://s3-eu-west-1.amazonaws.com/pfigshare-u-files/30835246/ILD_alldataset_population_noSCT.rds?X-Amz-Algorithm&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;AWS4-HMAC-SHA256&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;X-Amz-Credential&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;AV5JSSROOA/20230224/eu-west-1/s3/aws4_request&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;X-Amz-Date&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;20230224T170124Z&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;X-Amz-Expires&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;X-Amz-SignedHeaders&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;host&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;X-Amz-Signature&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;102fxxxxxxc2ba341c26&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;
nohup&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;curl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-C&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://s3-eu-west-1.amazonaws.com/pfigshare-u-files/30835246/ILD_alldataset_population_noSCT.rds?X-Amz-Algorithm&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;AWS4-HMAC-SHA256&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;X-Amz-Credential&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;AKI5JSSROOA/20230224/eu-west-1/s3/aws4_request&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;X-Amz-Date&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;20230224T170820Z&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;X-Amz-Expires&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;X-Amz-SignedHeaders&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;host&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;X-Amz-Signature&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;f786583xxxxxxxxxx2079467dac31498c8&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;

nohup&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;curl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-C&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;https://s3-eu-west-1.amazonaws.com/pfigshare-u-files/30835246/ILD_alldataset_population_noSCT.rds?X-Amz-Algorithm&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;AWS4-HMAC-SHA256&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;X-Amz-Credential&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;AKIAxxxxxJSSROOA/20230224/eu-west-1/s3/aws4_request&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;X-Amz-Date&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;20230224T184948Z&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;X-Amz-Expires&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;X-Amz-SignedHeaders&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;host&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;X-Amz-Signature&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;64sxxxxxxxx5120c937d4f7def&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;参考：&lt;a href=&#34;https://mp.weixin.qq.com/s/xehzFpcqvG860RZv-2Hndw&#34;&gt;wget 小细节（geo 数据 ，figshare 数据）&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;-r, &amp;ndash;recursive&lt;/strong&gt;
  这个选项用于递归地下载整个网站或目录。例如：&amp;rsquo;,&amp;rsquo;wget -r &lt;a href=&#34;http://www.example.com/&#34;&gt;http://www.example.com/&lt;/a&gt;
  这个命令将下载 &lt;a href=&#34;http://www.example.com&#34;&gt;www.example.com&lt;/a&gt; 网站的所有内容，包括子目录和链接。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;-nH, &amp;ndash;no-host-directories&lt;/strong&gt;
  这个选项用于在下载时不创建目标文件夹的主机名目录。例如：
  wget -nH &lt;a href=&#34;http://www.example.com/files/file.txt&#34;&gt;http://www.example.com/files/file.txt&lt;/a&gt;
  这个命令将在当前目录下创建一个名为 file.txt 的文件，而不是在 &lt;a href=&#34;http://www.example.com/files/&#34;&gt;www.example.com/files/&lt;/a&gt; 目录下创建。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;-N, &amp;ndash;timestamping&lt;/strong&gt;
  这个选项用于只下载更新过的文件。例如：
  wget -N &lt;a href=&#34;http://www.example.com/files/file.txt&#34;&gt;http://www.example.com/files/file.txt&lt;/a&gt;
  如果 file.txt 本地已经存在并且与远程文件的时间戳相同，那么 wget 将不会下载文件。如果本地文件的时间戳比远程文件的时间戳早，那么 wget 将下载文件。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;-nd, &amp;ndash;no-directories&lt;/strong&gt;
  这个选项用于在下载时不创建目标文件夹。例如：
  wget -nd &lt;a href=&#34;http://www.example.com/files/file.txt&#34;&gt;http://www.example.com/files/file.txt&lt;/a&gt;
  这个命令将在当前目录下创建一个名为 file.txt 的文件，而不是在 &lt;a href=&#34;http://www.example.com/files/&#34;&gt;www.example.com/files/&lt;/a&gt; 目录下创建。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;-P, &amp;ndash;directory-prefix&lt;/strong&gt;
  这个选项用于指定要将文件下载到的目录。例如：
  wget -P /home/user/downloads/ &lt;a href=&#34;http://www.example.com/files/file.txt&#34;&gt;http://www.example.com/files/file.txt&lt;/a&gt;
  这个命令将在 /home/user/downloads/ 目录下创建一个名为 file.txt 的文件。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;-c, &amp;ndash;continue&lt;/strong&gt;
  这个选项用于在中断的地方继续下载文件。例如：
  wget -c &lt;a href=&#34;http://www.example.com/files/file.txt&#34;&gt;http://www.example.com/files/file.txt&lt;/a&gt;
  如果文件下载已经开始，但由于某种原因中断了，那么 wget 将在中断的地方继续下载文件。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;-O, &amp;ndash;output-document&lt;/strong&gt;
  这个选项用于将下载的文件保存为指定的文件名。例如：
  wget -O newfile.txt &lt;a href=&#34;http://www.example.com/files/file.txt&#34;&gt;http://www.example.com/files/file.txt&lt;/a&gt;
  这个命令将下载文件 file.txt 并将其保存为名为 newfile.txt 的文件。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;-q, &amp;ndash;quiet&lt;/strong&gt;
  这个选项用于静默下载，不输出下载进度信息。例如：
  wget -q &lt;a href=&#34;http://www.example.com/files/file.txt&#34;&gt;http://www.example.com/files/file.txt&lt;/a&gt;
  这个命令将在后台下载文件 file.txt。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;-t, &amp;ndash;tries&lt;/strong&gt;
  这个选项用于指定在下载过程中尝试重新连接的次数。例如：
  wget -t 5 &lt;a href=&#34;http://www.example.com/files/file.txt&#34;&gt;http://www.example.com/files/file.txt&lt;/a&gt;
  这个命令将在下载过程中尝试重新连接 5 次。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;-b, &amp;ndash;background&lt;/strong&gt;
  这个选项用于在后台下载文件。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;curl&#34;&gt;curl&lt;a class=&#34;headerlink&#34; href=&#34;#curl&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;curl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-LjO&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://github.com/samtools/htslib/releases/download/1.15.1/htslib-1.15.1.tar.bz2
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;-L, &amp;ndash;location&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Follow redirects，如果服务器报告请求的页面已移动到不同的位置（用 Location: 标头和 3XX 响应代码指示），此选项将使 curl 在新位置重做请求，即重定向。)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;-O, &amp;ndash;remote-name&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Write output to a file named as the remote file，把输出写到该文件中，保留远程文件的文件名。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;-j, &amp;ndash;junk-session-cookies&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ignore session cookies read from file&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E7%94%9F%E4%BF%A1%E5%B7%A5%E5%85%B7%E4%B8%8E%E5%BA%94%E7%94%A8/2022-08-11-vbqgpm/</link>
      <pubDate>Thu, 11 Aug 2022 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E7%94%9F%E4%BF%A1%E5%B7%A5%E5%85%B7%E4%B8%8E%E5%BA%94%E7%94%A8/2022-08-11-vbqgpm/</guid>
      
    </item>
    
    <item>
      <title>Htslib 软件库安装与注意</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2022-08-11&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2022-08-11T00:00:00&#39;&gt;2022-08-11&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2022-08-11&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2022-08-11T10:17:52&#39;&gt;2022-08-11&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Htslib (官网：&lt;a href=&#34;https://www.htslib.org/&#34;&gt;https://www.htslib.org/&lt;/a&gt;) 系列的软件主要包括：Samtools、BCFtools、HTSlib，其中 HTSlib 是前两个都需要用到的 C 语言依赖库。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FqQNhgz8QJz79Lb_H6gPBpGIu7pe.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;其他的一些软件有时候也会用到 HTSlib，所以，有时候可以单独安装 HTSlib，主要步骤：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;git&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;clone&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://github.com/samtools/htslib.git
git&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;submodule&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;update&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--init&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--recursive
autoconf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-i&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# Autoconf version 2.64 or higher is required&lt;/span&gt;
./configure&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/PATH/TO/htslib
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;如果 &lt;code&gt;configure&lt;/code&gt; 过程提示：&lt;code&gt;error: cannot find input file: &#39;config.h.in&#39;&lt;/code&gt;，参考 &lt;a href=&#34;https://github.com/samtools/htslib/issues/1422&#34;&gt;htslib - issues:1422&lt;/a&gt; 下载 &lt;a href=&#34;https://github.com/samtools/htslib/releases/download/1.15.1/htslib-1.15.1.tar.bz2&#34;&gt;htslib-1.15.1.tar.bz2&lt;/a&gt;，然后继续后面的操作。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;wget&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--no-check-certificate&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--content-disposition&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://github.com/samtools/htslib/releases/download/1.15.1/htslib-1.15.1.tar.bz2
tar&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-jxvf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;htslib-1.15.1.tar.bz2
&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;htslib-1.15.1
autoconf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-i&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# Autoconf version 2.64 or higher is required&lt;/span&gt;
./configure&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/PATH/TO/htslib
make
make&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
      <link>https://shenwy.com/yuque/%E7%94%9F%E7%89%A9%E4%BF%A1%E6%81%AF/%E8%BD%AF%E4%BB%B6/2022-08-11-sds4gt/</link>
      <pubDate>Thu, 11 Aug 2022 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E7%94%9F%E7%89%A9%E4%BF%A1%E6%81%AF/%E8%BD%AF%E4%BB%B6/2022-08-11-sds4gt/</guid>
      
    </item>
    
    <item>
      <title>将重点资源整理成一个生信导航网页</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2022-05-26&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2022-05-26T00:00:00&#39;&gt;2022-05-26&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2022-10-28&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2022-10-28T11:02:00&#39;&gt;2022-10-28&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;前不久在 &lt;a href=&#34;https://github.com/shixiangwang&#34;&gt;@王诗翔(shixiangwang)&lt;/a&gt; GitHub 的讨论组上看到了类似的这个讨论 &lt;a href=&#34;https://github.com/ShixiangWang/self-study/issues/65&#34;&gt;&amp;ldquo;将重点资源整理成一个生信导航网页&amp;rdquo;&lt;/a&gt;，加上 &lt;a href=&#34;https://github.com/btzheng&#34;&gt;@郑宝童(btzheng)&lt;/a&gt; 曾经也做了一个&lt;a href=&#34;https://zhengbaotong.gitee.io/biogeekgps/&#34;&gt;生信极客部落网址导航&lt;/a&gt;（旨在搭建一个生信专属网址导航），好像也有一段时间没更新过了。
&lt;img alt=&#34;@王诗翔 Bioinformatics Guide Site&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FuIFnzVdyzCMNdx5Zqhg9YasujHi.png&#34; title=&#34;@王诗翔 Bioinformatics Guide Site&#34; /&gt;
&lt;img alt=&#34;@郑宝童 生信极客部落网址导航&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FnACpSdO1EtsMWUKT86C7GYqFpTa.png&#34; title=&#34;@郑宝童 生信极客部落网址导航&#34; /&gt;
于是有了 &lt;strong&gt;生信重点资源+WebStack-Hugo=生信导航&lt;/strong&gt; 的初步的想法。&lt;a href=&#34;https://github.com/WebStackPage&#34;&gt;WebStackPage&lt;/a&gt; 本身是一个由 &lt;a href=&#34;https://www.viggoz.com/&#34;&gt;viggo&lt;/a&gt; 开发的一个网址导航开源项目，有许多的魔改版本，而 &lt;a href=&#34;https://github.com/shenweiyan/webstack-hugo&#34;&gt;WebStack-Hugo&lt;/a&gt; 则是本人基于 Hugo 进行修改调整的其中一个主题。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FmrOp_BZ5HFjluUmdtF4WtbcWlK8.png&#34; /&gt;
有了现成的主题，又有了前人的一些资源整理（轮子都已经有了，就缺组装），于是在 GitHub 上开始了 &lt;a href=&#34;https://github.com/bioitee/BioWebStack&#34;&gt;BioWebStack&lt;/a&gt; 这一个将重点资源整理成一个生信导航网页的仓库（目前已初步把站点搭建了起来，资源内容还在更新中）。&lt;/p&gt;
&lt;p&gt;:::success&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;GitHub 开源地址：&lt;/strong&gt;&lt;a href=&#34;https://github.com/bioitee/BioWebStack&#34;&gt;https://github.com/bioitee/BioWebStack&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;BioWebStack 站点地址：&lt;/strong&gt;&lt;a href=&#34;https://bioit.top/&#34;&gt;https://bioit.top/&lt;/a&gt;（备用链接：&lt;a href=&#34;https://hao.bioitee.com/&#34;&gt;https://hao.bioitee.com/&lt;/a&gt;）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;:::&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FiA1dbQM1-wPqbJOxVR6pg_0EQTU.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FoP6x13jwOrNri7NiKhwP-1rO1O3.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;关于 BioWebStack 的一些特点和说明：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;致力于将一些重点资源整理成一个生信导航网页。&lt;/li&gt;
&lt;li&gt;该网站用于个人学习和科研。&lt;/li&gt;
&lt;li&gt;长期开源，欢迎大家提交错误报告以及宝贵的资源。&lt;/li&gt;
&lt;li&gt;采用了一直以来最喜欢的 Hugo 部署方式，方便高效。&lt;/li&gt;
&lt;li&gt;主要的配置信息都集成到了 &lt;strong&gt;config.toml&lt;/strong&gt;，一键完成各种自定义的配置。&lt;/li&gt;
&lt;li&gt;导航的各个信息都集成在 &lt;strong&gt;data/webstack.yml&lt;/strong&gt; 文件中，方便后续增删改动。&lt;/li&gt;
&lt;li&gt;无需服务器，GitHub Pages/Webify Pages/Cloudfare Pages 均可部署。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果你也是做生信研究，如果你也正好喜欢学习生信，如果你一直苦于收藏夹越来越多，很难找到某个不常用的网站，那希望这个网站能给你带来一些作用。&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E9%9D%99%E6%80%81%E7%BD%91%E7%AB%99/2022-05-26-biowebstack/</link>
      <pubDate>Thu, 26 May 2022 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E9%9D%99%E6%80%81%E7%BD%91%E7%AB%99/2022-05-26-biowebstack/</guid>
      
    </item>
    
    <item>
      <title>失控的 Python3 类型</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2022-05-20&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2022-05-20T00:00:00&#39;&gt;2022-05-20&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2023-09-08&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2023-09-08T09:34:55&#39;&gt;2023-09-08&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;作者 |&lt;/strong&gt; &lt;a href=&#34;https://www.theatlantic.com/author/james-somers/&#34;&gt;James Somers&lt;/a&gt; &lt;br&gt;
&lt;strong&gt;编译 |&lt;/strong&gt; &lt;a href=&#34;https://www.yuque.com/shenweiyan/&#34;&gt;史提芬先森&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;原文 |&lt;/strong&gt; &lt;a href=&#34;https://www.theatlantic.com/science/archive/2018/04/the-scientific-paper-is-obsolete/556676/&#34;&gt;Python 3 Types in the Wild&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;!-- --&gt;

&lt;blockquote&gt;
&lt;p&gt;Python used to be the kind of language you could pick up in a couple of days, but &amp;ldquo;used to be&amp;rdquo; was many years ago. Coming back to developing products with it after 11 years away, I&amp;rsquo;ve been a little overwhelmed by how many features have been added, and how hard it is to make sense of a modern code base without understanding all of them.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Python 曾经是一种你可以在几天内学会的语言，但 &amp;ldquo;曾经是&amp;rdquo; 是很多年前的事了。最近，我相隔 11 年后重新用这门语言开发产品时，有点不知所措，它添加了太多的新功能，如果你不了解所有这些新功能，理解现代 Python 代码将是多么困难的一件事。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;One of the biggest changes has been the addition of type annotations, which allow developers to say that a function returns &lt;code&gt;Dict[List[Set[FrozenSet[int]]], str]&lt;/code&gt; (i.e., a dictionary that maps lists of sets of frozensets of integers onto strings). [&lt;a href=&#34;https://neverworkintheory.org/bib/#RakAmnouykit2020&#34;&gt;RakAmnouykit2020&lt;/a&gt;] takes an empirical look at how programmers use these annotations, and turns up some surprising results. For one, the most common kind of type annotation is a user-defined type:&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;最大的变化之一是添加了类型注释，它允许开发人员通过一个函数返回 &lt;code&gt;Dict[List[Set[FrozenSet[int]]], str]&lt;/code&gt;（即，一个映射一组整数的不可变集合列表到字符串的字典）。[&lt;a href=&#34;https://neverworkintheory.org/bib/#RakAmnouykit2020&#34;&gt;RakAmnouykit2020&lt;/a&gt;] 对程序员如何使用这些注释进行了实证研究，并得出了一些令人惊讶的结果。一方面，最常见的类型注释是用户定义的类型。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FtZT3mwYmnkeFlO-MzJvRhFPgkLC.png&#34; /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;What&amp;rsquo;s more interesting is that when the authors stripped annotations out of files and asked &lt;a href=&#34;https://google.github.io/pytype/&#34;&gt;PyType&lt;/a&gt; to infer them, it failed to do so in 77% of cases, which means that the user-written annotations were capturing information that automatic tools couldn&amp;rsquo;t. On the other hand, &lt;a href=&#34;http://mypy-lang.org/&#34;&gt;MyPy&lt;/a&gt; found that only 15% of the 2,678 repositories examined were type-correct; this may be a result of MyPy being very conservative and producing false positives. More troubling are the disagreements between these different tools, but studies like these are exactly what we need to make those tools more consistent and more helpful.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;更有趣的是，当作者从文件中剥离注释并要求 &lt;a href=&#34;https://google.github.io/pytype/&#34;&gt;PyType&lt;/a&gt; 推断它们时，在 77% 的情况下它未能这样做，这意味着用户编写的注释正在捕获自动工具无法捕获的信息。另一方面，&lt;a href=&#34;http://mypy-lang.org/&#34;&gt;MyPy&lt;/a&gt; 发现在检查的 2,678 个存储库中，只有 15% 是类型正确的；这可能是因为 MyPy 非常保守并产生误报。更令人不安的是这些不同工具之间的分歧，但像这样的研究正是我们需要使这些工具更加一致和更有帮助的。&lt;/p&gt;
&lt;p&gt;[&lt;a href=&#34;https://neverworkintheory.org/bib/#RakAmnouykit2020&#34;&gt;RakAmnouykit2020&lt;/a&gt;] Ingkarat Rak-amnouykit, Daniel McCrevan, Ana Milanova, Martin Hirzel, and Julian Dolby: Python 3 types in the wild: a tale of two type systems. In Proc. ISDL 2020, &lt;a href=&#34;https://doi.org/10.1145/3426422.3426981&#34;&gt;doi:10.1145/3426422.3426981&lt;/a&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Python 3 is a highly dynamic language, but it has introduced a syntax for expressing types with PEP484. This paper ex- plores how developers use these type annotations, the type system semantics provided by type checking and inference tools, and the performance of these tools. We evaluate the types and tools on a corpus of public GitHub repositories. We review MyPy and PyType, two canonical static type checking and inference tools, and their distinct approaches to type analysis. We then address three research questions: (i) How often and in what ways do developers use Python 3 types? (ii) Which type errors do developers make? (iii) How do type errors from different tools compare? Surprisingly, when developers use static types, the code rarely type-checks with either of the tools. MyPy and PyType exhibit false positives, due to their static nature, but also flag many useful errors in our corpus. Lastly, MyPy and PyType embody two distinct type systems, flagging different errors in many cases. Understanding the usage of Python types can help guide tool-builders and researchers. Understanding the performance of popular tools can help increase the adoption of static types and tools by practitioners, ultimately leading to more correct and more robust Python code.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Python 3 是一种高度动态的语言，但它引入了一种用 PEP484 表达类型的语法。本文探讨了开发人员如何使用这些类型注释、类型检查和推理工具提供的类型系统语义以及这些工具的性能。我们评估公共 GitHub 存储库语料库中的类型和工具。我们回顾了 MyPy 和 PyType 这两个规范的静态类型检查和推理工具，以及它们不同的类型分析方法。然后我们解决三个研究问题：（i）开发人员使用 Python 3 类型的频率和方式是什么？ (ii) 开发人员会犯哪些类型的错误？ (iii) 来自不同工具的类型错误如何比较？令人惊讶的是，当开发人员使用静态类型时，代码很少使用任何一种工具进行类型检查。 MyPy 和 PyType 由于它们的静态性质而表现出误报，但也会在我们的语料库中标记出许多有用的错误。最后，MyPy 和 PyType 体现了两个不同的类型系统，在许多情况下标记不同的错误。了解 Python 类型的使用有助于指导工具构建者和研究人员。了解流行工具的性能有助于增加从业者对静态类型和工具的采用，最终导致更正确和更健壮的 Python 代码。&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E7%BC%96%E7%A8%8B%E6%8A%80%E6%9C%AF/Python/2022-05-20-python-3-types-in-the-wild/</link>
      <pubDate>Fri, 20 May 2022 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E7%BC%96%E7%A8%8B%E6%8A%80%E6%9C%AF/Python/2022-05-20-python-3-types-in-the-wild/</guid>
      
    </item>
    
    <item>
      <title>推荐 | 中国用户也能同步 Chrome 书签了</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2022-05-11&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2022-05-11T00:00:00&#39;&gt;2022-05-11&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2022-09-19&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2022-09-19T00:00:00&#39;&gt;2022-09-19&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;众所周知，Chrome 浏览器的书签的同步正常情况下需要连接 Google 账号才能进行，但由于某些原因这一点在国内正常情况下是不可用的。&lt;/p&gt;
&lt;p&gt;之前也体验过一些通过 GitHub/Gitee 进行谷歌浏览器书签同步的小插件，但总体操作起来有点麻烦。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.yuque.com/shenweiyan/cookbook/chrome-bookmark-sync&#34;&gt;使用码云同步谷歌 Chrome 浏览器书签 · 语雀&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;今天推荐一款更加好用的 Chrome 书签同步小插件 —— &lt;a href=&#34;https://bm.famend.cn/&#34;&gt;Chrome™ 书签同步 &lt;/a&gt;，截止 2022 年 5 月 11 日该插件最新版本为 1.4 。
它的功能和 Chrome 自带的同步功能完全一样，当用户添加、修改或删除了书签时，自动同步到云端。当不同电脑登录同一个账户时，它们的书签列表会自动合并。使用也很方便，安装好插件之后，微信扫一扫即可登录。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FvWLou5CEcpHN-O2UW5b-zAQtXqt.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;安装步骤&#34;&gt;安装步骤&lt;a class=&#34;headerlink&#34; href=&#34;#安装步骤&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;由于某些原因，国内无法访问 Chrome 应用商店，只能手动安装此扩展。安装步骤如下：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;打开 Chrome 浏览器，访问官网 &lt;a href=&#34;https://bm.famend.cn/&#34;&gt;https://bm.famend.cn&lt;/a&gt;，点击首页右上方的 “下载” 按钮，将文件 chrome_sync.zip 下载到本地。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FslExUWtvrqAhMhNGJKPVfcnlJWy.png&#34; /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;从浏览器的菜单中选择“扩展程序”，打开扩展程序页面（点击 菜单 -&amp;gt; 更多工具 -&amp;gt; 扩展程序 ），如下图。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FrUMS_19cOd8Dievnhn_dSyoSL-a.png&#34; /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;在扩展程序页面中，打开“开发者模式”开关，点击“重新加载”按钮，然后把第 1 步下载的文件拖拽当前页面。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FvYkuur-K7ITBM1W90nMJVvC2-b9.png&#34; /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;此时会弹出对话框，提示“添加 Chrome™ 书签同步”，点击“添加扩展程序”按钮，此时扩展程序页面中会多了一项：Chrome™ 书签同步。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FhxlgjYNfW3Cw0x8nnZGg5U5Rn7y.png&#34; /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;此时扩展已经安装成功。为了方便使用，可以把它固定到工具栏中。选择“扩展程序”图标，选择 Chrome 书签同步 的“固定”按钮，此时工具栏中就会添加 Chrome 书签同步 的标签。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FvXUlidd17BDkcBuJWs3klxpiPhX.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;使用方法&#34;&gt;使用方法&lt;a class=&#34;headerlink&#34; href=&#34;#使用方法&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;使用方法非常简单，点击 Chrome 浏览器工具栏上的 Chrome 书签同步 图标，弹出登录框。使用微信扫一扫，即可登录，并自动同步数据到云端，无需手动干预。&lt;/p&gt;
&lt;p&gt;即使换了电脑，安装 Chrome 书签同步 插件之后，微信扫一扫，书签就会自动下载到新电脑上。&lt;/p&gt;
&lt;p&gt;说明：为了避免信息泄露，下图中的二维码做了特殊处理。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FoyLUkGmH6hRAVd5gBjLZ2dp01rF.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;220d09573c89c115190d514ea2c018b.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fk54STWlhZRmv9LxWYYlKG-rsgv3.jpeg&#34; /&gt; &lt;img alt=&#34;fb8da8fa15af7784bf7420821235512.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FqYN44YHK0efjNp4SnLug6Lx2tIy.jpeg&#34; /&gt;&lt;img alt=&#34;f1d1cc229189d314273d03dafd71316.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fq58J-7_-kvbJH5YZ3oiJTH3ytoL.jpeg&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FmrLFgANv8ziV-NyZg49kWCSzET6.png&#34; /&gt;&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/Windows/2022-05-11-chrome-bookmark/</link>
      <pubDate>Wed, 11 May 2022 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/Windows/2022-05-11-chrome-bookmark/</guid>
      
    </item>
    
    <item>
      <title>2020 年年终总结</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;2020 年，是一个不平凡的一年，在这里一年里，我们经历了新冠，见证了嫦五，看到动荡和不安，有经济熔断，有球王陨落，名人远去，有感动有泪水，我们也有收获。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;h2 id=&#34;-工作&#34;&gt;✍️ 工作&lt;a class=&#34;headerlink&#34; href=&#34;#-工作&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;作为一个科学民工，2020 年的工作重心依旧停留在 Bio 与 IT 交叉的那几块，集群、Galaxy、生信，闲暇之余记录一下工作生活中的点滴，有经验有吐槽，平淡而又繁杂。&lt;/p&gt;
&lt;h2 id=&#34;-生活&#34;&gt;😂 生活&lt;a class=&#34;headerlink&#34; href=&#34;#-生活&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;这一年更多的精力放在了家庭，入户、社保、带娃，磕磕碰碰之中更加感受到琐事之于工作的一些无奈。但总相信，这个世界里美好总要多过阴暗，欢乐总要多过苦难，还有很多事，值得我们一如既往的相信。&lt;/p&gt;
&lt;p&gt;2020 年最值得自豪的是，还有一个自己喜欢而且能一直坚持下来的运动——羽毛球。在新的场馆认识了另外一拨有着同样兴趣的球友，这样已经很满足！
&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FmnD0ZMG0bgeW5W0GC64NBkK3A_c.webp&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;-公众号&#34;&gt;✒️ 公众号&lt;a class=&#34;headerlink&#34; href=&#34;#-公众号&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;分享是一种态度，2020 年，我们不离不弃，在 &lt;strong&gt;“BioIT 爱好者” &lt;/strong&gt;公众号一共推出 &lt;strong&gt;39&lt;/strong&gt; 篇原创文章。&lt;/p&gt;
&lt;p&gt;这些文章，有生信的学习笔记，有集群服务器的运维经历，也有编程与可视化的一部分记录，甚至还有一部分热点与趣闻相关的科普。&lt;/p&gt;
&lt;p&gt;这一年，公众号综合了语雀、博客、简书、CSDN 推送了不少其他作者贡献的优秀文字，源于热爱，源于分享，特别感谢给我们公众号贡献了这些优秀原创文章的可爱作者们：&lt;strong&gt;南希修炼中&lt;/strong&gt;，&lt;strong&gt;小潤澤&lt;/strong&gt;，&lt;strong&gt;biobin&lt;/strong&gt;，&lt;strong&gt;佳名&lt;/strong&gt;，......，同样也要感谢一路支持我们公众号可爱读者们，正是因为你们，我们更有动力。&lt;/p&gt;
&lt;h2 id=&#34;2020-原创文章&#34;&gt;▌2020  原创文章&lt;a class=&#34;headerlink&#34; href=&#34;#2020-原创文章&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://mp.weixin.qq.com/s?__biz=MzU1MDQwMTU5OQ==&amp;amp;mid=2247490492&amp;amp;idx=1&amp;amp;sn=e55930b64a89f0c1c5e25b4482d7e0ca&amp;amp;chksm=fba078ecccd7f1fa9e58713becaef4374f08c68c79b8c92e55bf1a7b62afb128cac878c92f72&amp;amp;scene=21#wechat_redirect&#34;&gt;使用 coding.net 发布你的个人博客&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://mp.weixin.qq.com/s?__biz=MzU1MDQwMTU5OQ==&amp;amp;mid=2247490302&amp;amp;idx=1&amp;amp;sn=56e5adc3d71ec248d8004b9d8a8bfd3e&amp;amp;chksm=fba079aeccd7f0b8294dd5930b09591196a6f7769c6b12042cb3af34841b5ba24978f9f8b052&amp;amp;scene=21#wechat_redirect&#34;&gt;测序数据学习笔记：bcl2fastq 安装&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://mp.weixin.qq.com/s?__biz=MzU1MDQwMTU5OQ==&amp;amp;mid=2247489077&amp;amp;idx=1&amp;amp;sn=a7b5c17cb160936a91ef3091c7f2ae78&amp;amp;chksm=fba07565ccd7fc733006dc8d2a45d0563225c4eecd1b2de785d2c0a8c5c72f94432a81af2eb0&amp;amp;scene=21#wechat_redirect&#34;&gt;Galaxy Release_20.09 发布，新增多个数据上传组件&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://mp.weixin.qq.com/s?__biz=MzU1MDQwMTU5OQ==&amp;amp;mid=2247488605&amp;amp;idx=1&amp;amp;sn=94afff662d98c7dd7669b70343e5d1c4&amp;amp;chksm=fba0770dccd7fe1b6573f3569b424eb8469fceb1ef9021006e4ce8a1121f3f0cbd2ce80f4515&amp;amp;scene=21#wechat_redirect&#34;&gt;一次 HPC 病毒感染与解决经历&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://mp.weixin.qq.com/s?__biz=MzU1MDQwMTU5OQ==&amp;amp;mid=2247488558&amp;amp;idx=1&amp;amp;sn=c9641424f2239ebd9b39bb076a3cd51c&amp;amp;chksm=fba0777eccd7fe6896fc4eceac70d0603a78abc9699c2a556425a22fc8e3522df3da5c727348&amp;amp;scene=21#wechat_redirect&#34;&gt;腾讯云 cloudbase 云开发使用笔记&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://mp.weixin.qq.com/s?__biz=MzU1MDQwMTU5OQ==&amp;amp;mid=2247488460&amp;amp;idx=1&amp;amp;sn=ad230f0a2eeae7ee0429f033a936cf1e&amp;amp;chksm=fba0709cccd7f98a278ff5971dd19cea6131a97fccf05e9f45f322213cd2077da3fa5390c9cd&amp;amp;scene=21#wechat_redirect&#34;&gt;JupyterLab Server 搭建与使用笔记&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://mp.weixin.qq.com/s?__biz=MzU1MDQwMTU5OQ==&amp;amp;mid=2247488233&amp;amp;idx=1&amp;amp;sn=a40f395860bede8dd8d23cca0cc32127&amp;amp;chksm=fba071b9ccd7f8af0519955aa0ec99ed729f6491478d6db6567c080ca6ec248167d250f46663&amp;amp;scene=21#wechat_redirect&#34;&gt;R 语言中 X11 相关的一些问题&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://mp.weixin.qq.com/s?__biz=MzU1MDQwMTU5OQ==&amp;amp;mid=2247488186&amp;amp;idx=1&amp;amp;sn=78a3e7ede7c288bd17216c7435e8a048&amp;amp;chksm=fba071eaccd7f8fc71527d90b3bc3bed9c11fcfa20681163d4d3020d4948a35a0e6c3a84826c&amp;amp;scene=21#wechat_redirect&#34;&gt;Linux 中多终端同步 history 记录&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://mp.weixin.qq.com/s?__biz=MzU1MDQwMTU5OQ==&amp;amp;mid=2247488136&amp;amp;idx=1&amp;amp;sn=bdf46a2bd8139cc0e3adb47d9391171b&amp;amp;chksm=fba071d8ccd7f8ce7f910ea131ee10c58f534320fed2638ed42eadc8e2bf42c15e9a9ce196dd&amp;amp;scene=21#wechat_redirect&#34;&gt;一个小清新的知识管理和问题讨论平台&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://mp.weixin.qq.com/s?__biz=MzU1MDQwMTU5OQ==&amp;amp;mid=2247488125&amp;amp;idx=1&amp;amp;sn=f42316431342f9f4d9fc334f5c660c5c&amp;amp;chksm=fba0712dccd7f83b5eaa03ae44f1e757cb69af0287cefa9a02d7524decc147e0c40080523931&amp;amp;scene=21#wechat_redirect&#34;&gt;在 RedHat 使用 gdc-client 下载 TCGA 数据&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://mp.weixin.qq.com/s?__biz=MzU1MDQwMTU5OQ==&amp;amp;mid=2247488084&amp;amp;idx=1&amp;amp;sn=f29255cac3760e0a4404d77e4853d8e6&amp;amp;chksm=fba07104ccd7f8127291964b39160a3b9e23b1fc55c9094a63cfe3ec685adcb3ce50ae11786b&amp;amp;scene=21#wechat_redirect&#34;&gt;一个小团队使用的知识管理方案与工具&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://mp.weixin.qq.com/s?__biz=MzU1MDQwMTU5OQ==&amp;amp;mid=2247488075&amp;amp;idx=1&amp;amp;sn=2ad4698e58eb5bf54168300c7be605d5&amp;amp;chksm=fba0711bccd7f80dfb867909c997c4cbaa2a2de8a2c9c154d1ffcf975adf7503b778e7ae2789&amp;amp;scene=21#wechat_redirect&#34;&gt;推荐一部青春搞笑悬疑电竞网络剧&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://mp.weixin.qq.com/s?__biz=MzU1MDQwMTU5OQ==&amp;amp;mid=2247487249&amp;amp;idx=1&amp;amp;sn=6756ba0c88fc3661212e4dbaaa09a6b2&amp;amp;chksm=fba06c41ccd7e557a4d4825bf7dc6c2ad5e4b5583a2b8a316bc4247ca51f1de8f1c69561bbb4&amp;amp;scene=21#wechat_redirect&#34;&gt;吐槽 | 聊一聊公众号的那些事&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://mp.weixin.qq.com/s?__biz=MzU1MDQwMTU5OQ==&amp;amp;mid=2247487240&amp;amp;idx=1&amp;amp;sn=4a7253f0daee2973455538614d491a35&amp;amp;chksm=fba06c58ccd7e54e9214df65dcdc4c4d0c29d27605b0433991ea45692d9d055d8a05f520816b&amp;amp;scene=21#wechat_redirect&#34;&gt;ImageMagick 图像处理学习笔记&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://mp.weixin.qq.com/s?__biz=MzU1MDQwMTU5OQ==&amp;amp;mid=2247486927&amp;amp;idx=1&amp;amp;sn=183e1f3973bc3872cf4da8e343c409da&amp;amp;chksm=fba06e9fccd7e789eaf94865f1dadfcaeef20f56ffee1514e765820acd7dc0071ef7f9012382&amp;amp;scene=21#wechat_redirect&#34;&gt;Galaxy Release 20.05 发布，新增多项可视化体验&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://mp.weixin.qq.com/s?__biz=MzU1MDQwMTU5OQ==&amp;amp;mid=2247485861&amp;amp;idx=1&amp;amp;sn=8ed6241c76299f59d42126cf5699f96e&amp;amp;chksm=fba06af5ccd7e3e304d7ee0713e8d068854cff8fa077ca46036e7a7a3efd89154e9dd304396b&amp;amp;scene=21#wechat_redirect&#34;&gt;一款强大而实用的图片去水印神器&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://mp.weixin.qq.com/s?__biz=MzU1MDQwMTU5OQ==&amp;amp;mid=2247485842&amp;amp;idx=1&amp;amp;sn=842a25b308ea697c058b240470268ad1&amp;amp;chksm=fba06ac2ccd7e3d4806f52b9d914d064ff3af70ce852292aae8c93aff4603a3a3a622a0af198&amp;amp;scene=21#wechat_redirect&#34;&gt;在 Linux 和 Windows 下源码安装 Perl&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://mp.weixin.qq.com/s?__biz=MzU1MDQwMTU5OQ==&amp;amp;mid=2247485818&amp;amp;idx=1&amp;amp;sn=e2efffb5d3745def43847ffa57fdd99c&amp;amp;chksm=fba06a2accd7e33ce6149be9d20d51ebf2b2bcc5cef3bd8591b44ffabe6e24f2efa3979c2689&amp;amp;scene=21#wechat_redirect&#34;&gt;R 语言关于 SSL 证书异常处理笔记&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://mp.weixin.qq.com/s?__biz=MzU1MDQwMTU5OQ==&amp;amp;mid=2247485564&amp;amp;idx=1&amp;amp;sn=38b4e3598a79b03c5f684f6612a18200&amp;amp;chksm=fba06b2cccd7e23a49cde605dc7971436ae437a3779634c53a0dafdb57127c16d59f649c6218&amp;amp;scene=21#wechat_redirect&#34;&gt;生信服务器入门级基本设置&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://mp.weixin.qq.com/s?__biz=MzU1MDQwMTU5OQ==&amp;amp;mid=2247485442&amp;amp;idx=1&amp;amp;sn=93a19d57b7d6e571fe5353e7613caadc&amp;amp;chksm=fba06b52ccd7e244053576516e64235090a8c3ea556c4b76fa876a3b334d3d077466533cb628&amp;amp;scene=21#wechat_redirect&#34;&gt;如何在 5 分钟内建立一个数据驱动的新型冠状病毒肺炎应用程序&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://mp.weixin.qq.com/s?__biz=MzU1MDQwMTU5OQ==&amp;amp;mid=2247485426&amp;amp;idx=1&amp;amp;sn=4a73eea4b3545f31305c95bd4491af12&amp;amp;chksm=fba064a2ccd7edb4d63adc1aefe82d62365a3b132de865ade9e30739076b33544d2a96da84b5&amp;amp;scene=21#wechat_redirect&#34;&gt;顶级生物信息学 RSS 订阅源&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://mp.weixin.qq.com/s?__biz=MzU1MDQwMTU5OQ==&amp;amp;mid=2247485163&amp;amp;idx=1&amp;amp;sn=47fa496e9006bc7bef2cb631392eedee&amp;amp;chksm=fba065bbccd7ecadb587a04d8234298ac1bbc14a22a65ccf6e6ebfce4da08c91c888199d91c8&amp;amp;scene=21#wechat_redirect&#34;&gt;使用镜像加速 Rtools 下载与安装&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://mp.weixin.qq.com/s?__biz=MzU1MDQwMTU5OQ==&amp;amp;mid=2247485120&amp;amp;idx=1&amp;amp;sn=fd89b8e93da6f0f37a4a6bd8aafb7c57&amp;amp;chksm=fba06590ccd7ec86c07582be02d0c3fc1ed0fa0415d69ae70fbb545881d109ea013e3c2085a2&amp;amp;scene=21#wechat_redirect&#34;&gt;ggplot2 调整绘图区域大小&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://mp.weixin.qq.com/s?__biz=MzU1MDQwMTU5OQ==&amp;amp;mid=2247485097&amp;amp;idx=1&amp;amp;sn=c393c45211ad691721f4a8946f30cee4&amp;amp;chksm=fba065f9ccd7ecefbfd3af178fa2a61f37e683989b6561bd6896a41f7722cbc3fc0ff1d06f38&amp;amp;scene=21#wechat_redirect&#34;&gt;远程挂载 NFS 共享目录引发死机问题&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://mp.weixin.qq.com/s?__biz=MzU1MDQwMTU5OQ==&amp;amp;mid=2247485085&amp;amp;idx=1&amp;amp;sn=ea674d20ebd3a321f6a0d238f09bcd87&amp;amp;chksm=fba065cdccd7ecdbafae87ef5a9adf63344c3eee699a9d8c008083c19afc02ee70fc4fecb8c0&amp;amp;scene=21#wechat_redirect&#34;&gt;如何卸载 python setup.py install 安装的包？&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://mp.weixin.qq.com/s?__biz=MzU1MDQwMTU5OQ==&amp;amp;mid=2247484830&amp;amp;idx=1&amp;amp;sn=c0ae8fb0543428766c8dc6a0f0a69fb8&amp;amp;chksm=fba066ceccd7efd8652730be5b3ae6bc22134c485d80337c0ea1ed16d7620b9d8192bda5fc14&amp;amp;scene=21#wechat_redirect&#34;&gt;小技巧 | 使用 mv 重命名文件无需两次键入文件名称&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://mp.weixin.qq.com/s?__biz=MzU1MDQwMTU5OQ==&amp;amp;mid=2247484815&amp;amp;idx=1&amp;amp;sn=be6e85f20d163a80a9f62b896b0d1afb&amp;amp;chksm=fba066dfccd7efc9294b0f754ff0cb74500bd4456e7e75c3ea8163e7aacb6428356691297182&amp;amp;scene=21#wechat_redirect&#34;&gt;clusterProfiler 的 GO/KEGG 富集分析用法小结&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://mp.weixin.qq.com/s?__biz=MzU1MDQwMTU5OQ==&amp;amp;mid=2247484801&amp;amp;idx=1&amp;amp;sn=9798979c2c36f743aca214aa4a440bdd&amp;amp;chksm=fba066d1ccd7efc79d0087194e2633e65f4bab2a886c0d86db26c56337bb42dff06af8587936&amp;amp;scene=21#wechat_redirect&#34;&gt;R 语言绘制环状热图&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://mp.weixin.qq.com/s?__biz=MzU1MDQwMTU5OQ==&amp;amp;mid=2247484795&amp;amp;idx=1&amp;amp;sn=d5f6de4a47e4a3bb593a8edcde395138&amp;amp;chksm=fba0662bccd7ef3d3347acd8a076e1716a6fb2c9347eea5819d8cedf240d787f4ebfcd936e2b&amp;amp;scene=21#wechat_redirect&#34;&gt;温故而知新，ggplot2 饼图的几点笔记&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://mp.weixin.qq.com/s?__biz=MzU1MDQwMTU5OQ==&amp;amp;mid=2247484785&amp;amp;idx=1&amp;amp;sn=19f73fd6d772278ae3db90c600f32f81&amp;amp;chksm=fba06621ccd7ef37a07606ac05256327a2a9ee3648608bba69dff5448e6d54014e5926d5c9fe&amp;amp;scene=21#wechat_redirect&#34;&gt;预测 motif 的计算原理&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://mp.weixin.qq.com/s?__biz=MzU1MDQwMTU5OQ==&amp;amp;mid=2247484759&amp;amp;idx=1&amp;amp;sn=c1f52a21a5e35f230cc5e91a7a3af6ee&amp;amp;chksm=fba06607ccd7ef111061e65718f3a2d5f52c5d77efdd3cd94fd81deab6d7e89a146869ee84df&amp;amp;scene=21#wechat_redirect&#34;&gt;R 语言柱状图示例笔记&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://mp.weixin.qq.com/s?__biz=MzU1MDQwMTU5OQ==&amp;amp;mid=2247484755&amp;amp;idx=1&amp;amp;sn=8867c1439ab64bd3ef7dded256f042f0&amp;amp;chksm=fba06603ccd7ef1564d7ebe60b53d3b3f129194ff2d8353512ec6324bd330b74453d7b3f0c10&amp;amp;scene=21#wechat_redirect&#34;&gt;UpSetR 关联的 venneuler 包安装笔记&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://mp.weixin.qq.com/s?__biz=MzU1MDQwMTU5OQ==&amp;amp;mid=2247484726&amp;amp;idx=1&amp;amp;sn=03c9c25b3e27bc9034d37c73cbb24f6c&amp;amp;chksm=fba06666ccd7ef70b743c1f9c89c1c4eee7b5c9cc2844892919c18ffb1043bf35db47748bf2b&amp;amp;scene=21#wechat_redirect&#34;&gt;R 语言画图中英文字体解决方案&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://mp.weixin.qq.com/s?__biz=MzU1MDQwMTU5OQ==&amp;amp;mid=2247489358&amp;amp;idx=1&amp;amp;sn=7c22a5037028a0ca719b469671e33338&amp;amp;chksm=fba0741eccd7fd08e25edd0fea1aa45e1ca027b1b58f3df08c937c5df2d611f9f02c7e46ec63&amp;amp;scene=21#wechat_redirect&#34;&gt;Galaxy 生信平台(四)：邮件与管理员配置&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://mp.weixin.qq.com/s?__biz=MzU1MDQwMTU5OQ==&amp;amp;mid=2247484698&amp;amp;idx=1&amp;amp;sn=333b4b6ed240ff1a5807cf22c57403ce&amp;amp;chksm=fba0664accd7ef5c3e37025f98c84177c54c5ff17062f29cd80bdb083af214bda2e17acd1806&amp;amp;scene=21#wechat_redirect&#34;&gt;一款英文文章阅读翻译精品工具&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://mp.weixin.qq.com/s?__biz=MzU1MDQwMTU5OQ==&amp;amp;mid=2247484675&amp;amp;idx=1&amp;amp;sn=d61412eac916fcfd8a6fc1014d04225b&amp;amp;chksm=fba06653ccd7ef453a0501799139de1a2dfc774fe44f21e257ea70dec7fdeecb301f55790aa5&amp;amp;scene=21#wechat_redirect&#34;&gt;QQ 邮箱设置自定义域名邮箱&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://mp.weixin.qq.com/s?__biz=MzU1MDQwMTU5OQ==&amp;amp;mid=2247484663&amp;amp;idx=1&amp;amp;sn=39d591ff27eddc19fed6f88d73072b87&amp;amp;chksm=fba067a7ccd7eeb197de199c2e2be1981a84184871fe0bc26dc7b4fb90a8cd3c60de2802c14e&amp;amp;scene=21#wechat_redirect&#34;&gt;吐槽一下微信公众号的赞赏号&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://mp.weixin.qq.com/s?__biz=MzU1MDQwMTU5OQ==&amp;amp;mid=2247484644&amp;amp;idx=1&amp;amp;sn=357e7249e3360d5fccba268662686b2c&amp;amp;chksm=fba067b4ccd7eea27dbe1f446d914502d06d07471ca6eaa62aab03bdaa97ad9c27390a501873&amp;amp;scene=21#wechat_redirect&#34;&gt;R EnhancedVolcano 绘制火山图&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://mp.weixin.qq.com/s?__biz=MzU1MDQwMTU5OQ==&amp;amp;mid=2247484637&amp;amp;idx=1&amp;amp;sn=6621ed0c5c9d8f4b69d4231080f75d49&amp;amp;chksm=fba0678dccd7ee9b9fc9a904baddc09eae33e59e4423ad483cb11e3688d1322efdc0f4cd68f4&amp;amp;scene=21#wechat_redirect&#34;&gt;Galaxy 生信平台(三)：xlsx 上传与识别&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;2020-图文消息&#34;&gt;▌2020  图文消息&lt;a class=&#34;headerlink&#34; href=&#34;#2020-图文消息&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://mp.weixin.qq.com/s?__biz=MzU1MDQwMTU5OQ==&amp;amp;mid=2247489984&amp;amp;idx=1&amp;amp;sn=75ccf473af2248e533d560931b015fe9&amp;amp;chksm=fba07a90ccd7f386d2b929f09540154292a1ab49b428b721e94486a699d31616d841e43afae6&amp;amp;scene=21#wechat_redirect&#34;&gt;一个  coding.net 的  DevOps 全流程操作任务&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://mp.weixin.qq.com/s?__biz=MzU1MDQwMTU5OQ==&amp;amp;mid=2247489358&amp;amp;idx=1&amp;amp;sn=7c22a5037028a0ca719b469671e33338&amp;amp;chksm=fba0741eccd7fd08e25edd0fea1aa45e1ca027b1b58f3df08c937c5df2d611f9f02c7e46ec63&amp;amp;scene=21#wechat_redirect&#34;&gt;安利一个 10 个月的语雀个人会员 VIP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://mp.weixin.qq.com/s?__biz=MzU1MDQwMTU5OQ==&amp;amp;mid=2247489354&amp;amp;idx=1&amp;amp;sn=94e248edb52d78829dcd5f084d9bdb3b&amp;amp;chksm=fba0741accd7fd0c28618a5254df2b4bc00f72644f3c44dbff95965e902b37d0fbd0737a703a&amp;amp;scene=21#wechat_redirect&#34;&gt;发现了阿里云 OSS 对象存储的一个小 BUG&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://mp.weixin.qq.com/s?__biz=MzU1MDQwMTU5OQ==&amp;amp;mid=2247489081&amp;amp;idx=1&amp;amp;sn=ee1d602e5fd3d8c8349ddd9c165ed4b8&amp;amp;chksm=fba07569ccd7fc7fdfd35f8005504909758f3ed480c0cab200ba7c9d9b537223a1104443eef1&amp;amp;scene=21#wechat_redirect&#34;&gt;感谢 preprocessCore 原作者的热心帮助&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://mp.weixin.qq.com/s?__biz=MzU1MDQwMTU5OQ==&amp;amp;mid=2247488219&amp;amp;idx=1&amp;amp;sn=f9ac5f95747bd66f27ddfa8a2526d6b0&amp;amp;chksm=fba0718bccd7f89de6306984abc25ea07b4dca2b953e991245be4f1997ef4748c940c76670ce&amp;amp;scene=21#wechat_redirect&#34;&gt;云筏服务器 + Galaxy Project 的一些体验&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://mp.weixin.qq.com/s?__biz=MzU1MDQwMTU5OQ==&amp;amp;mid=2247488177&amp;amp;idx=1&amp;amp;sn=9644b7f3b4119932db23382c30023129&amp;amp;chksm=fba071e1ccd7f8f774fa31afa6c668009d7ed5a972a975ba90e3cb6a9a5b5891b5d9ce94df13&amp;amp;scene=21#wechat_redirect&#34;&gt;htop 和 bashtop 资源监视工具&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://mp.weixin.qq.com/s?__biz=MzU1MDQwMTU5OQ==&amp;amp;mid=2247486934&amp;amp;idx=1&amp;amp;sn=10b6fd37b5b7ec2437410b02124ca68d&amp;amp;chksm=fba06e86ccd7e79090126a77a08d5924b46b641413614d48daa668adee702299aab808d3d081&amp;amp;scene=21#wechat_redirect&#34;&gt;Ensembl API 发现官网 MySQL server 异常&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://mp.weixin.qq.com/s?__biz=MzU1MDQwMTU5OQ==&amp;amp;mid=2247485800&amp;amp;idx=1&amp;amp;sn=7d44b605586ff3a008a02831dbfdd0d5&amp;amp;chksm=fba06a38ccd7e32ead1f34d5cd4b1fa8c30df3ae3536585fb0705c104e537308699dfb5c52ce&amp;amp;scene=21#wechat_redirect&#34;&gt;GitHub 经常看到 &amp;ldquo;WIP&amp;rdquo; 的分支是什么意思&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://mp.weixin.qq.com/s?__biz=MzU1MDQwMTU5OQ==&amp;amp;mid=2247485796&amp;amp;idx=1&amp;amp;sn=83c1d3f2f299455c95dea3fbe101efe2&amp;amp;chksm=fba06a34ccd7e322deba4560aab4492e2b6deb015c8549d8a6f52c09e85f796cc8fd0b2a4f5c&amp;amp;scene=21#wechat_redirect&#34;&gt;推特用户做了一个实验，特拉普发什么推特，他就发一样的内容&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://mp.weixin.qq.com/s?__biz=MzU1MDQwMTU5OQ==&amp;amp;mid=2247485702&amp;amp;idx=1&amp;amp;sn=51ca55510cb9fdaf0755b0ad4c726660&amp;amp;chksm=fba06a56ccd7e3409df83535d6c27c172b19bd471bf96396e2377e05386d83fa4ca7d4308055&amp;amp;scene=21#wechat_redirect&#34;&gt;Galaxy Project 每个人都可以参与，并提交 PR&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://mp.weixin.qq.com/s?__biz=MzU1MDQwMTU5OQ==&amp;amp;mid=2247485480&amp;amp;idx=1&amp;amp;sn=b4a36078016c1c44006f9f4273291825&amp;amp;chksm=fba06b78ccd7e26e25abe221a2a1c865f4a9084b4ce8415d290ce20d5cf5178f3fc65d5f7673&amp;amp;scene=21#wechat_redirect&#34;&gt;Galaxy Project 开启无需重启持续开发和运维设置&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://mp.weixin.qq.com/s?__biz=MzU1MDQwMTU5OQ==&amp;amp;mid=2247484892&amp;amp;idx=1&amp;amp;sn=d21ca4504eb6a544de89c8328a8bf2c3&amp;amp;chksm=fba0668cccd7ef9a2e344128672d48b999ab6db69ffd7c8c6389d4141976a46d456f64683902&amp;amp;scene=21#wechat_redirect&#34;&gt;NAR  上关于 Galaxy 平台在几个独立面上的最新发展&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;公众号运营从来都不是一件容易的事情，尤其在追求流量的今天，更不用目前只有一个人在运营的公众号。2020 年，做了一些公众号推广，有人的地方就有江湖，在公众号这个江湖里，做了一些妥协，但不忘初心：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;商业化已经改变了写作的初衷。&lt;/li&gt;
&lt;li&gt;当写文章变成盈利的手段，那么，写出来的东西是没有灵魂的。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;人在看不见你更期望的路标时总是会变得消极。2021 年尚需更加努力，如果借用熊老师在 &amp;ldquo;素材学习分享周刊&amp;rdquo; 的三句话来总结一下今年，你的 2020 又是怎么样的呢？&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;今年我最大的收获是/最开心的是？&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;今年我最遗憾的是？&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;此时的我想对一年前的自己说什么？&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;141&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-141/</link>
      <pubDate>Sat, 30 Apr 2022 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-141/</guid>
      
    </item>
    
    <item>
      <title>2021 中秋之行</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;2021 年的中秋跟以往有点不一样，没有和国庆连在一起而是中间隔了将近一周多的时间。因此，对有些人九月份的假期安排可能有些尴尬。但是，对于不喜欢假期的我，还算不错。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FnCWM4YstHfatKu0YpuzFSmH4IvO.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;出发前&#34;&gt;出发前&lt;a class=&#34;headerlink&#34; href=&#34;#出发前&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;差不多一个月前就收到了岳父岳母的提醒：今年中秋前后老家新房子入住，回家一趟。所以，今年的中秋基本没有什么额外的 Plan B，就是回家，回家，回家！&lt;/p&gt;
&lt;p&gt;到了回家前一周（12 号）前后才最终确定新屋最终入住的日期，于是把回家时间成了 16 号返程，19 号回来。&lt;/p&gt;
&lt;p&gt;于是，开始请假、约车、确定回去的人、收拾东西、准备红包等等。怕小孩子在家里无所事事还专门给她下了好几部动画片（现在回想起来还真有点想多了），甚至把她最喜欢的几个玩具都带上了！&lt;/p&gt;
&lt;h2 id=&#34;出发&#34;&gt;出发&lt;a class=&#34;headerlink&#34; href=&#34;#出发&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;16 号一大早，坐上小舅子的车，一路狂奔，踏上归程。早 7:30 出发到下午 14:00 左右，终于回到。&lt;/p&gt;
&lt;h2 id=&#34;月是故乡圆&#34;&gt;月是故乡圆&lt;a class=&#34;headerlink&#34; href=&#34;#月是故乡圆&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;回家的头天，除了认人打招呼就是准备晚上的入住。&lt;/p&gt;
&lt;p&gt;顾不上归途的疲累，一切感觉还很新鲜。欣慰的是小孩子终于找到可以一起玩的小伙伴，对她来说这一次的回来，是会说话会走路后第一次回家见外公外婆，虽然认生，但总归是开心的。
&lt;img alt=&#34;6e3304f3d1c9307d33647f1f2fbf4eb.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FhMKTJ5jWZuvc5QUAUQspIhUeIO5.jpeg&#34; /&gt;&lt;img alt=&#34;e54572ebca3f235bf52509c67ceb6d7.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/Fpj8sXMzXA8PhwWdDCHCEU96J7RH.jpeg&#34; /&gt;
挂大红花球、贴对联粘利是，凌晨 12 点 10 分整，新房子入住。老家的新房子入住很讲究仪式，拿锅、抬桌子、挑水、挑担、......，也算是再一次见识了。&lt;/p&gt;
&lt;p&gt;第二天的入伙宴，认人打招呼、接待、聊天，真心是身心疲惫、忙碌又热闹的一天，整个人都快累趴了。&lt;/p&gt;
&lt;p&gt;第三天，吃吃喝喝，终于可以歇歇！
&lt;img alt=&#34;0f97b4e7203804e514f7d112225e587.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/Fsn3Zc2v6LTJ5qknKbcwM6DhVJ_4.jpeg&#34; /&gt; &lt;img alt=&#34;efaa0bdb9278004378998c852eae7f0.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FnWyIhqzRqlVPLrQH5iUUhLqxS2V.jpeg&#34; /&gt;
第四天，带着一堆孩子浩浩荡荡出来高州县城逛了一天。又折回到现住的家休息了半天（相比老家的闷热，还是这里干净舒服）。
&lt;img alt=&#34;9ae0f51d40605ef0350fa5f1fa18e15.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FpUkGIcqmlgmw1gyjCeHlZGj_74y.jpeg&#34; /&gt; &lt;img alt=&#34;465f58f85811452af118257f2ddd0cc.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FtFoT_mlS6cKniVfdSALzbsxVf-C.jpeg&#34; /&gt;
第五天，出发上来广州。同车是一个空军维修员的退伍老兵，一路听他讲了很多部队的事情，很是开眼界。&lt;/p&gt;
&lt;p&gt;中秋前的这趟回家，算是极其疲惫的一次。不管怎么说，在家乡看到一些人，经历了一些事。相比城市的喧嚣，农村小县城的安静温馨很能勾起我们一些久远的往事，想起十几年前在一中读书的点滴，想起自己许久未曾回去过的老家，想起自己这些年来的经历，时光飞逝年轻不在，不免心生感叹！&lt;/p&gt;
&lt;p&gt;值得一提的是，在老家接到了过过的电话，说通过了语雀天使计划的复试，后续会有专属礼物和官方认证聘书。除此以外，又收到了 CNGB 寄给我猛犸象信息（这里真心要感谢我曾经的同事小游姐给我送的这个这么有意义的礼物） ，心里很是高兴。&lt;/p&gt;
&lt;p&gt;语雀作为我记录和沉淀生活使用最多的平台，走到今天，我接受了它，它也认可了我，通过语雀天使计划的复试是这个独特中秋佳节的最大惊喜。&lt;/p&gt;
&lt;p&gt;我在 CNGB 从实习到工作呆了 4 年多，认识了一批非常可爱的华大人，度过了一段非常有意义和开心的时光，在这里祝福老东家的小伙伴们中秋节日快乐！&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;146&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-146/</link>
      <pubDate>Sat, 30 Apr 2022 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-146/</guid>
      
    </item>
    
    <item>
      <title>2021 年年终总结</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;如果说 2021 年发生的大事，除了中国共产党成立 100 周年印象最深，就是这一年来国内疫情的相对平缓——终于可以出门走走了。今天，是 2021 年的最后一天，恰好又是周五，盘点一下这一年自己的点滴。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;h2 id=&#34;工作&#34;&gt;工作&lt;a class=&#34;headerlink&#34; href=&#34;#工作&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;工作上这一年其实也没有什么太多的变化，内容上依然是离不开集群、数据、Galaxy，以及生信。在舒适区呆的久了，一叶障目，对机器学习、自动化部署/运维、药物开发蠢蠢欲动，做了一些尝试，接下来的一年应该会在这些赛道继续深耕吧。&lt;/p&gt;
&lt;h2 id=&#34;生活&#34;&gt;生活&lt;a class=&#34;headerlink&#34; href=&#34;#生活&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;这一年终于可以带娃周围走走了，但也仅限于黄埔附近的一亩三分地，总归是快活的。其他人与人之间的琐事磕碰，难免有些想法，回想起来依旧心绪难平，情绪的把控尚需修炼。值得一提的是还清一些贷款，终于又可以轻装上路，继续努力。&lt;/p&gt;
&lt;p&gt;自己喜欢的游戏，终于也有时间时不时的玩上几把了。&lt;/p&gt;
&lt;h3 id=&#34;网易云音乐&#34;&gt;网易云音乐&lt;a class=&#34;headerlink&#34; href=&#34;#网易云音乐&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;这一年听得歌不多，偏爱粤语歌曲，用网易云的一句话总结：&lt;strong&gt;灵魂有点靓仔，梦回港风时代！&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;img alt=&#34;d4879da849c828aae07de0bfb87c0c9.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FoJnkqqI2Wb0NFtYPg2GM24Eda2Y.jpeg&#34; /&gt;&lt;/th&gt;
&lt;th&gt;&lt;img alt=&#34;979c9f6c36dc5ad65603f9d4c4f924b.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FtjGvFAklQtdJ6m5H5woT2S6Hrgn.jpeg&#34; /&gt;&lt;/th&gt;
&lt;th&gt;&lt;img alt=&#34;87ae0b3643ec6c1a5bb56346d36ac64.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FtutoJuwALuw8xqLXSs9wXBLT91p.jpeg&#34; /&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;img alt=&#34;c4cce7dccb5b6dfd29ba664161cba18.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FpizFMVTBnpUXDhRgFCCtZhOgcn5.jpeg&#34; /&gt;&lt;/td&gt;
&lt;td&gt;&lt;img alt=&#34;3245b0c783cb345643dc18f83971a97.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FsihbAQCcnMICQKdUHerqvcFkXfa.jpeg&#34; /&gt;&lt;/td&gt;
&lt;td&gt;&lt;img alt=&#34;b92cecf95c5240673233906376cf8d6.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FkP1DeRZGPYK3P1bpKk44LIwvP95.jpeg&#34; /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;img alt=&#34;da053180b3075d3331e118f70b406a7.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FuRsyBk9sT6JYXKZ6QCk06KN_5dS.jpeg&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;写作&#34;&gt;写作&lt;a class=&#34;headerlink&#34; href=&#34;#写作&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&#34;语雀&#34;&gt;语雀&lt;a class=&#34;headerlink&#34; href=&#34;#语雀&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;2022-01-10 语雀的年度总结上线。我手写我心，自己消化，自己懵懂，自己释然，语雀好像已经成为了调节负能量的一个途径！
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/Fv81cCT_LajNLifPkZYSzX3EbYse.png&#34; /&gt;
&lt;img alt=&#34;语雀-2021-1.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FtfprxZKomqBzkjwAjGkp5GTuYnD.jpeg&#34; /&gt;
&lt;img alt=&#34;语雀海报.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FlGCJIvy7Eln5fzcru4esUqCY7b2.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;公众号&#34;&gt;公众号&lt;a class=&#34;headerlink&#34; href=&#34;#公众号&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;有幸读到陈皓老师的《&lt;a href=&#34;https://www.yuque.com/shenweiyan/articles/qw325a&#34;&gt;&lt;strong&gt;为什么我不在微信公众号上写文章&lt;/strong&gt;&lt;/a&gt;》这篇文章，的确给了我很多的启发，在 2021 年，关于写作这件事情上，想通了不少事情，心态自然而然发生了一些变化，开始变得更加佛系。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;我觉得一个人有一定的影响力，其中有很大一部份原因来自他的独立性，如果我开始写软文了，相当于我把自己卖了&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;所以，我现在从来不通过写文章挣钱，因为我会写代码，我还是通过我的技能挣钱，通过给一些公司做咨询、培训、企业服务挣钱，老实说，靠自己的能力挣钱，比写文章挣钱挣得多多了，因为我觉得，&lt;strong&gt;像我写的这类的文章本来就是用来分享和传播的，不是用来挣钱的。写文章的目的是分享和影响，不是挣钱。&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;写作是一种心灵的舞蹈，大多数都是舞给自己看的。&lt;/p&gt;
&lt;p&gt;回到公众号上，今年一共在公众号发了 68 篇推文（包括今天这篇），其中原创的 43 篇，转载的 7 篇，综合性文章 8 篇，图文记录 9 条，外加 1 个视频推文。&lt;/p&gt;
&lt;h4 id=&#34;2021-原创&#34;&gt;2021 原创&lt;a class=&#34;headerlink&#34; href=&#34;#2021-原创&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;生物信息&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;12-17：&lt;a href=&#34;https://mp.weixin.qq.com/s/Cq40vsktvi-9mn2xiH9Dmg&#34;&gt;生物科学数据分析和数据管理本体论&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;11-19：&lt;a href=&#34;https://mp.weixin.qq.com/s/qojN2kYMLq4W_RC7jSyzrg&#34;&gt;Bioconductor 中的 R 包安装教程(续一)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;09-27：&lt;a href=&#34;https://mp.weixin.qq.com/s/vf5zmFI_ZS1bqrSRHKdz7Q&#34;&gt;Python 获取 NCBI 基因名 SSL 证书异常？&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;06-12：&lt;a href=&#34;https://mp.weixin.qq.com/s/xlGyJeukJU_vc4M_39dvXg&#34;&gt;使用 Docker 分析高通量测序数据&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;(云)服务器&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;10-16：&lt;a href=&#34;https://mp.weixin.qq.com/s/u1Dw8_2MzCdyjtci9cwJEQ&#34;&gt;服务器无法登录？教你如何解决 SSH Failed Permission Denied&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;09-30：&lt;a href=&#34;https://mp.weixin.qq.com/s/go0j82Lh6jDcexqmVec4FA&#34;&gt;腾讯云升级 Rocky Linux&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;09-29：&lt;a href=&#34;https://mp.weixin.qq.com/s/n98ANL3Y1t38ZqWAyqu_dg&#34;&gt;后 CentOS 时代，作为服务器使用我们该选什么 Linux？&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;09-03：&lt;a href=&#34;https://mp.weixin.qq.com/s/8yrs5j3HRBb59FkQIYrllg&#34;&gt;服务器崩溃日志 | 误删 OpenSSL 的那点事&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;08-03：&lt;a href=&#34;https://mp.weixin.qq.com/s/hTk0wgb1sUIhsKESNTSbUg&#34;&gt;服务器又中毒了，得治一治！&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;07-26：&lt;a href=&#34;https://mp.weixin.qq.com/s/twPGVKsdd7HsRkDQfDv91w&#34;&gt;生信服务器 | 防火墙基本配置&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;05-27：&lt;a href=&#34;https://mp.weixin.qq.com/s/eNU4YuHqxVY45raiCHXmtA&#34;&gt;生信服务器 | 更改 CentOS/RHEL 6/7 中的时区&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;01-21：&lt;a href=&#34;https://mp.weixin.qq.com/s/kF9_C23UYjjWoDg4fWyQzg&#34;&gt;生信服务器 | Linux 时间戳和标准时间&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;静态网站&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;12-24：&lt;a href=&#34;https://mp.weixin.qq.com/s/CosiH4w1wCTkc5H9TGGRBA&#34;&gt;腾讯云云开发 Webify 上手体验&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;02-05：&lt;a href=&#34;https://mp.weixin.qq.com/s/pDw6_zgl6wkJgpt6WuyvsA&#34;&gt;阿里云证书 | 套路太深，还是我打开姿势不对？&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;01-08：&lt;a href=&#34;https://mp.weixin.qq.com/s/i4obfyd6aJ8HsKdR7cvz3g&#34;&gt;自定义 coding.net 静态网站域名&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;版本控制&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;12-10：&lt;a href=&#34;https://mp.weixin.qq.com/s/4P2A1zb8VRMg9VYi_QiehQ&#34;&gt;GitHub 代码实时同步 gitee 和 coding&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Galaxy Project&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;11-04：&lt;a href=&#34;https://mp.weixin.qq.com/s/C5Av4qz1Vuxx7EBevDGyug&#34;&gt;Galaxy Release (v 21.09)，新的工具面板视图&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;06-17：&lt;a href=&#34;https://mp.weixin.qq.com/s/QxA2i-4H2QPotSzfOq_4fg&#34;&gt;Galaxy Release (v 21.05)，众多核心技术栈变更&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;05-19：&lt;a href=&#34;https://mp.weixin.qq.com/s/NrvlelvC6uLAnJhWMMLacQ&#34;&gt;Galaxy Project | 一些尝试与思考&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;04-02：&lt;a href=&#34;https://mp.weixin.qq.com/s/JyL75dmUpz1tkDjv3DpAsg&#34;&gt;Galaxy v-21.01 发布，新的流程和历史栏体验&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;01-13：&lt;a href=&#34;https://mp.weixin.qq.com/s/BOHUzRbcCAH1LwihwBA4Yg&#34;&gt;Galaxy Project | 生信人最值得学习的开源项目之一&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;个人随笔&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;10-14：&lt;a href=&#34;https://mp.weixin.qq.com/s/mv6oHB7ZLw7fuz2PNtTepQ&#34;&gt;语雀天使&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;06-16：&lt;a href=&#34;https://mp.weixin.qq.com/s/SVfMMIMph7jap5UcykSo8w&#34;&gt;疫情下的广州&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;06-03：&lt;a href=&#34;https://mp.weixin.qq.com/s/dhhFLRh9RL_E2B8Vj9OSeg&#34;&gt;终于把 7 年前的 Docker Hub 账号恢复了&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;编程技术&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;08-09：&lt;a href=&#34;https://mp.weixin.qq.com/s/ygCbt5nV8mOIax7FBXViCQ&#34;&gt;Python Excel 操作 | xlrd+xlwt 模块笔记&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;04-16：&lt;a href=&#34;https://mp.weixin.qq.com/s/HcNt-WzZjipGG6dDQAgHgw&#34;&gt;Python 中常见的 TypeError 是什么？&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;04-09：&lt;a href=&#34;https://mp.weixin.qq.com/s/5w20SbS1PuiyqP5oTXn5ZQ&#34;&gt;R 语言中常见的 10 个错误，看到第 7 个会不会感觉很神奇？&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;03-30：&lt;a href=&#34;https://mp.weixin.qq.com/s/-YLE-RjU0q8pBk9qlLsf1w&#34;&gt;Python 列表、字典、元组的一些小技巧&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;03-02：&lt;a href=&#34;https://mp.weixin.qq.com/s/Cu8Q_mmkUfGGOrntPWVh1A&#34;&gt;R 语言 download.file 的几点知识&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;科研见闻&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;07-21：&lt;a href=&#34;https://mp.weixin.qq.com/s/S2JRu-F_-LQRt5LYh_QaOA&#34;&gt;沉痛悼念 pip search 一路走好&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;05-08：&lt;a href=&#34;https://mp.weixin.qq.com/s/uqydAoNRY0wSXqmdWCuq-Q&#34;&gt;英伟达人工智能和处理器驱动的制药、生命科学合作&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;04-30：&lt;a href=&#34;https://mp.weixin.qq.com/s/hA6966BeDvk1-AY8TlL_JA&#34;&gt;科研杂谈 | 全球最大的数字图书馆&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;软件应用&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;12-08：&lt;a href=&#34;https://mp.weixin.qq.com/s/Zy1AGsM5rMJH9ngrfB1x1A&#34;&gt;文件传输命令 rz 与 sz 安装与使用&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;11-02：&lt;a href=&#34;https://mp.weixin.qq.com/s/0VrkNotpF6KlNVJq36sn9A&#34;&gt;微信 | PC 端使用 USB 共享网络备份&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;09-11：&lt;a href=&#34;https://mp.weixin.qq.com/s/GrSg8RdjlAAOTmgzpdf8zg&#34;&gt;SCL+Devtoolset 安装与使用笔记&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;09-01：&lt;a href=&#34;https://mp.weixin.qq.com/s/IsPIGknkXLsHx7MgiCcz7g&#34;&gt;GLIBC 升级安装与 SCL 知识盲区&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;08-18：&lt;a href=&#34;https://mp.weixin.qq.com/s/_sVajE6uutLsdR4pHLmwmQ&#34;&gt;Python 包安装和 postgresql 的一些问题&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;07-17：&lt;a href=&#34;https://mp.weixin.qq.com/s/gVWGjxG9qd7qSyX3N8Zgag&#34;&gt;我给自己做了一个导航网站&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;04-24：&lt;a href=&#34;https://mp.weixin.qq.com/s/ArseLf89u76cHZzHE1l-JQ&#34;&gt;又爱又恨的 Microsoft Edge！&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;03-26：&lt;a href=&#34;https://mp.weixin.qq.com/s/DXEmYz8akoDtshE1ziaG2g&#34;&gt;使用码云同步谷歌 Chrome 浏览器书签&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;02-26：&lt;a href=&#34;https://mp.weixin.qq.com/s/aHvkdwsPP3OBhUcXDMhkQQ&#34;&gt;Windows/Linux 下功能强大的桌面截图软件&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;02-19：&lt;a href=&#34;https://mp.weixin.qq.com/s/2XId7dvAc_mMUszzRKeSiw&#34;&gt;为 Windows 系统替换优雅的苹果字体&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;2021-转载&#34;&gt;2021 转载&lt;a class=&#34;headerlink&#34; href=&#34;#2021-转载&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;10-20：&lt;a href=&#34;https://mp.weixin.qq.com/s/nnE_M7isih3komrw3pccGw&#34;&gt;我和语雀的小欢喜呀&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;07-06：&lt;a href=&#34;https://mp.weixin.qq.com/s/2v1c_Nlk5OhSL3O8k2N9Tw&#34;&gt;RStuido Server 选择不同的 R 版本（conda 中的不同 R 版本）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;06-19：&lt;a href=&#34;https://mp.weixin.qq.com/s/w67bOn2FRO0B4gB8wULHIw&#34;&gt;Bash 编程&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;05-24：&lt;a href=&#34;https://mp.weixin.qq.com/s/vE5FbxK7ZPC-_V3yFKojmA&#34;&gt;Docker 与 K8S 的区别与介绍&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;03-17：&lt;a href=&#34;https://mp.weixin.qq.com/s/zY9-HHyUTFE7rTUMef_cuQ&#34;&gt;生信人实现“SCI 自由”的秘密竟然是…&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;03-04：&lt;a href=&#34;https://mp.weixin.qq.com/s/OFGKfsAfqPU_o1PpKpKb7Q&#34;&gt;图解三代测序（SMRT Sequencing）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;01-06：&lt;a href=&#34;https://mp.weixin.qq.com/s/ggHhyN2Z38vJr64e7CYfyA&#34;&gt;深入浅出介绍聚类分析&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;2021-综合&#34;&gt;2021 综合&lt;a class=&#34;headerlink&#34; href=&#34;#2021-综合&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;11-11：&lt;a href=&#34;https://mp.weixin.qq.com/s/FMMx943coYWvgr1uUbTCfQ&#34;&gt;一个专注于微信公众号 Markdown 排版的平台&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;10-22：&lt;a href=&#34;https://mp.weixin.qq.com/s/Jyxznyztoxx0NKalz7o_9A&#34;&gt;服务器推荐 | 2 核 4G 云服务，首年只需要 70 元&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;09-07：&lt;a href=&#34;https://mp.weixin.qq.com/s/iRbpQi6wS_lSdRchwVj8Fw&#34;&gt;收藏 | 服务器和存储技术知识&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;09-06：&lt;a href=&#34;https://mp.weixin.qq.com/s/ycc06QYh4Ef6sGBbCAKXHQ&#34;&gt;男女洗澡前后区别，太形象了！&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;03-29：&lt;a href=&#34;https://mp.weixin.qq.com/s/61OBH4coZDeBHPbbAJekog&#34;&gt;Mdnice 简洁主题&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;03-05：&lt;a href=&#34;https://mp.weixin.qq.com/s/_eBBAu_RotajMz4f0rY9EA&#34;&gt;肠道菌群机制研究及国自然课题设计专题会议&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;01-16：&lt;a href=&#34;https://mp.weixin.qq.com/s/BWIKU-yCaDLxSedc7mxJBA&#34;&gt;机房布线的最高境界……&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;01-02：&lt;a href=&#34;https://mp.weixin.qq.com/s/5-PHC4myrc3FNzy0eqxs1Q&#34;&gt;一针重复 2 万亿段代码，我「逆向工程」了辉瑞疫苗！&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;2021-图文&#34;&gt;2021 图文&lt;a class=&#34;headerlink&#34; href=&#34;#2021-图文&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;11-08：&lt;a href=&#34;https://mp.weixin.qq.com/s/5WnnAeWxivE9XC1eBOfDvw&#34;&gt;Rocky Linux 阿里云镜像源来啦！&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;10-09：&lt;a href=&#34;https://mp.weixin.qq.com/s/fMN41JojYEOs_RWfeztuQg&#34;&gt;Google 是要放弃中文搜索了吗？&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;10-02：&lt;a href=&#34;https://mp.weixin.qq.com/s/eh8O7uxru1j6EqN22MsQpg&#34;&gt;《鸟哥的 Linux 私房菜》第四版&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;09-24：&lt;a href=&#34;https://mp.weixin.qq.com/s/rcH6bNQw-fgh-NuCyHAHaA&#34;&gt;浏览器标准被大公司左右 - 科技爱好者周刊（第 177 期）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;09-21：&lt;a href=&#34;https://mp.weixin.qq.com/s/jT3s7OiDtT7WWobZXkdzKQ&#34;&gt;祝所有的读者中秋节快乐！&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;09-09：&lt;a href=&#34;https://mp.weixin.qq.com/s/OL9SVmQTvXZS8fqoQwrmBw&#34;&gt;语雀的用户创作指数默默上线了！&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;08-24：&lt;a href=&#34;https://mp.weixin.qq.com/s/mk1rdAEJhi9JnXvdrrQgKg&#34;&gt;Edge 浏览器新标签页出现广告区&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;06-14：&lt;a href=&#34;https://mp.weixin.qq.com/s/cEjIU8HkjvHiosOL2tmtHQ&#34;&gt;祝福所有的 Bio &amp;amp; IT 爱好者们，端午节安康！&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;04-20：&lt;a href=&#34;https://mp.weixin.qq.com/s/9POhcHVTVTIV-26Dd01KBA&#34;&gt;阿里云网盘 PC 端内测版已经悄悄来了！&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;2021-视频&#34;&gt;2021 视频&lt;a class=&#34;headerlink&#34; href=&#34;#2021-视频&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;01-29：&lt;a href=&#34;https://mp.weixin.qq.com/s/OGwFPqPTsCR3HlW2Q7lceA&#34;&gt;欢迎加入 Galaxy 2021 年管理员培训课程&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;最后&#34;&gt;最后&lt;a class=&#34;headerlink&#34; href=&#34;#最后&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;如果你通过这个平台学到了一点东西，那么对我最好的奖赏就是请你也尝试教我些东西(可以通过邮箱、微信，或者其他社交平台和我联系)。&lt;/p&gt;
&lt;p&gt;希望所有读到此平台文章的读者都有所收获。&lt;/p&gt;
&lt;p&gt;希望我自己在学习工作生活中尽心尽力有所收获，于人于己问心无愧。&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;121&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-121/</link>
      <pubDate>Sat, 30 Apr 2022 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-121/</guid>
      
    </item>
    
    <item>
      <title>2022 年卡塔尔世界杯</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;2022 年 12 月 18 日，有幸从头到尾看完了这一场精彩而刺激的世界杯决赛！！！&lt;/p&gt;
&lt;!-- more --&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;📢 阿根廷冠军！&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;当地时间 2022 年 12 月 18 日，卡塔尔卢塞尔城 2022 卡塔尔世界杯决赛，阿根廷 3-3 法国（点球 4-2）！&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.zhihu.com/question/573022232&#34;&gt;卡塔尔世界杯决赛算不算的上是有史以来最精彩的世界杯决赛？&lt;/a&gt; - 知乎&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;诸神黄昏，众神谢幕，最后一舞！一代人终将老去，但总有人正年轻！&lt;/p&gt;
&lt;p&gt;总裁 C 罗，内少内马尔，魔笛莫德里奇，武僧佩佩，梅老板梅西大，二娃穆勒，苏牙苏亚雷斯，大圣贝尔，本泽霸王龙本泽马，天使迪马利亚......&lt;/p&gt;
&lt;p&gt;诸神的黄昏带走了我们终将逝去的青春，少壮派的崛起又将镌刻他们喷薄的青春。&lt;/p&gt;
&lt;p&gt;冠军并不总是踢得漂亮华丽，而是摸爬滚打，瑕瑜互见磨出来的。所谓冠军，得能赢难看的比赛。
&lt;img alt=&#34;db1a900752bdcd6f9e01e5205b04592.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FkIaltEbQhb2b7VfLeU5zACnb7V3.jpeg&#34; /&gt; &lt;img alt=&#34;4d93bd34e765cde520f55f967fa125e.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FgZDzx8D139g-zIBiyqQRiZbeoTP.jpeg&#34; /&gt; &lt;img alt=&#34;64379daa896155e07e4c6765978912d.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FsLzXEtELxz2ZWRztvfXW7Cp0wc5.jpeg&#34; /&gt; &lt;img alt=&#34;d707ddf6cd0a1344a87abb6bfc92dc4.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FnhvPBlAAJ8Ugpgnng_qigd2hY90.jpeg&#34; /&gt;
许多年之后，人们将会回想起，2022 年，卡塔尔卢塞尔球场，见证了第三代球王梅西一个英雄般伟大宏伟的登基仪式。
&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FnOmHGipGvbSj2W8T5888fOvKj4H.jpeg&#34; /&gt;
&lt;img alt=&#34;639f6ec4f3e82afe2b2a21cf.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FgpnSQ6T-y3a1H2pzo7GkfT0PnU6.jpeg&#34; /&gt;
&lt;img alt=&#34;当地时间2022年12月18日，卡塔尔卢塞尔城，2022卡塔尔世界杯决赛，阿根廷3-3法国（点球4-2）。（图｜视觉中国）&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FpBazmmmMeqI0jI_GLYIfZrbinU6.jpeg&#34; title=&#34;当地时间2022年12月18日，卡塔尔卢塞尔城，2022卡塔尔世界杯决赛，阿根廷3-3法国（点球4-2）。（图｜视觉中国）&#34; /&gt;&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;126&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-126/</link>
      <pubDate>Sat, 30 Apr 2022 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-126/</guid>
      
    </item>
    
    <item>
      <title>2022，虎年春节，吉祥团圆</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;大年初七，上班的第一天，终于也有时间可以把这几天春节的点滴记录一下了。之前在朋友圈分享过，但朋友圈是短暂的，而文章是长情的，我希望留住这份美好，能更久一点。    &lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;&lt;img alt=&#34;2022.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FpT1WdOuU76X6OfNoaJQe5FQt_xP.jpeg&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;年前&#34;&gt;年前&lt;a class=&#34;headerlink&#34; href=&#34;#年前&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;疫情反复，导致今年的春节是否回家过年略微带上了一些不确定性，幸好早早做了规划，一切都还在计划之内。&lt;/p&gt;
&lt;p&gt;年廿五（1.27），老妈和老哥第一批返程，中午十二点半从广州出发经中山接上老爸。&lt;/p&gt;
&lt;p&gt;年廿七（1.29），和老婆孩子第二批返程，小舅子一个人开车早上九点出发到下午四点左右，一共七个小时才回到。这一次的返程之行，除了沿途气温骤降外，小孩子在车上大吐了两次也有点猝不及防。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;img alt=&#34;3cda996b528a192eb35da00573efbd3.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FubxsMD4nvAwnh9BMgdT3UA5QWa5.jpeg&#34; /&gt;&lt;/th&gt;
&lt;th&gt;&lt;img alt=&#34;cac8d3647c5cabd6ce80068313e8ed4.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/Ft62v-Fn4W5TpWQgdBYKQkOA2wqu.jpeg&#34; /&gt;&lt;/th&gt;
&lt;th&gt;&lt;img alt=&#34;4223f03689f5c2ee6f45b91a2b80cc4.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/Fviz5IDI7ADFtjyPCIUO0zG6o8wv.jpeg&#34; /&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;年廿八（1.30），下午 16 点左右，从大姑家返回老家。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;img alt=&#34;d781e55610512ea69bf5d190579253f.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FpBpM_0MuUv95PsOAHkC06PBQD7Y.jpeg&#34; /&gt;&lt;/th&gt;
&lt;th&gt;&lt;img alt=&#34;afe463024dc9884e7eb3fa353bfcbee.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/lgNaWpARjl2EGtO17vo0aqB6DoFR.jpeg&#34; /&gt;&lt;/th&gt;
&lt;th&gt;&lt;img alt=&#34;fac410fa5487fd8b30d47191288ba38.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/Fn1D93EZfJqfNeAwBI4_lfZTPXzx.jpeg&#34; /&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;除夕&#34;&gt;除夕&lt;a class=&#34;headerlink&#34; href=&#34;#除夕&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;年廿九（1.31）是除夕，烧纸拜神，放鞭炮，吃团年饭。今年的除夕全家人都回来了，算得上一个真正意义上的团圆，圆满且开心。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;img alt=&#34;a8c4a7f04a897b45c3c21a4147b0e43.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FqeC-3Iy2WyWR4fC0q-Sx6QhCZjR.jpeg&#34; /&gt;&lt;/th&gt;
&lt;th&gt;&lt;img alt=&#34;ac2e44439f9cf735c9823ad61c6da3b.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/Fg1Qu7PTOk9bTKIX39gVJMBY58Au.jpeg&#34; /&gt;&lt;/th&gt;
&lt;th&gt;&lt;img alt=&#34;a52931041cf28da99d041b78c0268bf.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/lu9_cZtq9x54hJABuEAMm55U74Xp.jpeg&#34; /&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;年后&#34;&gt;年后&lt;a class=&#34;headerlink&#34; href=&#34;#年后&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;2022 年的春节是寒冷的，平均气温 10 度左右，加上小雨绵绵，把大家出行的欲望都冷成了蛰伏在家。雨停间隙的串门便成了唯一的消遣和娱乐。&lt;/p&gt;
&lt;p&gt;最温馨的，有多年未见的亲朋邻居寒暄问候；最开心的，是小孩子间嬉闹玩耍的瞬间 —— 她们又有了新的玩伴，放鞭炮玩游戏总是人多才热闹。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;img alt=&#34;878724c7cdbaf7268311d613c74e61c.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FhLrSner9xGTraNgyyXHrIfdOe1P.jpeg&#34; /&gt;&lt;/th&gt;
&lt;th&gt;&lt;img alt=&#34;5d4ddcfc9d94ce57bef737d8818574b.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FgtSdmTyg4Amf8jBPsUAUcjk-atG.jpeg&#34; /&gt;&lt;/th&gt;
&lt;th&gt;&lt;img alt=&#34;9ce797ee68f381b8d936581bf0bbd80.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/Fmws5LYxFo0nS88gWL7wXRIH0reo.jpeg&#34; /&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;年初二，岳父岳母姑姑姐夫一行的到来，热热闹闹的感动。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;img alt=&#34;4e18c109fdbf37e01999b88704d67a4.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FtfpMqLIk_Sf0Uw-oiU_cIcwXBX2.jpeg&#34; /&gt;&lt;/th&gt;
&lt;th&gt;&lt;img alt=&#34;f6b2172539e7ee77f8b113609837527.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FmFNc_DwOcfDAQDSK2wGSWGv_vqc.jpeg&#34; /&gt;&lt;/th&gt;
&lt;th&gt;&lt;img alt=&#34;c1f1d083c40849ead4343da23ea4088.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FmjL-QRN-ANxLAnZ5DRaHXNJH2_R.jpeg&#34; /&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;img alt=&#34;019ddce2548e9372685471d06fc6a20.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FmM1ZnBXOYGACGeqw-bPLzn8rf44.jpeg&#34; /&gt;&lt;/td&gt;
&lt;td&gt;&lt;img alt=&#34;5762d075ad4df3fb9ff82feae28818f.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/lvHakUToRbtZIhp9H5Ol-vFb1rxu.jpeg&#34; /&gt;&lt;/td&gt;
&lt;td&gt;&lt;img alt=&#34;ea01365a5d3d6f7dbb5ceeafd0f954e.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FtOZUYjOyia0aTsSEmqDH6-X2mr9.jpeg&#34; /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;年初三，初四，在岳父岳母家玩了两天，各种好吃的好玩的。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;img alt=&#34;7962b965c26f6a4f67c1640f5a099e9.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/ltW-Sx7oq4HP1fVDdxNJvcDXVlRG.jpeg&#34; /&gt;&lt;/th&gt;
&lt;th&gt;&lt;img alt=&#34;13fde8e4cdc06e906bc999f12bb1f1c.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/lv5z2LcR4cOTdUwB016QKtVFEoJo.jpeg&#34; /&gt;&lt;/th&gt;
&lt;th&gt;&lt;img alt=&#34;d77af5ceae2d0ea650585e33f518ef3.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/lmzgVgPXt_iYveM2K3Bsjlex7O9d.jpeg&#34; /&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;img alt=&#34;abd7985b50faa56b1cca517385e064d.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/lqtql02J8TXr-a4XcHZesb2tLkML.jpeg&#34; /&gt;&lt;/td&gt;
&lt;td&gt;&lt;img alt=&#34;3b06937d1f1b05bdb6ecdd614176191.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/lvYgOFy-Vcg7NfPqbLuoWV9Or2ft.jpeg&#34; /&gt;&lt;/td&gt;
&lt;td&gt;&lt;img alt=&#34;91ed3c752568096ada59dd05512cf88.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/lsJyvUtnBNznj7e0SGm2MB40Hj95.jpeg&#34; /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;出发&#34;&gt;出发&lt;a class=&#34;headerlink&#34; href=&#34;#出发&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;开心的时光过的特别快，时至大年初五，山河远阔，人间烟火，再度出发！&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;img alt=&#34;ef76228d712af93e9d6b192eb8d862a.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FighFS8kRz_bqtka-_P77aTEe3ps.jpeg&#34; /&gt;&lt;/th&gt;
&lt;th&gt;&lt;img alt=&#34;c283f23436c74ab0e9efb0cbdd4071d.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/luCg7taqpN6OGYWCG9G9W3mpq0lC.jpeg&#34; /&gt;&lt;/th&gt;
&lt;th&gt;&lt;img alt=&#34;0f3bd35fb87df860774453b95e4da62.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/lkyBcDbPMzsGmP4rnDFNA-a2QBik.jpeg&#34; /&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;122&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-122/</link>
      <pubDate>Sat, 30 Apr 2022 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-122/</guid>
      
    </item>
    
    <item>
      <title>All in Yuque</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;语雀用了这么多年，有太多太多的东西保存在语雀了，这两天一直都在思考 All in Yuque 的这个问题。&lt;/p&gt;
&lt;p&gt;想先聊一下，为什么不再折腾个人的独立博客了。    &lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;首先，独立博客的选择可以有很多，WordPress、Hexo、Jeykll、Hugo ......，每一次都是先被某一个主题（自己也在 &lt;a href=&#34;https://www.yuque.com/shenweiyan/wow/qzt4ul?view=doc_embed&#34;&gt;博客 | 那些好看有内涵的博客与模板&lt;/a&gt; 里面搜集了一些）吸引住，费了九牛二虎之力搭建起来，更新一段时间文章；然后又被其他的主题或者框架吸引，接着继续去折腾；反反复复，中间耗费了大量的时间，累计沉淀的文档知识反而不多，有种丢了西瓜拣芝麻的感觉。    &lt;/p&gt;
&lt;p&gt;其次，独立博客本身的限制。主要在于没法满足私有+分享的需求，大多独立博客的功能在于公开分享，私有文档的功能极其薄弱甚至根本没有。     &lt;/p&gt;
&lt;p&gt;第三，基本上从 2018 年以来，个人的所有知识文档就转移到语雀了。曾几何时，受&lt;a href=&#34;https://yihui.org/&#34;&gt;谢益辉老师博客&lt;/a&gt;的影响，自己也折腾了一个 &lt;a href=&#34;https://github.com/shenweiyan/ICS-Hugo-Theme&#34;&gt;ICS-Hugo-Theme&lt;/a&gt; 的 Hugo 主题，而基于这个主题的&lt;a href=&#34;https://www.shumlab.com/&#34;&gt;个人独立博客&lt;/a&gt;现在基本变成存档的状态了，只是有空的时候会偶尔去折腾更新一下。     &lt;/p&gt;
&lt;p&gt;第四，GitHub 上有一个&lt;a href=&#34;https://github.com/timqian/chinese-independent-blogs&#34;&gt;中文独立博客&lt;/a&gt;列表的项目，很不错，也很佩服那些十年如一日更新的人——他们给我的一个启示就是专注积累和沉淀，主题框架还是相对次要的(不值得花太多时间去折腾)。&lt;a href=&#34;https://www.foreverblog.cn/&#34;&gt;十年之约&lt;/a&gt; 和 &lt;a href=&#34;https://bf.zzxworld.com/&#34;&gt;BlogFinder&lt;/a&gt; 是比较出名的社群，稳定且用户量大。这些社群有自己的交流平台，帮助作者认识更多的人。&lt;/p&gt;
&lt;p&gt;也简单聊一下，为什么放弃了其他的一些如&lt;strong&gt;博客园&lt;/strong&gt;、&lt;strong&gt;掘金&lt;/strong&gt;之类的平台（CSDN 就算了，乌烟瘴气的）。     &lt;/p&gt;
&lt;p&gt;这些平台很大的一个特色是社区氛围挺好，对于互联网搜索分享也有一定优势，但是对私有文档文档支持很差，这也是我放弃的主要原因；其次是编辑体验也一般。     &lt;/p&gt;
&lt;p&gt;说到这里，顺便提一下博客园——个人加入博客园（&lt;a href=&#34;https://www.cnblogs.com/shenweiyan/&#34;&gt;https://www.cnblogs.com/shenweiyan/&lt;/a&gt;）也已经有 8 年多，对博客园的写作氛围和几十年如一日纯粹无广告的态度相当赞赏，但私有文档的支持的确也基本等于零（也许是我没有找到正确的打开方式吧）。&lt;/p&gt;
&lt;p&gt;最后，回到今天的话题。     &lt;/p&gt;
&lt;p&gt;All in Yuque 其实就目前来说是可以的，自己一直以来也基本上这么干了，只是还有些地方不够满意而已。&lt;/p&gt;
&lt;p&gt;例如，&lt;strong&gt;小记&lt;/strong&gt;，中规中矩但贵在编辑器支持的样式多；眼馋 Flomo 的 UI 简洁和逻辑清晰，但人家不支持插入代码。&lt;/p&gt;
&lt;p&gt;例如，&lt;strong&gt;知识库&lt;/strong&gt;，编辑体验已经很好了（虽然还有可以做得更好的细节，如 Web 端编辑同时展示左边大纲），但最大的遗憾还是互联网比较难搜索到语雀的内容（好像目前无能为力）。
还要吐槽一下知识库文档的段落距离——跟行距相似度太高了，简直分辨不出来——看的好难受！空一行行距又太高——我好难 😭&lt;/p&gt;
&lt;p&gt;例如，存量的&lt;strong&gt;话题知识库&lt;/strong&gt;，极好的一个知识库类型，可惜不能按照标题名称排序（相当简单的一个小功能，却一拖再拖，未能上线）；嵌入语雀内容在话题知识库知识库中也不如人意，最起码渲染速度就有点让人抓狂了；还有最坑的一点，话题知识库不能插入本地视频！&lt;/p&gt;
&lt;p&gt;例如，&lt;strong&gt;逛逛&lt;/strong&gt;，能看的东西好像太少了，也不能刷新换一批；另外还有一个感觉（不知道是不是我的错觉），就是语雀对于前端、设计、以及一些方法论的东西尤其看重，逛逛/推荐里面很多这些方面的文档内容，其他方向的内容极少。&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;128&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-128/</link>
      <pubDate>Sat, 30 Apr 2022 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-128/</guid>
      
    </item>
    
    <item>
      <title>一个纯粹的人</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;blockquote&gt;
&lt;p&gt;Categories: 博客/语雀&lt;/p&gt;
&lt;p&gt;我和白求恩同志只见过一面。后来他给我来过许多信。可是因为忙，仅回过他一封信，还不知他收到没有。对于他的死，我是很悲痛的。现在大家纪念他，可见他的精神感人之深。我们大家要学习他毫无自私自利之心的精神。从这点出发，就可以变为大有利于人民的人。一个人能力有大小，但只要有这点精神，就是一个高尚的人，一个纯粹的人，一个有道德的人，一个脱离了低级趣味的人，一个有益于人民的人。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;这是毛泽东同志在《纪念白求恩》原文中的一句话，时至今天看起来，依然让很多自以为是的那些人汗颜。抛开“有益于人民”的大高度，生活中没有脱离低级趣味的人也有不少。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p align=&#34;center&#34;&gt;
    &lt;img src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FmuqcJBMECQ1QKbE8_4TjZLqpuo6.jpeg&#34; alt=&#39;Che Guevara&#39;&gt;&lt;br&gt;
    &lt;span&gt;切‧格瓦拉(Che Guevara)&lt;/em&gt;
&lt;/p&gt;

&lt;p&gt;一者，修养差且情绪管控弱，喜欢道德绑架。修养，指的是心境平和，度量大，成熟稳重等，那些动不动就看不惯别人的人，自然没有这些修养。这也跟性格和认知有关。只要等他知道了，别人怎样他是影响不了的，他也不需要去管，或许他就淡定了。&lt;/p&gt;
&lt;p&gt;二者，敏感好为人师，缺乏自知之明。一个成年人，一个孩童，都有独立于他人的世界、价值观念，有一些非亲非故的陌生人，偏偏喜欢动不动对你指手画脚，一副高高在上的长者姿态。这些像猴子一样的人还不自知，可笑之极。&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;117&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-117/</link>
      <pubDate>Sat, 30 Apr 2022 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-117/</guid>
      
    </item>
    
    <item>
      <title>一些好玩的命名风格</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;blockquote&gt;
&lt;p&gt;Categories: 博客/语雀&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;码云 gitee 名字的由来的一种解析：后缀 ee 附于动词后，表示动作的受动者。与之相应，动作的施动者则由后缀 er/or 表示。gitee 的意思就是“使用 git 的群体”，你懂了吗？ 反正我是懂了！&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;于是有了我的 bioitee：&lt;/p&gt;
&lt;p&gt;一群从事与爱好 Bio IT 的群体。你懂了吗？反正我懂了！&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;112&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-112/</link>
      <pubDate>Sat, 30 Apr 2022 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-112/</guid>
      
    </item>
    
    <item>
      <title>不提供账号注销等于耍流氓</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;blockquote&gt;
&lt;p&gt;Categories: 博客/语雀&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;作为一个生信工程师，不知道大家平时是怎么管理和备份自己的一些流程和脚本？而我个人则比较喜欢用 git。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;&lt;img alt=&#34;zhanghao.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FgjHQn_wdWob063qAiBlTG8nlKn2.jpeg&#34; /&gt;&lt;/p&gt;
&lt;p&gt;说到 git 代码托管，国外的 GitHub、GitLab 相信大家都已经很熟悉；国内比较知名的，除了码云，CODING 应该也算得上一个。在最开始的前几年，甚至到 2017、2018 年，Coding.net 代码托管平台的用户体验都还挺不错的，但 2019 年和腾讯云开发者平台合并后，就开始变得越来越鸡肋了，合并后虽然说是不限存储不限项目提供代码托管。&lt;/p&gt;
&lt;p&gt;CODING 个人版有几点不太友好的体检经历：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;在同一个产品中过多的嵌套 coding.net 和 dev.tencent.com 两个域名的链接跳转，用着用着就让人有一种分不清楚这个到底是原来的 CODING 还是腾讯云开发者平台！&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;CODING 个人版个人主页，公开的项目却显示的是仓库名称！这样，在仓库中设置项目名称的意义是什么？&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FsIF_mY1Mplnv6WHf_Oc0LlOTAR3.png&#34; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;注销账号， CODING 只提供账号锁定功能！！！&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;《电信和互联网用户个人信息保护规定》（工业和信息化部令第 24 号）第九款第四款规定：“电信业务经营者、互联网信息服务提供者在用户终止使用电信服务或者互联网信息服务后，应当停止对用户个人信息的收集和使用，并为用户提供注销号码或账号的服务。”&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;FhEmqoge2p383tBp-vjGxFoAw3gk&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FhEmqoge2p383tBp-vjGxFoAw3gk.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;最后只想说，如果不是出于墙内网络的考虑，很多人应该都会选择 Github、Gitlab 的代码托管服务。当然，或许也有些人出于对  Github 账户/开源项目是否会受到美国出口管理条例管制的担心，或者追求更高的速度体验，而转向国内的代码托管服务。&lt;/p&gt;
&lt;p&gt;对于国内代码托管服务，开源中国旗下的 Gitee 应该是目前做的最好的，但对 git 空间和单个仓库都有一定限制。反观那些不限空间、不限项目的后来者，CODING 也好，腾讯云开发者平台也罢，用户体验不好，产品不过关，再多的免费空间也是白搭吧！&lt;/p&gt;
&lt;p&gt;不管怎么说，对于一些重要的生信分析流程脚本选择 git 进行管理个人觉得还是非常有必要的。你可以选择自建服务进行托管，也可以选择付费进行托管，重要的一点，如果你是土豪，就当我什么都没说。&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;115&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-115/</link>
      <pubDate>Sat, 30 Apr 2022 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-115/</guid>
      
    </item>
    
    <item>
      <title>五一喜与乐</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;从 2020 年初到 2021 年年初，将近整整一年，受疫情影响，大多数人基本都没怎么出行，好不容易等到了今年的五一黄金周，国内疫情好转，于是&amp;rdquo;报复性出游&amp;rdquo;出来了。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;h3 id=&#34;第一天打球喝酒&#34;&gt;第一天，打球喝酒&lt;a class=&#34;headerlink&#34; href=&#34;#第一天打球喝酒&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;第一天，哪都没去。早上带着娃，把公交地铁超市都兜了一圈。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/li3mhmoER9OMehBlU7rtc7YXnJyP.png&#34; /&gt;
下午，羽毛球。完了，万达小聚，吃饭喝酒聊天，好久没喝的这么开心了 😆😍
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/lqeZE36cEUqOCKO3Ro_Q-GQFcEWY.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;第二天万田生态公园&#34;&gt;第二天，万田生态公园&lt;a class=&#34;headerlink&#34; href=&#34;#第二天万田生态公园&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;增城的这个生态公园，面积是挺大的，人也不是很多，环境还算可以。不足的是树木有点小，可以乘凉的地方也少，太阳晒天气热的时候让人很抓狂，此外，&lt;strong&gt;打车极其非常不方便！！！&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;地方还算可以，但如果搭上一个喜欢抬杠像麻雀一样吱吱不停的人，真心大煞风景！&lt;/p&gt;
&lt;h3 id=&#34;第三天广医&#34;&gt;第三天，广医&lt;a class=&#34;headerlink&#34; href=&#34;#第三天广医&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;阴雨开始，一早陪老婆去广医五院开始 B 超+血检，从早上折腾到下午 2 点多，身心俱疲。整个五一假期最心塞的一天！！！&lt;/p&gt;
&lt;h3 id=&#34;第四天爬山打球&#34;&gt;第四天，爬山打球&lt;a class=&#34;headerlink&#34; href=&#34;#第四天爬山打球&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;老婆一直叨念不休的火炉山之行终于成行。一路上吃吃玩玩走走停停，总算波澜不惊。天气阴晴，空气极好，路上人也不多。虽大多数时间抱着娃拾阶而上，体力相比上一次公司团建好上不少。
&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/lunXPcdsCJH67a2Z27N-LfDOab-s.jpeg&#34; /&gt;
最后，虽然没吃上老婆最喜欢的羊排（一般秋冬季才有的吃），但烧鸡和开胃的酸萝卜也是蛮好吃的。&lt;/p&gt;
&lt;p&gt;傍晚，晚来风急，一场昏天黑地的暴雨差点把既定的羽毛球活动给泡汤掉！球馆 PK，2:1 赢下了一场挑战赛，让人倍感开心和振奋！&lt;/p&gt;
&lt;h3 id=&#34;第五天充电休息&#34;&gt;第五天，充电休息&lt;a class=&#34;headerlink&#34; href=&#34;#第五天充电休息&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;最后一天，回归充电学习，明天又是新的一天！&lt;/p&gt;
&lt;p&gt;总的来说，今年的五一过的还算满意。五天的假期，时间说长不长说短不短，没有给高速公路添堵，没有挥霍浪费。难得的是，一家三口终于可以开开心心的出去走了几圈，老妈子也如愿以偿出去串了一下亲戚，波澜不惊，岁月安好。&lt;/p&gt;
&lt;p&gt;平淡，简单，最好！&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;143&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-143/</link>
      <pubDate>Sat, 30 Apr 2022 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-143/</guid>
      
    </item>
    
    <item>
      <title>你若安好便是晴天</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;blockquote&gt;
&lt;p&gt;Categories: 博客/语雀&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;这是一篇发布于 &lt;a href=&#34;https://www.yuque.com/shenweiyan/notebook/to-be-good&#34;&gt;语雀·随笔与乱弹&lt;/a&gt; 的笔记，本文章已经更新。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;&lt;img alt=&#34;anhao.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FpWr71wB7ZaE5j8UmLUKhg3qFqAh.jpeg&#34; /&gt;&lt;/p&gt;
&lt;p&gt;昨天，7 月 7 日，挺顺口的一个日子。公司体检和家里小孩子咳嗽感冒撞到了一起。&lt;/p&gt;
&lt;h2 id=&#34;关于体检&#34;&gt;关于体检&lt;a class=&#34;headerlink&#34; href=&#34;#关于体检&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;从早 7 点开始，从公司集合到体检地点，从领号、报到取表、开始体检到体检结束，3 个半小时的折腾好不容易把今年的这一次身体小检查给完成了。总结起来就是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;人多。从早八点半到爱康国宾（广州天河体检分院），再到拿到号，前面已经熙熙攘攘排了 100 多号人，而窗口叫号取体检表的人工服务通道就只有 3 个。&lt;/li&gt;
&lt;li&gt;服务一般。窗口叫号取表和自助机刷身份证取表都是一样的，但是在服务指引上，工作人员的答复只有：等叫号办理取表。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;关于感冒&#34;&gt;关于感冒&lt;a class=&#34;headerlink&#34; href=&#34;#关于感冒&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;儿科医生不足，在现在各大医院都很常见。在广州绝大部分的医院，不管是三甲还是二甲，基本上都要提前预约，或者预约当天号。&lt;/p&gt;
&lt;p&gt;关于周末就医，还有一个问题就是很多医院，不管是三甲还是二甲，周末都不上班！例如距离我们家里最近的岭南医院（三甲）周六下午、周日都是不上班的。&lt;/p&gt;
&lt;p&gt;这是我们第一次试图通过微信公众号预约广州医科大学第五附属医院，有很大的一个体验就是在 &lt;strong&gt;&amp;ldquo;广医五院&amp;rdquo;&lt;/strong&gt; 的微信公众号进行预约时 &lt;strong&gt;&amp;ldquo;必须要先去医院办理诊疗卡，使用诊疗卡号才能在线预约&amp;rdquo;&lt;/strong&gt;。这对于第一次想预约看病的人而言，体验很不友好！&lt;/p&gt;
&lt;p&gt;从出生起，这一次也算是家里小孩第一次感冒的经历，在医院候诊遇到的各个奶爸宝妈、各种囧事锁事也算是另外一种体验吧！&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;114&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-114/</link>
      <pubDate>Sat, 30 Apr 2022 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-114/</guid>
      
    </item>
    
    <item>
      <title>公众号与语雀</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;首先，公众号发表后的文章是不支持大幅度和多次的修改的，作为技术类的很多文章，我希望我的文章能被修改，因为文章会有错误，也会需要时常更新。
第二，我希望我的文章能归档起来，方便检索。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;出于以上考虑，我想把个人公众号的文章在语雀做一个归档，这就引发了一个问题：&lt;strong&gt;我是用存量的知识小组，还是用现在的知识库，还是用语雀空间？还是新创建一个语雀账号？&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;存量的知识小组，不支持插入本地视频！&lt;/li&gt;
&lt;li&gt;语雀空间，子一级目录不能修改名称，还非得要登陆才能看！&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;创建一个语雀账号就有点把工作复杂化，这样一看来用现有的语雀知识库貌似是一个最好的选择。出于把个人知识笔记跟公众号分隔开的最初目录，对个人账号下新建一个知识库用于公众号文章归档这样的做法总感觉有点事与愿违，总感觉有点别扭，总觉得哪里不对劲。&lt;/p&gt;
&lt;p&gt;心里总觉得语雀空间是理想的，现实告诉你个人知识库才是合适的，隐约有点理想被现实打脸的的错觉。&lt;/p&gt;
&lt;p&gt;语雀空间作为团队、公司使用，总有一些提供给其他客户或者用户的对外公开文档吧，这些文档用户不需要登录可以直接查看也是合情合理（而且语雀空间貌似也有这样的设置项，但作为一个语雀个人长期用户，居然也搞不清楚具体要怎么设置——是需要先在空间管理设置，然后再去具体知识库设置？）    &lt;br /&gt;
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/Fg81kwjFQPZtTH99Zbs8ijEDSC0Z.png&#34; /&gt;      &lt;/p&gt;
&lt;p&gt;后来才折腾明白 ——&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;📢 &lt;strong&gt;设置互联网所有人可以访问是语雀的付费权益！！！&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;如果知识库设置了公开到互联网可见，外部未注册的人拿到分享链接也可以查看。&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FgQ3IDgJa7cM_syRZFeARKfk7cL6.png&#34; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;如果想要对外分享整个公开的知识库，在知识库首页右上角可以分享。&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FnhHk0d2S6NZyot0h5JS1suvVDa7.png&#34; /&gt;      &lt;/p&gt;
&lt;p&gt;好吧，算是折腾明白了！&lt;/p&gt;
&lt;p&gt;最后就剩一个问题了——个人用户已经开通了超级会员，囊中羞涩已经折腾不起付费的空间了。&lt;/p&gt;
&lt;p&gt;所以，写到最后，归根结底，还是 &lt;strong&gt;&amp;ldquo;钱&amp;rdquo;&lt;/strong&gt; 的问题 😕😵🤑&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;131&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-131/</link>
      <pubDate>Sat, 30 Apr 2022 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-131/</guid>
      
    </item>
    
    <item>
      <title>写作与初衷</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;关于写作原本的想法，只是想写点自己在学习、工作、生活上的一些心得和体会，把一些知识点记录下来。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;&lt;img alt=&#34;xiezuo2.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/Fu0vY5O4M2i5Lxxtta0VfcXuNCq5.jpeg&#34; /&gt;&lt;/p&gt;
&lt;p&gt;留言的初衷是，希望自己写下来的东西能够有人一起探讨。哪怕你把我的观点批评得一无是处也可以，哪怕你说我的句子狗屁不通也没关系，只要有评判，我相信总有一天我会变得更好。&lt;/p&gt;
&lt;p&gt;关于部分平台商业化的写作，只说两点：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;商业化已经改变了写作的初衷。&lt;/li&gt;
&lt;li&gt;当写文章变成盈利的手段，那么，写出来的东西是没有灵魂的。&lt;/li&gt;
&lt;/ul&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;135&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-135/</link>
      <pubDate>Sat, 30 Apr 2022 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-135/</guid>
      
    </item>
    
    <item>
      <title>动了谁的奶酪</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;活在自媒体时代，每个人都在利用各种平台打造个人品牌，几乎每个人都在会选择微信公众号。流量为王的今天，粉丝就是一切，是动不得的奶酪。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;个人觉得，不管任何平台，任何讨论组，个人宣传自己的文章都是可以被接受的，只要这些文章不是广告，只要不是恶意刷屏，只要没有明确的规则说禁止分享第三方的链接文章。&lt;/p&gt;
&lt;p&gt;一亩三分地内，如果真的动了你的奶酪，如果在你看来这就是广告，在没有任何沟通的情况下直接踢人，个人觉得这是极其野蛮的做法。&lt;/p&gt;
&lt;p&gt;现在的公众号都不容易，尤其是个人运营的公众号。奔着分享和交流学习的初心，内容至上，应该才是正道。&lt;/p&gt;
&lt;p&gt;今天在某交流群分享了一篇转载的 R 语言文章，没有任何沟通情况下直接被踢，有点想法，唠叨几句。&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;137&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-137/</link>
      <pubDate>Sat, 30 Apr 2022 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-137/</guid>
      
    </item>
    
    <item>
      <title>只要能坚持下来就是好博客</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;blockquote&gt;
&lt;p&gt;Categories: 博客/语雀&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;写博客、记录文字是一个好的习惯，相信很多人的初心都是很美好的。但是能真正坚持下来的，或许没有多少。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;blog2.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FjFei9AbrugbaF_b3MEnmlL7PvK4.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;记得最早接触博客和云笔记，还是在大学刚毕业后，真正意义上开始使用编程语言学习项目分析的那段时间。作为一个菜鸟，在接受团队技术分享、在培训过程中接触到了各种各样的知识，出于知识梳理、快速查找原始需求，开始接触使用有道云笔记和印象笔记。但是让人失望的是，那时候的有道云和印象笔记都不支持代码插入，而且 UI  界面很 low，这对一个经常与代码打交道的人来说体验时非常糟糕的。&lt;/p&gt;
&lt;h4 id=&#34;2014-年youdao--cnblogs&#34;&gt;2014 年，YouDao + cnblogs&lt;a class=&#34;headerlink&#34; href=&#34;#2014-年youdao--cnblogs&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;作为一个清爽、简洁、无广告的纯技术分享平台，博客园似乎是最好的。在博客园趟了趟水，稀稀拉拉写了几篇文章，那时候对文章的理解其实就是自己对一些经常使用知识的体会。使用了几个月，发现了几个问题：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;博客园的定位是 IT 技术的分享平台，作为一个生信人而言，没太多共鸣。&lt;/li&gt;
&lt;li&gt;平时工作中的记录大多数记录在有道云或者印象笔记，发表到博客园，需要再次排版整理，很麻烦。那时候虽然可以使用 Windows Live Writer，但无法做到随手编辑。&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;2015-年oschina--wiznote&#34;&gt;2015 年，oschina + wiznote&lt;a class=&#34;headerlink&#34; href=&#34;#2015-年oschina--wiznote&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;2015 年的开源中国的博客系统长的也并不好看，而且自定义支持也不好。现如今开源中国的博客系统经过改版后已经清爽了很多，但在浏览过程中头部的广告却让人很是不爽。&lt;/p&gt;
&lt;p&gt;同年，接触到为知笔记，这是一款非常优秀的国产笔记。从功能和界面上来说，它可以说是国产笔记中做的最好的，各种插件能满足你日常工作和生活 99% 的需求。曾经在很长一段时间内，它一直是我作为个人知识管理最理想的工具之一。但有几个方面，仍有待完善：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;万年不变的 web 端。为知笔记的 web 端很不好看，体验也很差，不支持 markdown 预览编辑模式。&lt;/li&gt;
&lt;li&gt;建议反馈响应慢。为知笔记使用贴吧作为问题反馈平台，很多建议无法得到及时的响应。尤其是 web 端的问题，从 2015 到 2018 年一点变化都没有。&lt;/li&gt;
&lt;li&gt;到了 2019 年 7 月，好奇心作祟回去看了一眼，居然发现为知笔记更新了一个 beta 版的 web 端，颜值还算可以，但列表栏自由宽度调整、主题、字体定义等还不够完善，md 在线编辑依然不支持！&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&#34;2017-年jekyll--leanote&#34;&gt;2017 年，jekyll + leanote&lt;a class=&#34;headerlink&#34; href=&#34;#2017-年jekyll--leanote&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;jekyll 和 hexo 是一个功能强大的博客系统，所有人都可以利用免费代码托管平台部署属于自己的 jekyll 与 hexo 博客，如 github pages，coding pages 和 gitee pages。这种博客模式可以让用户更加关注写作，而不需要把大量的时候花费在界面样式的调整上。不可否认的是，基于 jekyll/hexo 的博客系统，在部署和自定义特定功能上是需要一定的前端或者后端技术作为支持的。&lt;/p&gt;
&lt;p&gt;Leanote 的体验是非常好的，尤其是它附带的博客系统具有非常自由的可定制性，这一点也是最吸引我的地方。不足的是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;相比为知笔记的明文保存，Leanote 本地二进制的笔记保存方式很不利用笔记的迁移；&lt;/li&gt;
&lt;li&gt;开发、维护人员不足，很多 github issues 都没有响应；&lt;/li&gt;
&lt;li&gt;用户小众，更新及其缓慢。从 2019 年起基本没有任何的更新，很担心哪一天就跑路了。&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;2019-年语雀专业的云端知识库&#34;&gt;2019 年，语雀：专业的云端知识库&lt;a class=&#34;headerlink&#34; href=&#34;#2019-年语雀专业的云端知识库&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;2019 年，发现了语雀，被友好的编辑体验吸引，加上蚂蚁金服的加持，于是开始把所有积累的文档迁移了上来。希望能基于这样一个专注于知识的平台能越来越好。&lt;/p&gt;
&lt;p&gt;总的来说，在坚持博客的道路上，有访问量的困惑，有不断追求其他一些博客简洁清爽页面样式的影响，有文字编辑时的体验需求，也有随着自媒体日趋发达多平台文章同步的需要，甚至博文多了网页加载的速度瓶颈等等，都会造成不断的更换博客的托管和部署平台，这对于很多喜欢折腾的人来说这应该是非常正常的一个事情。不管是 Github Pages，还是  WorldPress、Gitee Pages 这些托管平台，或者是对 Hexo、Jekyll、Hugo 搭建方式的选择，都足以让你眼花缭乱。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;从根本上而言，博客的本质是记录，是与自己、他人的内心对话&lt;/strong&gt;。&lt;strong&gt;对话是记录的延伸。产生对话，需要传播，需要消息机制。博客就三个关键词：记录、传播、对话。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;所以，不管选择哪一种方式，只要能坚持下来就是好博客，专注才是硬道理，内容才是王道。&lt;/p&gt;
&lt;p&gt;我个人的大部分文档目前都保存在语雀，部分公开文档也和本人托管在 Gihub 的 Jekyll 博客进行了自动同步，有兴趣的可以关注交流一下！&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;语雀：&lt;a href=&#34;https://www.yuque.com/shenweiyan&#34;&gt;https://www.yuque.com/shenweiyan&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;博客：&lt;a href=&#34;https://weiyan.cc&#34;&gt;https://weiyan.cc&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;后记&#34;&gt;后记&lt;a class=&#34;headerlink&#34; href=&#34;#后记&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;今天看到几个使用 github issues 安家博客的人，看着底下一个个的评论，感觉很有意思，分享一下：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;《个人博客，最终选择》：&lt;a href=&#34;https://github.com/atian25/blog/issues/07.md&#34;&gt;https://github.com/atian25/blog/issues/07.md&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;《博客是什么》：&lt;a href=&#34;https://github.com/lifesinger/blog/issues/123&#34;&gt;https://github.com/lifesinger/blog/issues/123&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;113&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-113/</link>
      <pubDate>Sat, 30 Apr 2022 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-113/</guid>
      
    </item>
    
    <item>
      <title>吐槽一下公众号的那些事</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;微信公众号一直标榜 “再小的个体，也有自己的品牌”，这个也许是微信公众号上线的初衷。然而，有人的地方就有江湖，这个曾经看起来是个非常美好的事情，发展到现在，似乎也不见得那么十全十美。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;&lt;img alt=&#34;原作-抄袭-致敬区别.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FhnSV5DLtc1qMO3I__R_wNZfzo5a.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;抛开一些大的槽点，今天要实锤几个公众号碰到的事情。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;很多公众号为了阅读量，也有一些是出于专项问题处理，都创建了自己的讨论群，在讨论群明确规定不能发广告，可以理解；但是对转发其他公众号的非广告类文章却如临大敌，动不动踢人，自己却天天发本公众号的各种推文，着实有点小家子气！&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;对于一些从博客转载过来的文章，有一些公众号时不时玩小把戏，把转载声明藏到不起眼的文末；或者干脆迷迷糊糊的说什么文章来源于网络；甚至不做任何标注！如果文章的确是基于网络各种资料自己整理总结而来，还可以理解一下，如果的确有类似原文，却模糊化原创，这样的做法的确不可取。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;最可恨的是，把一些未经原作者授权的文章标记为原创的侵权行为！前几天刚遇到类似的情况，本来已经跟原作者沟通过转载的事宜，却在转载那一刻发现被其他公众号把该文章标注为原创剽窃了过去，搞得所有想要转载该文章的人都要联系公众号开放白名单，真实可恨！欣慰的是，最后通过微信投诉成功，标记为原创的文章删稿。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img alt=&#34;原创.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FqGqmAE7shH-b6kcONDAHCr0EY_t.png&#34; /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;关于写文章挣钱，不多说，摘录几点酷壳网陈浩老师的原话！&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;首先，如果你觉得在微信公众号上写技术文章是可以挣钱的，那么恐怕你搞错了，营销文是可以的，技术文章还是比较难的。&lt;/p&gt;
&lt;p&gt;当然，你要挣点小钱是可以有的，但是，你需要写软文中植入广告，或是消费热点主题，比如前段时间的魏则西事件，有的公众号被打赏了一些钱。&lt;/p&gt;
&lt;p&gt;老实说，这对我来说完全无感，因为，我的逻辑是这样的：&lt;strong&gt;我觉得一个人有一定的影响力，其中有很大一部份原因来自他的独立性，如果我开始写软文了，相当于我把自己卖了&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;所以，我现在从来不通过写文章挣钱，因为我会写代码，我还是通过我的技能挣钱，通过给一些公司做咨询、培训、企业服务挣钱，老实说，靠自己的能力挣钱，比写文章挣钱挣得多多了，因为我觉得，&lt;strong&gt;像我写的这类的文章本来就是用来分享和传播的，不是用来挣钱的。写文章的目的是分享和影响，不是挣钱。&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;私以为对于文章转载，标明原出处和作者是对文章和作者的一个基本尊重，不要找理由说找不到原作者。我从来没有见过有人靠抄袭和盗用别人文章而成功的，无非就是收获几个赞罢了。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;商业化已经改变了很多人写作的初衷。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;分享是一种态度，不仅仅是停留在嘴上。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;有的人认认真真花时间写了好的文章，不管付费打赏，还是点赞支持，都无可厚非。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;如果你的文章对读者有用，何必担心自己的粉丝被人家带跑，圈个墙也不见得能增加几个阅读量，开放的心态总比整天的提防要好。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;如果你是奔着钱去的，当我什么都没说。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;最后，借用&lt;a href=&#34;http://kaopubear.top/&#34;&gt;思考问题的熊&lt;/a&gt;赵老师的一句话，希望自己在学习工作生活中尽心尽力有所收获，于人于己问心无愧。&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;140&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-140/</link>
      <pubDate>Sat, 30 Apr 2022 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-140/</guid>
      
    </item>
    
    <item>
      <title>吐槽一下微信公众号的赞赏号</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;2018 年 6 月 6 号起，公众号每以同一作者名发表 3 篇或 3 篇以上的原创文章，即可创建一个赞赏账户，用于赞赏收款。同一公众号最多可以邀请开通 3 个赞赏账户。关于赞赏账户的创建和流程不多说，公众号平台官网的《&lt;a href=&#34;https://kf.qq.com/faq/170110yueMvA170110iIn2uI.html&#34;&gt;公众平台赞赏和喜欢作者功能介绍&lt;/a&gt;》上面有很详细的介绍，有两点值得注意。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;创建赞赏账户需要实名认证，实名信息需要填写作者真实的姓名、身份证号码（实名信息不会对外展示），且需与当前操作的个人微信实名信息一致，提交后实名信息不支持修改，&lt;strong&gt;每个人（以身份证统计）只能开通一个赞赏账户&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;在“赞赏账户”小程序的管理端，点击名字 - “我的信息” - 名字，就可以进入改名流程。但是，请注意，跟微信号一样，&lt;strong&gt;每个赞赏帐号只有一次修改名字的机会&lt;/strong&gt;，因此，再修改赞赏账户名称前请您慎重考虑！&lt;/p&gt;
&lt;p&gt;其实，微信公众号赞赏号比较坑爹的地方也就在这里。一是一个身份证只能开通一个赞赏账户；二是跟微信号一样，只有一次修改名字的机会。第二点想必大家会很熟悉，但是对于第一点还有一个非常隐藏的坑。&lt;/p&gt;
&lt;p&gt;就是，赞赏账户一旦创建，就无法关闭，也无法注销。至少目前是没办法注销和关闭的。就算你把你的微信号注销掉，已经创建的赞赏账号依然无法关闭和注销。&lt;/p&gt;
&lt;p&gt;个人觉得，这其实是一个非常恶心的做法。原微信号申请注销不能用了，在新注册的微信号中，原赞赏账户不但无法移交，也不能注销，还占用了本人身份证信息，以至于新的微信号即不能创建新的赞赏账户，也不能沿用原来的赞赏账户。&lt;/p&gt;
&lt;p&gt;我在《&lt;a href=&#34;https://www.yuque.com/shenweiyan/cookbook/coding-cancel-account&#34;&gt;不提供账号注销等于耍流氓&lt;/a&gt;》中聊到过，在腾讯云开发者平台合并后的 CODING 代码管理平台也是不提供账号注销的功能。不知道这是腾讯一贯以来的作风，还是技术原因。&lt;/p&gt;
&lt;p&gt;最后，贴个啪啪打脸的信息保护规定和上个图镇楼。顺便问一句，对于腾讯系的产品，大家都是怎么看的呢？&lt;/p&gt;
&lt;p&gt;《电信和互联网用户个人信息保护规定》（工业和信息化部令第 24 号）第九款第四款规定：“电信业务经营者、互联网信息服务提供者在用户终止使用电信服务或者互联网信息服务后，应当停止对用户个人信息的收集和使用，并为用户提供注销号码或账号的服务。”&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;加密排行榜.jpeg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FpvGiW6UG9GQL2ZH5BgzALf-16L3.jpeg&#34; /&gt;
&lt;img alt=&#34;ly.gif&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FlMO8jnjfaW7QalT7nyPkxQ4d37w.gif&#34; /&gt;&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;138&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-138/</link>
      <pubDate>Sat, 30 Apr 2022 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-138/</guid>
      
    </item>
    
    <item>
      <title>域名碎碎念</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;最近总想着注册域名，折腾完域名又想这去折腾 Foxmail 和 QQ 邮箱，简直魔障了！&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;&lt;img alt=&#34;domain-register.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/Fs3nERCsQx7eP1CprAhM4vgRg2qB.jpeg&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;顶级域名&#34;&gt;顶级域名&lt;a class=&#34;headerlink&#34; href=&#34;#顶级域名&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;顶级域名中四个纯字母以内的 com/net/org 之类顶级域名基本都被注册完了，好一点的四个字母的域名，如 top 虽然没有注册，但每年 4000 多大洋（白金域名），对于个人来说，真是望而却步！&lt;/p&gt;
&lt;h2 id=&#34;bio&#34;&gt;BIO&lt;a class=&#34;headerlink&#34; href=&#34;#bio&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;看上一个 bio 的域名，但即使普通的 bio 域名，续费也要将近 400 大洋/年，真是搞不懂了，为什么这个域名会这么贵！&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;.bio 这个域名可以代表“生物”或“生物学”。&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/Fu3V2lHxytHoOTMBy_3Mc7avm1vz.png&#34; /&gt;
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/Fp_hVUG12CGWEBKRQfks-n3mY__-.png&#34; /&gt;&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;123&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-123/</link>
      <pubDate>Sat, 30 Apr 2022 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-123/</guid>
      
    </item>
    
    <item>
      <title>婚姻修养</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;blockquote&gt;
&lt;p&gt;Categories: 博客/语雀&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;婚姻是一种修行，体现了个人的素质和修养；婚姻是否平静、长久，取决于双方或其中一方的修养程度，这种修养，不是指文化修养，而是指婚姻修养——当然，文化修养必不可少，却不是决定性的——所谓的婚姻修养，是指一个人对于自身和他人欲望、心理的认识程度，反省能力，特别是自我调整和适应能力。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;&lt;img alt=&#34;hunyin.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FiJnUwRJPylbDPyZXUlGGFMftjy5.jpeg&#34; /&gt;&lt;/p&gt;
&lt;p&gt;婚姻修养好的人，善于控制自身的欲望，对人性，对自己，特别是爱人的心理、为人有不同程度的了解，情绪稳定，知足常乐，适应生活、爱人和婚姻的能力强。&lt;/p&gt;
&lt;p&gt;与此相对应，不少人的婚姻修养相对较差，有如下几个表现：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第一，不容易满足&lt;/strong&gt;。比如，有些女人，明明过得不差，却喜欢和周围的家庭（比如亲朋好友，尤其是闺蜜）进行地位和经济上的对比，比不上人家，就心生不满，意有不足，嫌弃自家男人不如别人家的男人能干；有些女人，虽然自家男人不错，但女人觉得自己够性感够漂亮，本该嫁个更有钱、有地位的男人才对。有些男人则习惯于拿别人的老婆来比对，觉得自己老婆土气，不够时髦，不够有魅力，甚至不新鲜，等等。这些不满和不足，通常是出轨的诱因，为婚姻破裂埋下了根由。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第二，偏执倾向明显&lt;/strong&gt;。有些人经历过初恋，感觉刻骨铭心，惯于以初恋为参照系来衡量以后的感情，如果今后的感情不能重复初恋的美好，就心有缺憾。有些人经历过最好的异性，恋恋不舍，经常把他们当作择偶的标准。还有不少人脱离实际，在心里塑造了一个理想而完美的女神或男神形象（或性感或清纯的女人，或者花样美男、猛男、幽默风趣的才子）……这类人，比较自恋，具有不切合实际的完美主义倾向，婚后的感情和配偶如果和内心的期待、标准有差距，往往心有不足，落下心结，郁郁寡欢。有一种男人，有处女情结，和非处女的女人结婚后，很难投入感情，也很难爱上对方。还有一些人，遇不到自己爱的人，或者爱自己的人，宁可不结婚……这些都属于情感和婚姻上的偏执症状，对感情、婚姻和爱人都有很深的偏见和成见，难以消除。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第三，适应能力差&lt;/strong&gt;。本来，婚姻就是一种既来之则安之的事情，不管遇到谁，只要走向了婚姻，就应该学会接受并习惯；但有些人，在婚姻和情感上具有很大的排他性，通常只喜欢某一种人或某一类人，只看得上他们，和他们说得来，合得来，也乐于投入感情，除此之外，他们对其他类型的异性几乎不来电，也没有感觉，爱理不理，很难沟通，更难喜欢上、爱上——如果婚后的配偶凑巧不是自己所喜欢的类型，这些人就很容易和配偶发生口角或冷战。在生活中，夫妻发生口角时，也不善于排解，只会积郁在内心，习惯于生闷气，很容易造成夫妻之间的交流障碍。不善于改变自己和配偶，以便让自己的婚姻和配偶变得更好。总之，他们的婚姻适应能力很差，不懂得如何调整自己，既不善于适应其他种类的异性，更不善于适应婚姻生活。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第四，反省能力不够&lt;/strong&gt;。婚姻，意味着现状，只要你接受了现状，你就得学会接受配偶，适应婚姻，而适应婚姻的关键在于反省能力。一个人婚后有这样那样的不满，通常和自身的欲求有关，有些人对于配偶和婚姻的欲求过高，总认为自己应该和更好的人结婚，有更好的家庭，并且不知道修正、调整对于婚姻和配偶的期望值，也不知道放下过高的标准，排遣并清理内心的心结，导致自身长期处于对婚姻和配偶不满的状态。还有些人喜欢才子或佳人，配偶却不是，难免心怀不足，却不知道才子稀罕，佳人难得。有些人以初恋为情感的标准，却不明白一个人终其一生初恋只有一次，并且不可复制。有些人生活在幻想之中，虽然自身的相貌和各方面条件平平，却渴望遇上一个完美无缺的白马王子，拥有一段风花雪月的圆满爱情，明明不切合实际，然而始终难以放下这种幻想。有些人只渴望别人来疼，来爱，却不知道情感上也没有免费的午餐，只有付出才有收获。有些人的老婆或丈夫其实很不错了，但这些人这山望着那山高，总认为老婆或丈夫是别人家的好，始终不知道满足。&lt;/p&gt;
&lt;p&gt;我在网络上帮人疏导，经常感到不少人对婚姻和人性的认识存在着偏见和误区，我想，这也就是为什么他们对婚姻有这么多疑惑和不解的原因，也是他们婚姻不幸的原因吧——非得遇上自己“喜欢”“爱”“有感觉”“来电”的才结婚，并且这些喜欢、爱、来电和感觉，往往都建立在对于情感和爱人偏执、成见甚至幻想的基础上，世界上哪有那么多的好事？可以想象，如果一个人预设一个标准，只“喜欢”某一类型的异性，那么，他（她）将失去很多的机会；实际上，“喜欢”带有很大的主观性，类似于人的口味，喜欢吃清淡的人，后来也可以喜欢上麻辣，对不对？如果你坚持你的清淡，你错过的将不仅仅是一道水煮鱼，而将错过整个川菜。&lt;/p&gt;
&lt;p&gt;例如，有个女人明明遇到一个很好的男人，但仅仅因为这个男人不是她喜欢的版型——这个女人喜欢韩版的花样美男，皮肤白皙，腿长脸瘦，长相清秀——就放弃了；对另一半的偏见和成见如此之深，让我觉得这个女人根本就是一个幼稚的人，婚姻修养远远不够，尤其是婚姻适应能力极差，并不适合结婚。&lt;/p&gt;
&lt;p&gt;《增广贤文》中说：“一日夫妻，百世姻缘。百世修来同船渡，千世修来共枕眠。”婚姻这些大学，更多需要夫妻双方相互理解、包容、扶持，才能长久经营，白头到老！&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;118&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-118/</link>
      <pubDate>Sat, 30 Apr 2022 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-118/</guid>
      
    </item>
    
    <item>
      <title>心灵鸡汤</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;现如今生活压力和成本越来越大，各种焦虑充斥，于是有了各种的心灵鸡汤，Chicken Soup。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;三观正，内容积极的鸡汤偶尔看看未尝不可，但是每个人的经历不同，对鸡汤的解读也不一样。有一些你觉得很对你口味，可以让你瞬间能量满满的鸡汤，在别人眼里可能恰恰成了对他(她)含沙射影的矛头。&lt;/p&gt;
&lt;p&gt;所以，心灵的鸡汤，有空的时候可以看一看，权当调节一下情绪。但是，请记住不要在公众场合轻易去转发，尤其是微信、朋友圈之类的社交平台。&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;136&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-136/</link>
      <pubDate>Sat, 30 Apr 2022 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-136/</guid>
      
    </item>
    
    <item>
      <title>心目中完美的知识管理工具</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;最近对于笔记和博客，内心又开始有点躁动了——语雀、Obsidian、Notion 是我最爱三个候选，有时候一直在它们之间摇摆不定。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;V2EX 上《&lt;a href=&#34;https://www.v2ex.com/t/721418&#34;&gt;有没有一种知识管理工具，满足这些特性？&lt;/a&gt;》中作者列一些他心目中完美的知识管理工具，有一些共鸣：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;树状结构，代表了自己的知识体系。&lt;/li&gt;
&lt;li&gt;标签 tag，可以从不同的角度，组织自己的知识，作为树状知识体系的重要补充。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Markdown&lt;/strong&gt;，编辑起来够方便，节约时间到知识管理上。&lt;/li&gt;
&lt;li&gt;本地加解密，多端同步，既有不同客户端的同步便利，又有&lt;strong&gt;明文数据只存储在本地的安全&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;笔记+博客&lt;/strong&gt;，既可以满足私密的记录，又可以满足公开内容的分享和归档。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;精准搜索&lt;/strong&gt;，方便从几百上千笔记定位到想要的记录。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;语雀很好，但非明文的数据存储总让我如履薄冰，另外一边 Obsidian/Notion 也还没有强大到让我立马转移阵地的欲望。&lt;/p&gt;
&lt;h2 id=&#34;mark-一下&#34;&gt;Mark 一下&lt;a class=&#34;headerlink&#34; href=&#34;#mark-一下&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;看了一些工具，感觉还不错，先 Mark 一下，后续有需要可以研究一下。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Obsidian + &lt;a href=&#34;https://github.com/abserari/quartz&#34;&gt;Quartz&lt;/a&gt; Publish Web HomePage（Eg. &lt;a href=&#34;https://notes.abser.top/&#34;&gt;https://notes.abser.top/&lt;/a&gt;）&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://tangly1024.com/article/notion-next&#34;&gt;NotionNext-快速免费搭建网站 | Tangly Blog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.v2ex.com/t/947306&#34;&gt;用 notion 搭建的博客上线，硬加一波友联&lt;/a&gt; - V2EX&lt;/li&gt;
&lt;/ul&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;132&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-132/</link>
      <pubDate>Sat, 30 Apr 2022 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-132/</guid>
      
    </item>
    
    <item>
      <title>战地之王</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;作为战地之王《A.V.A》这一款游戏超过 10 年的老玩家，从国服于 2019 年 9 月 25 日 11:00:00 正式停止运营，到 2020 年开始进入台服，一直玩到现在，平淡无奇的生活也总能多了一点乐趣。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;&lt;img alt=&#34;2023.05.20.Sat. - 台服·极速危机&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FmyzcrYd1zobC_Gc_fbMwM2TqQox.jpeg&#34; title=&#34;2023.05.20.Sat. - 台服·极速危机&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;2023.06.05.Sun. - 台服·生化危机.Adv&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/Fi1zAGARBgwaoPflLSoWDpfO0Gad.jpeg&#34; title=&#34;2023.06.05.Sun. - 台服·生化危机.Adv&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;台服·铜箱子&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FplprU1jPMWJ8jdi3KG2EGLpgRqV.jpeg&#34; title=&#34;台服·铜箱子&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;Steam 国际服&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/Fsc7_k15ieP_RPERKnG5_i3Jaa-6.jpeg&#34; title=&#34;Steam 国际服&#34; /&gt;&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;134&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-134/</link>
      <pubDate>Sat, 30 Apr 2022 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-134/</guid>
      
    </item>
    
    <item>
      <title>手续费和年利率</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;相信很多人在使用信用卡刷卡之后，都会收到银行的热心短信甚至是电话，提醒用户可以使用分期还款的服务。而银行给出的理由是，分期有很多好处，比如可以延长信用卡的还款期，减轻短期资金压力，避免造成信用卡逾期等等。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;&lt;img alt=&#34;card-1.jpeg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FndCPBAg8LCuDmr4Xr_GVfSguPVC.jpeg&#34; /&gt;&lt;/p&gt;
&lt;p&gt;但是实际上银行也是无利不起早，如此热心肠的建议用户选择分期还款，显然没安好心。那么信用卡分期还款，对于银行来说究竟有什么好处呢?其实很简单，用户分期还款可以为银行带来收益，而最后还款日之前全额还款，银行从用户身上赚不到一毛钱。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;card-2.jpeg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FqkTCnKfIvPFkQe8NYlcmsW61xt9.jpeg&#34; /&gt;&lt;/p&gt;
&lt;p&gt;从银行的角度来说，大力推广信用卡业务，最终还是为了实现盈利。而如果大部分的信用卡用户，都正常刷卡消费，按时还款，不超额不取现，也没有分期还款，一切都循规蹈矩，那么其中就不会产生任何费用，银行就真得成了慈善机构了。&lt;/p&gt;
&lt;p&gt;因为用户从信用卡透支的资金额度，这些借出去的钱对于银行来说，是在不停产生利息费用的，如果不能从信用卡用户身上赚钱，那么银行实际上是在亏损的；除此之外，还要算上银行信用卡业务部门的运营费用等等，恐怕都是一笔不小的开支。&lt;/p&gt;
&lt;p&gt;所以银行会想尽一切办法从信用卡用户身上获得收益，目前信用卡产生收益的途径，除了分期还款的手续费，还有信用卡提现手续费、信用卡年费、逾期利息和滞纳金。逾期产生的收益对于银行来说存在一定的风险，而年费和提现手续费的收入显然是非常有限的，因此分期还款收益，就成为了银行信用卡业务的最重要利润点。&lt;/p&gt;
&lt;h2 id=&#34;错误的年利率计算&#34;&gt;错误的年利率计算&lt;a class=&#34;headerlink&#34; href=&#34;#错误的年利率计算&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;大多数银行信用卡账单分期，手续费约为 0.6%。一般人认为年利率也就是 0.6%*12=7.2%，乍一看不算高。以某银行信用卡 12000 元分 12 期为例，我们来看看信用卡分期手续费率到底有多高。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;每期（月）应还款的金额：本金为 12000/12=1000 元，手续费为 72。&lt;/li&gt;
&lt;li&gt;每月实际还款数：1000+12000&lt;em&gt;0.6%=1072，那么 12 期下来总共的利息就是 72&lt;/em&gt;12=864，银行所谓的年息(年利率)也就是 864÷12000=7.2％。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;但是这样的计算方式是有问题的。这其中最重要的一点就是，&lt;strong&gt;持卡人并非一直欠银行 12000 元，而是随着每月的还款，资金占用是一直在降低的。&lt;/strong&gt;最后一个月时，持卡人实际上只欠银行 1000 ，但是仍然要按照 12000 的全额的 0.6% 还手续费，仍须归还 1072 元。&lt;/p&gt;
&lt;h2 id=&#34;正确的年化利率计算&#34;&gt;正确的年化利率计算&lt;a class=&#34;headerlink&#34; href=&#34;#正确的年化利率计算&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;假设贷款总额为 m，共分期 n 期，每期手续费 a%，实际年化利率为 b%。实际年化利率计算如下：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;从最后一期到第一期，每期实际占用银行资金为 &lt;strong&gt;1m/n&lt;/strong&gt;、&lt;strong&gt;2m/n&lt;/strong&gt;、……、&lt;strong&gt;nm/n&lt;/strong&gt;，共 n 期；&lt;/li&gt;
&lt;li&gt;则总占用银行资金（以月为单位）为 &lt;strong&gt;m/n&lt;/strong&gt; + &lt;strong&gt;2m/n&lt;/strong&gt; + …… + &lt;strong&gt;nm/n&lt;/strong&gt;，为 &lt;strong&gt;(1+2+ …… +n)m/n&lt;/strong&gt;，简单的数列求和，化简后为 &lt;strong&gt;(n+1)m/&lt;/strong&gt;2；&lt;/li&gt;
&lt;li&gt;n 期共还银行利息为 &lt;strong&gt;m&lt;em&gt;a%&lt;/em&gt;n&lt;/strong&gt;；&lt;/li&gt;
&lt;li&gt;实际年化利率 &lt;strong&gt;b% = amn%/m(n+1) /2 /12&lt;/strong&gt;，化简后为 &lt;strong&gt;b = 24 _ a _ n / (n+1&lt;/strong&gt;)；&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;所以实际年化利率是：&lt;strong&gt;24 _ 每期手续费 a% _ 分期 n 期/(n+1) &lt;/strong&gt;；拿银行常见分期手续费每期 0.6% 来算，实际年利率：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;3 期为： 24 _ 0.6 _ 3 / 4 = 10.8%；&lt;/li&gt;
&lt;li&gt;6 期为： 24 _ 0.6 _ 6 / 7 = 12.34%；&lt;/li&gt;
&lt;li&gt;12 期为：24 _ 0.6 _ 12 / 13 = 13.29%；&lt;/li&gt;
&lt;li&gt;24 期为：24 _ 0.6 _ 24 / 25 = 13.82%；&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;所以银行总是想办法让顾客分期，最少的 3 期分期，实际年化利率也要在 10% 以上。当然，大多数情况下，信用卡用户在有能力全额还款的情况下，都不会选择分期还款，但是也有一部分用户即使还得起，也禁不住银行的三言两语，认为反正银行的钱，不欠白不欠，反正也没有多少手续费，这种想法显然是大错特错了。&lt;/p&gt;
&lt;h2 id=&#34;息率和费率区别&#34;&gt;息率和费率区别&lt;a class=&#34;headerlink&#34; href=&#34;#息率和费率区别&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;对于消费者，每个月还给银行的钱是不是都一样，如果不一样，哪个更划算？&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;参考资料&#34;&gt;参考资料&lt;a class=&#34;headerlink&#34; href=&#34;#参考资料&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;银行利率小编，《&lt;a href=&#34;https://www.yinhang123.net/dkzs/xiangguandaikuan/1173745.html&#34;&gt;银行贷款利息的把戏：你知道真正的银行贷款年化利率是多少吗？&lt;/a&gt;》，银行信息港&lt;/li&gt;
&lt;li&gt;Quinn，《&lt;a href=&#34;https://www.zhihu.com/question/29996548&#34;&gt;信用卡分期的实际利息是多少？具体怎么计算？&lt;/a&gt;》，知乎&lt;/li&gt;
&lt;/ul&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;139&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-139/</link>
      <pubDate>Sat, 30 Apr 2022 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-139/</guid>
      
    </item>
    
    <item>
      <title>搜狗拼音输入法</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;这是关于输入法的第二篇乱弹笔记。专门聊一下我和搜狗输入法的那些事情~    &lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;&lt;img alt=&#34;搜狗拼音输入法.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FgzbAuzkS4vpjdfgkVnYQOP4eaEe.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;收藏的皮肤&#34;&gt;收藏的皮肤&lt;a class=&#34;headerlink&#34; href=&#34;#收藏的皮肤&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;各大输入法的皮肤都很多，眼花缭乱。&lt;/p&gt;
&lt;p&gt;个人比较喜欢搜狗输入法的一款皮肤：&lt;a href=&#34;https://pinyin.sogou.com/skins/detail/view/info/572400&#34;&gt;【鹿】四君子-兰 - 搜狗输入法 - 搜狗皮肤&lt;/a&gt;，简洁，最重要的是纵向排列形 的状态栏不会把 Windows 的任务栏挡住！&lt;/p&gt;
&lt;p&gt;参考：&lt;a href=&#34;https://pinyin.sogou.com/images/help/s_mkskin/makeskin(s).pdf&#34;&gt;https://pinyin.sogou.com/images/help/s_mkskin/makeskin(s).pdf&lt;/a&gt;    &lt;br /&gt;
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FgRemRjcu9D3Th3yX0WllRBBAv1L.png&#34; /&gt;
&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FiGsKAnk4g1awYIMj6WdVD9eQ4fW.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;皮肤无法解压&#34;&gt;皮肤无法解压&lt;a class=&#34;headerlink&#34; href=&#34;#皮肤无法解压&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;搜狗官网下载的皮肤基本都是没法用压缩软件打开的，具体原因参考《&lt;a href=&#34;https://linux.zone/5616/comment-page-1#comment-12770&#34;&gt;搜狗输入法 .ssf 格式皮肤无法解压的原因 | Linux 区&lt;/a&gt;》。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;本来想给 Manjaro 的 fcitx 搜狗拼音多安装一些皮肤，结果发现从搜狗官方下载的大部分皮肤并不能如其所说修改为 zip 格式之后就可以用压缩软件打开。&lt;/p&gt;
&lt;p&gt;后来&lt;a href=&#34;http://pinyin.sogou.com/bbs/forum.php?mod=viewthread&amp;amp;tid=729709&amp;amp;highlight=ssf&#34;&gt;探索发现&lt;/a&gt;原来是因为“.ssf”皮肤还有一种 Flash 格式的，搜狗官方说“&lt;a href=&#34;https://pinyin.sogou.com/open/faq.php?id=85&#34;&gt;为了防止作者辛苦制作的 Flash 被盗用，维护作者权利，不允许对官方审核通过的 Flash 皮肤进行解压缩和编辑。&lt;/a&gt;”真没想到 Flash 这种优秀的闭源软件能够通过这种方式生存下去，而且还被用之于反抄袭反侵权，心里莫名感动了一下。&lt;/p&gt;
&lt;p&gt;再后来又发现，不能解压的 .ssf 皮肤不一定是 Flash 格式皮肤，就算普通 ssf 皮肤也受到了版权保护，有人在搜狗论坛上给出了答案：“&lt;a href=&#34;http://pinyin.sogou.com/bbs/forum.php?mod=viewthread&amp;amp;tid=2712039&amp;amp;extra=page%3D2&#34;&gt;为了防止作者的作品被修改盗用，官网下载的都是加密的&lt;/a&gt;”。&lt;/p&gt;
&lt;p&gt;通过加密的方式来防止修改盗用、保护劳动者的著作权，这简直是肥佬斯托曼 &lt;a href=&#34;https://www.linux.zone/archives/6211&#34;&gt;GNU 思想&lt;/a&gt;的“死敌”啊，不得不表示支持！&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;异常问题处理&#34;&gt;异常问题处理&lt;a class=&#34;headerlink&#34; href=&#34;#异常问题处理&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;之前在《&lt;a href=&#34;https://www.yuque.com/shenweiyan/mind/input&#34;&gt;输入法，哪一个才是我的菜？ · 语雀&lt;/a&gt;》提到过搜狗中文输入法在 MobaXterm 异常的问题，有待修复。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.yuque.com/shenweiyan/wow/srqyqv?view=doc_embed&amp;amp;inner=comment-21750872&#34;&gt;札记 | 2021&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FjpghqJs-16Udl2XmpLT87Vs0g0m.png&#34; /&gt;&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;120&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-120/</link>
      <pubDate>Sat, 30 Apr 2022 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-120/</guid>
      
    </item>
    
    <item>
      <title>新冠那点事</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;距离 2022 年的圣诞也只剩下 4 天了 —— 2022 年的最后一个月是一个充满纷扰和闹心的灰色月！家庭永远是主旋律，只是有时候点点滴滴的琐事真是让人头大，身心俱疲。
其次就是新冠放开后的一些经历。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;h2 id=&#34;珍惜&#34;&gt;珍惜&lt;a class=&#34;headerlink&#34; href=&#34;#珍惜&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;从 12 月 1 日广州开始解封不用核酸开始，从核酸难、抢药（虽然自己没有加入抢药大军）备药、接种第四针、被羊群包围 ...... 的一堆经历算起，看着周围一个个的同事亲友先后加入羊群，自己一家人依然坚挺，相安无事，作为天选打工人，心底多少还有些侥幸的心理——该打球的时候一场不落，在做足预防情况下该出去玩还是继续出去 —— 只是暂时放弃了那些人多风险又大的场所。
&lt;img alt=&#34;871c3f9543ea508b375ad5609c408cc.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FqNT7d4e9nwmkYhHHM0AI5LaE57q.jpeg&#34; /&gt;
&lt;img alt=&#34;8d3ab4784f01d80fa7ef78ab9487a13.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/Fm5-9BT7zcBsr8brMDw2Fo6GfWjU.jpeg&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;710f72f99338338f384828a6a49c402.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FlTU3NvkQH5CydjWBnvLq8eCldUw.jpeg&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;羊群小记&#34;&gt;羊群小记&lt;a class=&#34;headerlink&#34; href=&#34;#羊群小记&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;记录一下感染后的一些感受。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2022 年 12 月 21 日，星期三，冬至前一天&lt;/strong&gt;
醒来发现老妈咳嗽好几天今天愈发严重，于是老婆把奶奶和孩子的样本拿回去核酸检测 —— 奶奶阳了。真是应了那句话 ——“&lt;strong&gt;最终大家其实都会被感染的，就是感染的时间长或早还是晚而已。&lt;/strong&gt;”之前一直想着如果感染了，其实也没必要过分担心，就当普通感冒处理即可，但真到了那个点还是有点紧张。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2022 年 12 月 22 日，星期四，传统冬至&lt;/strong&gt;
但不幸的是我们一家全阳了：老婆孩子从晚上开始发烧+咳嗽，我也在咳但症状相对轻一些。于是给媳妇和孩子湿毛巾敷头降温——&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;晚上睡觉总会惊醒——睡不踏实，小孩子每个 1、2 个小时就惊醒一次要起来喝水；&lt;/li&gt;
&lt;li&gt;媳妇低烧，头痛，发冷，扁桃体发炎，还来 M；&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;2022 年 12 月 23 日，星期五&lt;/strong&gt;
照顾着孩子折腾了大半夜，我迷迷糊糊的到了第二天，还能挣扎着勉强去上班，头晕，全身酸痛，发冷+发烧，虽然中午在公司做了一次核酸，但其实也心知肚明逃不掉了。。。整个人也还是没啥精神头，大部分时间就想躺着。反正今天正好周五了，等休整完这个周末再说吧。
到了晚上，实在扛不住头痛发烧头晕的滋味，吃了一片感康，才迷迷糊糊的睡去了。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2022 年 12 月 24 日，星期六，西方平安夜&lt;/strong&gt;
周五在公司做的核酸结果出来了——正式加入羊群！
晚上不时惊醒+依然的怕冷，喉咙干+咳嗽+疼痛；白天虽然症状略好，但依旧有些许发烧头晕的感觉，也提不起什么精神，总想着躺下来休息。
相对前一天，喉咙的痰明显多了很多。
好吧，再来一片感康吧 😢&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2022 年 12 月 25 日，星期天，圣诞&lt;/strong&gt;
算起来，这是感染新冠的第三天了。
头痛发烧头晕的滋味终于是彻底消失了，喉咙干+咳嗽+痰多成了重点。
——从丈母娘那里要了个偏方：&lt;strong&gt;橘子肉上撒上少量的盐，蒸后吃&lt;/strong&gt;——颇有效果。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2022 年 12 月 26 日，星期一&lt;/strong&gt;
第四天。
依旧是喉咙干+咳嗽+痰多，但整个精神相对好很多了，明显感到好转。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2022 年 12 月 27 日，星期二&lt;/strong&gt;
第五天。
偶尔的咳嗽，痰也少了很多，自行做了抗原，已经快要看到胜利的曙光了。
&lt;img alt=&#34;8ed1181a14c2a22a42b0d6d2d32c5fd.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FhT2cjs390H5-wyIZilSm86cj9iC.jpeg&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2022 年 12 月 28 日，星期三&lt;/strong&gt;
第六天。
早上起来做了一次抗原，已经看到明显转阴！
&lt;img alt=&#34;4085e73e8cfefc93bc1be4d82fac2eb.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/Fl9OT9nj5TuksoGyrXNPaaGaWA6W.jpeg&#34; /&gt;
&lt;img alt=&#34;a534846014285c10c2d04f6dead516b.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/Fhwd0UAF_5J5m-1MygGo1LrxH77f.jpeg&#34; /&gt;&lt;/p&gt;
&lt;p&gt;——开始回去上班了。。。。。。&lt;/p&gt;
&lt;h2 id=&#34;后话&#34;&gt;后话&lt;a class=&#34;headerlink&#34; href=&#34;#后话&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;虽说我也知道这个病毒有点狠，但是其传播范围和力度还是有点超乎自己的想象，几天时间就把全家老小都放倒了，实属匪夷所思。&lt;/p&gt;
&lt;p&gt;大家还是要多多注意和防护吧，希望大家都能健健康康，我们都能尽早回归正常的生活。&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;127&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-127/</link>
      <pubDate>Sat, 30 Apr 2022 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-127/</guid>
      
    </item>
    
    <item>
      <title>沉默的大多数</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;一个人要有自己独立的思想，任何想将个人的思想凌驾于大众或迫使大众去遵从的都是不对的。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;&lt;img alt=&#34;the-silent-majority&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FlRC4s8ZvXXS3-sdVhPDW9i5vEYa.jpeg&#34; /&gt;&lt;/p&gt;
&lt;p&gt;拿破仑说：一头狮子带领的一群羊可以打败一只羊带领的一群狮子。&lt;/p&gt;
&lt;p&gt;在小区的业主群，群主却整天私推他个人合作的产品，霸占群主却毫无作为，不知道大家是什么感觉。&lt;/p&gt;
&lt;p&gt;本来业主群就是一个团结广大业主，维护利益，促进交流的一个组织。当作为开发商、物业的服务性组织和业主群体出现利益冲突时，为争取广大业主的合法正当利益，很多时候都需要在这些群组织来集合众业主的力量，群策群力，努力去争取。比例小区停车收费，小区娱乐设施安全，环境卫生监督，......，等等，相信这一类事情上群体的意见总会比单个业主更有说服力，这时候，不管是信息传递公开，还是意见收集反馈，群主和群管理人员都是极其关键的。&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;116&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-116/</link>
      <pubDate>Sat, 30 Apr 2022 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-116/</guid>
      
    </item>
    
    <item>
      <title>清明节前，狂风暴雨时</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;距离 2022 年的清明节还有一周多的时间，时值星期五，而此刻窗外正大雨绵绵，人坐在办公室看着窗外人来人往，心中百感莫名。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;&lt;img alt=&#34;rain.jpeg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/Fo5_rSWBpQGFjwmSylWa12PI5iva.jpeg&#34; /&gt;&lt;/p&gt;
&lt;p&gt;最近的一段时间，工作上的事情乏陈可数，一切都按部就班，整天一股混吃等死的心态。
&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FvyEoSGSOvS3oOG1mCEBDoF_oWLY.jpeg&#34; /&gt;&lt;/p&gt;
&lt;p&gt;生活上越来越朝着问题叠着问题的常态化发展，大事没有小事不断。小区也在前几天刚经历了 3 天内两次被封的尴尬，第一次是在下午刚回到家就被告知整栋楼禁止出入，然后是核酸，第二天解封；第二次是周一刚起床想着去上班，到了楼下发现又被封掉了，到了九点多收到街道办通知解封。作为开放式小区，物业不作为，进出不管控，说封楼就封楼也没有任何官方文件通知，这样的物业难怪会被那么多租客业主骂。
&lt;img alt=&#34;cc1621762b0f0a5859ab75e441eef8e.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FnqrPfQaTPx6wdEVYnjzQBXIqssE.jpeg&#34; /&gt; &lt;img alt=&#34;550cb7171f51062929306ad59cbdcab.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/Fm5-nmDs5xvUqfD1u0Vx3UNjrTLg.jpeg&#34; /&gt;&lt;/p&gt;
&lt;p&gt;关于工作，虽然每个人都很辛苦，但你又凭什么要求所有人都了解你的辛苦。关于生活，古语说：“辱不及父母，骂不及妻儿，纵言辞不敬，亦不失风度。”
&lt;img alt=&#34;e99e42ffa041b6cbf8235d9b58caedb.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FrCLisEBWRCrRitWsdGO3n5jyeUt.jpeg&#34; /&gt;&lt;/p&gt;
&lt;p&gt;有些事情，不必看的那么重，一场球的输赢不重要，有时候情商和宽心的话语可能更让人坦然，一些迟来才明白的道理，终归需要好好体会细品。
&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FpXhN8ucCI0HowK_Bpwe30HhBxZu.jpeg&#34; /&gt;&lt;/p&gt;
&lt;p&gt;最近有些事情想的太多，有时候就是自己的一厢情愿。它就像一根救命稻草，横在你心里，让你还有念想，还心存侥幸！&lt;/p&gt;
&lt;p&gt;胡言乱语的碎碎念无休无止，念念不忘的游戏跃然心头 —— 生活不休，至少还有游戏，还能写写文字。&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;124&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-124/</link>
      <pubDate>Sat, 30 Apr 2022 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-124/</guid>
      
    </item>
    
    <item>
      <title>热成狗</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;2023 年广州酷热的天气好像比以往都要更早一些，从 5 月中下旬气温就开始陡升，一直持续在 38° 左右 🌞🌞🌞&lt;/p&gt;
&lt;p&gt;如此酷热的天气，让一切都变成了无精打采，就连写个文章记个小记都懒得动笔了；加上 5 月下旬又严重的病毒性感冒了两次，好不容易缓过来后，整个人感觉都要蔫掉了。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;&lt;img alt=&#34;e549b5af315700a9b3e7747b1623398.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FiqCEjITPiIwdeNGXLvHmuCbyWSG.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;顶着酷热，参加了女儿在幼儿园的第一个六一儿童节亲子活动 🏃&lt;/p&gt;
&lt;p&gt;顶着夕阳，陪着女儿开始轮滑从零到一的入门 🌞&lt;/p&gt;
&lt;p&gt;夏天就这样悄然而至，我们就只想吹着空调，吃着冰镇西瓜，窝在家里，闻着花露水，穿着人字拖，晃悠，晃悠 。。。&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;133&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-133/</link>
      <pubDate>Sat, 30 Apr 2022 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-133/</guid>
      
    </item>
    
    <item>
      <title>电子产品魔怔</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;最近一段时间，对手机、耳机、笔记本、键盘......又开始有点走火入魔的感觉，总想着去逛闲鱼，刷 V2EX 的交易频道。作为一个家庭奶爸，奈何囊肿羞涩，也只能是看看。&lt;/p&gt;
&lt;p&gt;发现几点有意思和诡异的事情。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;ol&gt;
&lt;li&gt;2020 年 6 月 23 日，在华为商场入手了一台荣耀 20 PRO（8+128）才 2089 大洋，现在在荣耀商城（2020 年 11 月中，荣耀从华为拆分出售）反而需要 2699，而且没货！难道是因为 6.18 促销？&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FpzZbZZppRi0oju4m2EKoTIFv_vs.png&#34; /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;受美国制裁，感觉华为很多手机都处于缺货状态，甚至拆分出来后的荣耀很多手机也缺货。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;3 月中，给老婆入手了一台 Redmi Note 9（8+128），发现 MINUI 在流畅度上跟华为的 EMUI 的确有一定差距，6000 毫安的电池居然比上一部荣耀 Play3 4000 毫安续航更差。第一次入手小米，体验略差。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Type-c 耳机有没有什么转接头可以插到 3.5mm 的手机耳机接口，发现目前貌似只有这一种的转接头，或者是 Type-c 转 USB 的！&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FiK7dE_WbvLv7MJjCRgSA5AA47_y.jpeg&#34; /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;对于手机，自己更愿意接受 2000 以内的，最多不超过 3000。更关心拍照好和长续航的表现。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;上一部 iPhone 6S 用到最后，续航和信号都大打折扣，苹果好用是好用，贵！&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;对于耳机，半入耳最舒服，更喜欢长续航的蓝牙耳机，要求不高，了解不多，持续关注一下。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;142&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-142/</link>
      <pubDate>Sat, 30 Apr 2022 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-142/</guid>
      
    </item>
    
    <item>
      <title>疫情下的广州</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;2021 年，从 5 月 21 号以来，新冠疫情开始在广州出现反弹并引起了广泛的关注。——广州本次疫情肇始于 5 月 21 日，广州荔湾区陆续出现确诊病例和无症状感染者，成为此次疫情复发的核心区域。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;&lt;img alt=&#34;新冠防护&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FgQa3Gs43JyUxwje5VTsiNY5IyXT.jpeg&#34; /&gt;&lt;/p&gt;
&lt;p&gt;由于一直工作生活在黄埔区，对荔湾区、南沙区的新冠疫情也没有太大的关注。在 6 月 7 日前，遛娃、打球、逛逛万达，还是一切照旧，只是自觉的把活动范围缩小到了所在的小区附近。&lt;/p&gt;
&lt;p&gt;到了 6 月 8 日，收到了&lt;a href=&#34;http://wglj.gz.gov.cn/xxgk/gzdt/tzgsgg/content/post_7320215.html&#34;&gt;通知&lt;/a&gt;，&lt;strong&gt;要严格公共文化旅游场所疫情防控&lt;/strong&gt;，于是电影院、剧院、KTV、网吧都暂停了营业，各种吃饭的地方也开始&lt;strong&gt;限制堂食服务&lt;/strong&gt;。  &lt;br /&gt;
&lt;img alt=&#34;广州市文化广电旅游局关于进一步加强文化广电旅游业疫情防控工作的通知.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/Fnkgi5WbDiCC-q5TQMsmQC24rB_H.png&#34; /&gt;    &lt;/p&gt;
&lt;p&gt;最直观的影响是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;去楼下的肯德基，不能堂食了！&lt;/li&gt;
&lt;li&gt;不可以去网吧玩自己最喜欢的游戏！&lt;/li&gt;
&lt;li&gt;很多地方撤销了餐椅座位，像楼下的喜洋洋、旁边的肯德基、麦当劳等等！&lt;/li&gt;
&lt;li&gt;孩子每天去的万达宝贝王、红孩子都暂停营业，现只能在家、楼下滑梯玩！&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;关于核酸检测，2021 年 6 月 4 日小区开始了第一轮全员核酸检测，由于缺乏排队经验+刚好是周五，从下班回到家 18 点开始排队折腾到 20 点以后才把一家 4 口的核酸搞完！
&lt;img alt=&#34;49aee5f8a483015c75cebe440dd10b2.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/Fh0y1NZkTXHOXI1L4pBdk5fpBw57.jpeg&#34; /&gt;
&lt;img alt=&#34;405efbf96251389a76964630b216213.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/Fto1hbZsf_kPzPWNBMYl7W-67_I9.jpeg&#34; /&gt;
相比个人的辛苦，真心要感谢无私奉献帮助我们的广大医务工作者和那些志愿者们！&lt;/p&gt;
&lt;p&gt;最后，想说一下的是端午节最后一天黄埔区联和社区临时通宵检测核酸！&lt;/p&gt;
&lt;p&gt;事情缘由是小区附近的龙光峰景华庭、万科城科景路发现异常（具体什么情况众说纷纭，有人说是发现核酸阳性人员；有人说是密切接触者在其他区核酸检测阳性，出于安全考虑对原居住地封锁排查；......）。&lt;/p&gt;
&lt;p&gt;后来才知道真实情况，其实是这样的：&lt;a href=&#34;https://mp.weixin.qq.com/s/7r6XQpCQqdXuZKwt9szxkA&#34;&gt;黄埔为何新增 2 个封闭重点场所？有病例发病前一周曾临时居住！联和街道管控区今开展第二轮核酸检测&lt;/a&gt;。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FiX8O7C7HR6s88nCOnQvwpUYXHmw.png&#34; /&gt;
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/Fpwpkik6Ly5AauN9rmKLMlxg4_iE.png&#34; /&gt;
这是距离新冠战场最近的一次核酸排查，由于最早就看到了信息，一早就去楼下的核酸检测点排队去了。&lt;/p&gt;
&lt;p&gt;本来通知的是 19 点开始，不知道什么原因一直等到差不多 19:40 左右才开始，而且这次的检测也由原来的 10 人一组调整为 5 人一组，所幸的是相比前两次，这一次临检增加了多个核酸的检测点，效率提升了很多！
&lt;a href=&#34;https://mp.weixin.qq.com/s/y4xx_aVk_7sz2hBWW_HIZw&#34;&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FkCySO1eJfP32jctok_nl5xLc4ve.png&#34; /&gt;&lt;/a&gt;
关于广州的疫情反弹：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;广东是疫情期间入境人数最多的省份，而境外输入是疫情传播的一个主要环境，恰恰很多境外游客的第一落地点广州，广东扛住了这大多数的风险。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;广东疫情无症状感染者多，这些人往往不知道自己感染了病毒，但却有同样的传播能力，还有部分新增感染者曾隐瞒行程也让筛查难度加大，给疫情增添了难度。但是广东的防控一直做的很好，并且没有更进一步扩大传播范围。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;专家研判分析认为，随着行之有效的聚集性疫情处置措施落实到位，本次广州疫情呈现阳性感染者逐渐减少的走势，疫情防控形势已经趋于缓和，在向着非常积极的方向发展，疫情处于可控状态，但不排除还会有散在病例发生的可能。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;广东的防控一直做的很好，并且没有更进一步扩大传播范围。专家认为，广东疫情用不了多长时间，就会得到一个很好的控制。建议大家非必要不离穗，暂不外出旅游，减少疫情传播的风险，共同努力争取疫情早日结束。&lt;/p&gt;
&lt;p&gt;感谢广大医务工作者和志愿者们，疫情期间不乱跑，减少出行，一起加油，一起努力！
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FgXYFUyv07iayiY2sO2BWkWmVLgt.png&#34; /&gt;&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;144&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-144/</link>
      <pubDate>Sat, 30 Apr 2022 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-144/</guid>
      
    </item>
    
    <item>
      <title>笔记的那些事</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;这些年来笔记换的比较少——主要是从 2018 年以来，一直用语雀作为主力笔记懒得去折腾了。但是到了 2022 年，事情似乎出现了一些转变。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://1.bp.blogspot.com/-sP6euyqs1pc/XUMAy04i4gI/AAAAAAAGpAM/MThDM11XjO8B3WoScwLaGsvnz_uVhaN-QCLcBGAs/s1600/StockSnap_TBJ9OPDGMK%2B%255B2%255D.jpg#from=url&amp;amp;id=Xwf5S&amp;amp;originHeight=903&amp;amp;originWidth=1600&amp;amp;originalType=binary&amp;amp;ratio=1&amp;amp;rotation=0&amp;amp;showTitle=false&amp;amp;status=done&amp;amp;style=none&amp;amp;title=&#34; /&gt;
首先，是语雀的个人用户的话题知识库下线——并入了空间；
其次，语雀的问题反馈，由原来的公开可讨论转变成了类似私信一样的单向反馈；
第三，语雀 2022 年秋季知识库大会的会员收费风波！——语雀的定位改变为&lt;strong&gt;创作工具&lt;/strong&gt;，而不在是&lt;strong&gt;内容社区&lt;/strong&gt;，相应的新的付费策略，也会造成了免费用户无法继续用语雀作为自己的个人博客。这是最致命的一次信任危机。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.yuque.com/docs/share/26348e63-d6f2-464c-889c-2af952f1144d&#34;&gt;语雀个人版新定价的细则和思考&lt;/a&gt; - 境同&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.yuque.com/yubo/morning/thinking-of-yuque-price&#34;&gt;语雀个人定价调整的致歉&lt;/a&gt; - 玉伯&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.zhihu.com/question/562238887&#34;&gt;如何看待语雀付费策略？&lt;/a&gt; - 知乎&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;虽然个人的语雀付费已经到了 2037 年，但是随着越来越多的文档托管在了语雀，不支持批量 md 导出的确让人心生忧虑。
&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FmTgoSK6IXHA4fWaCxC0WVjS7dpU.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;几经考虑之下，在开始 Plan B 前先明确一下个人使用云端笔记无非基于几点考虑：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;同步方便，现在更加注重数据自己可控，最好笔记可以批量导出，或者直接本地保存；&lt;/li&gt;
&lt;li&gt;同时支持私密、公开两种笔记模式；&lt;/li&gt;
&lt;li&gt;支持 markdown 语法；&lt;/li&gt;
&lt;li&gt;支持全文搜索；&lt;/li&gt;
&lt;li&gt;最好支持 web 直接使用；&lt;/li&gt;
&lt;li&gt;..............&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;现在 Obsidian 进行探索中，强悍的搜索，丰富的插件，算是吸引我的一个方面；如果不是官方提供的同步和发布插件价格相对贵了一些，或许早就从语雀开始往 Obsidian 进行迁移了吧！
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/Fn-sssMzVTYiuY-A7jth6NzAZGqH.png&#34; /&gt;
Obsidian 也是书本式的文章结构，这一点跟语雀是一致的，但界面的设计和逻辑要比语雀要好太多太多了，&lt;strong&gt;退一万步来说语雀甚至可以参考一下 Obsidian 的一些界面设计！&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Obsidian 结合一些插件使用，可谓事半功倍。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FhZ4GJBNWpfihTd4KUimGAzE0I1w.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;不得不说的一点体验。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;使用语雀这么多年，转战其他笔记软件真是一件费心又纠结的事情——语雀的写作体验很好但界面逻辑和 UI 经常变，OBS 总体很完美但学习成本高。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;作为知识沉淀和管理，更希望能做到开箱即用，免去各种折腾的时间让用者专注于文字的组织和写作，从这一点来说，或许可以再给语雀一点时间，如果依旧是失望和粗暴，再做 Plan B 迁移也来得及。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;还是选择继续回到语雀，且看它接下来一年的表现吧！&lt;/strong&gt;&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;125&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-125/</link>
      <pubDate>Sat, 30 Apr 2022 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-125/</guid>
      
    </item>
    
    <item>
      <title>精致</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;陆陆续续找回了一些失联许久老同学/朋友的联系方式。&lt;/p&gt;
&lt;p&gt;打开他们的相册看曾经熟悉的面孔，感慨着那些没有被岁月这把杀猪刀蚀刻，不曾老去的容颜，脑海无缘由的就浮现出了这两个字。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;&lt;img alt=&#34;精致&#34; src=&#34;https://gi.weiyan.tech/2023/12/jingzhi.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;精致可以指容颜，更多时候还可以指生活的精致。这就是让自己过得更有品味，更加开心、舒适。而一些隐藏在日常里的小事，足以让我们变得精致。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;爱好独特&lt;/strong&gt;、&lt;strong&gt;事业坚持&lt;/strong&gt;、&lt;strong&gt;感情独立&lt;/strong&gt;、&lt;strong&gt;居家讲究&lt;/strong&gt; ...... 可以说，追求精致生活是睿智的自然体现，注重低碳环保是一份博雅的情怀，更是一种静水深流的境界。&lt;/p&gt;
&lt;p&gt;学会去发现身边的美，然后把它们整理好。&lt;/p&gt;
&lt;p&gt;让自己有一种追求去做。&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;130&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-130/</link>
      <pubDate>Sat, 30 Apr 2022 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-130/</guid>
      
    </item>
    
    <item>
      <title>羽毛球</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;已经不记得自己最早接触羽毛球是什么时候了，但至少现在，它已经成为了我生命中最爱的运动之一。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;初中的时候，学校的教师宿舍楼前刚好有一个露天羽毛球场——那应该是我第一次知道羽毛球这个运动，那时候偶尔看到有人在打也没有怎么太在意。&lt;/p&gt;
&lt;p&gt;到了高中，尤其印象深刻的是一中游泳池旁边的那几个露天羽毛球场。由于寄宿住校，周末无聊的时候偶尔会约上同桌过来打上几场，那时候对羽毛球规则也不怎么了解，而且对于握拍基本也不得要领，更不要说步法、战术之类的，一切都是为了娱乐而娱乐。那个时候也不知道羽毛球还能双打，就只会一味的一对一在那里瞎挥拍。同桌那时候住在城区，家境比我好很多，见多识广的，前后吊球的打法经常把我打的上气不接下气——这一幕至今还历历在目。有时候遇上下雨，露天羽毛球馆用不了，球场的主席台有时候也能成为我们 &amp;ldquo;挥洒汗水&amp;rdquo; 的好去处。&lt;/p&gt;
&lt;p&gt;到了大学，延续了高中时期的爱好（高二开始，毽子开始风靡校园，也是从那时候开始到高中生涯结束，毽子成为了我高中后半段生涯的最爱，并延续到了大学），为此还特意加入了学校的毽球社（虽然毽子在大学并不是那么的风靡，但也总能找到不少喜欢这项运动的同窗）。对于羽毛球大学时期见的最多的也还是室外的场地，也是在那时候才第一次知道羽毛球还有室内的场馆，但由于室内场馆不多（也就偶尔上体育课自由活动玩了几回）。&lt;/p&gt;
&lt;p&gt;真正开始接触羽毛球是在华大实习的时候。主管领导们羽毛球都打的很好，于是提议部门组织经常打球，才真正开始接触并迷恋上这一项运动。有几点印象非常深刻。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;第一次打球，不清楚大伙实力，私以为自己球技也能跟他们打上一打，没想到被啪啪啪打脸；&lt;/li&gt;
&lt;li&gt;打球就要好好打，要有打球的态度，虽然我们技术是业余的，但至少装备是专业的——&lt;strong&gt;衣服、鞋子、拍子是必备&lt;/strong&gt;。领导的这句话我到现在都还记得，并成为了我后面打球的一个标准。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;由于当时华大是有工会，并且每周有两次内部员工的羽毛球组织，加上部门小组的组织，一路打过来让自己的球技不断的提升。&lt;/p&gt;
&lt;p&gt;再后来，回到广州了。&lt;/p&gt;
&lt;p&gt;值得庆幸的是把羽毛球的这项运动坚持了下来！而且兜兜转转认识了现在的这一群球友，从 2020 一直玩到今天，中间有一些球友小伙伴离开了这座城市却也有一些新认识的小伙伴加了进来。打球，吃饭，吹水，平淡无奇的生活平添了更多的人间烟火气息。&lt;/p&gt;
&lt;p&gt;羽毛球是一项神奇的运动，也是一项比较烧钱的运动。人家说，&lt;strong&gt;没有一场球 (羽毛球) 是解决不了的，如果有那就再来一场。&lt;/strong&gt;深以为然，羽毛球打多了会上瘾，打完了这一场总期待着下一场，有熟悉经常一起打的小伙伴更是一种幸福。从另外一方面说，羽毛球的衣服、&lt;strong&gt;拍子&lt;/strong&gt;、鞋子、&lt;strong&gt;球&lt;/strong&gt;都是比较烧钱的必需品，尤其是拍子和球。&lt;/p&gt;
&lt;p&gt;个人最开始用的是胜利 &lt;a href=&#34;https://www.badmintoncn.com/eqm.php?a=view&amp;amp;eid=8504&amp;amp;mag_hide_progress=1&#34;&gt;CHA-9500C&lt;/a&gt;(挑战者 9500c) 这一款经典拍。
&lt;img alt=&#34;9500.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FiBcredXmnwJAdwBbK9LOnyVRMma.jpeg&#34; /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;胜利羽毛球拍 9500 各版本区别&lt;/strong&gt;
9500 一共有四款，也就是 9500C、9500D、9500F 和 9500S，这四个版本各有什么区别呢？&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;胜利 9500C 羽毛球拍和 9500D 羽毛球拍手感参数完全一致，只有涂装的不同！新涂装的 9500C，拍头涂装与 3 点 9 点与 9500 刚好相调换！其他地方几乎没有变化！&lt;/li&gt;
&lt;li&gt;9500C 和 9500F 属于老款，相对来说中杆较粗，72 孔。&lt;/li&gt;
&lt;li&gt;9500S 和 9500D 属于新款，中杆细，比较灵活，76 孔。&lt;/li&gt;
&lt;li&gt;在胜利羽毛球拍 9500 中，9500D 和 9500S 是此系列里的最新款，相比 9500C 和 9500F 来说，中杆变的更细了，中杆更改为 6.8mm 纤细中杆，其他就是涂装上的改变了。&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;后来，用过一段时间时间尤尼克斯的 NR-D11（现在好像已经下架了）。
&lt;img alt=&#34;79ad9ee19cb7b3ab45930ae15e606a5.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FmbE0yBR5I3RFnNiE-tHt-CoMjOq.jpeg&#34; /&gt;&lt;/p&gt;
&lt;p&gt;现在，用着这一个从 2021 年中从中羽 200 来块买来的尤尼克斯 &lt;a href=&#34;https://www.yonex.cn/home/index/mall_detail/id/138&#34;&gt;AX69EX&lt;/a&gt;，太阳橙，3U，拉线 27 磅，95 线，打起来依旧杠杠！
&lt;img alt=&#34;AX69EX.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FsD-QpRkiRubiSXvqLXSlZcmvhcR.jpeg&#34; /&gt;&lt;/p&gt;
&lt;p&gt;如今，疫情远去，又到打球的好时机，以球会友，希望能越打越好，健康快乐。&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;129&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-129/</link>
      <pubDate>Sat, 30 Apr 2022 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-129/</guid>
      
    </item>
    
    <item>
      <title>肘关节骨折</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;小孩子玩蹦蹦床不小心把手摔伤了，X 光拍片后诊断为骨折，需要打石膏治疗处理，脑补一下已经远去的解剖学知识。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;h2 id=&#34;固定支架&#34;&gt;固定支架&lt;a class=&#34;headerlink&#34; href=&#34;#固定支架&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;关于骨折后的保守治疗是打石膏还是使用固定支架，可以参考这篇文章：&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://mp.weixin.qq.com/s?src=11&amp;amp;timestamp=1626836127&amp;amp;ver=3203&amp;amp;signature=5b*nem1TitY8KA1w6pJUR5TVVE7IjFVSP5mB7SOM2RGt8Tv0CgHeROa6IiHeV6bIuK7AdFYSl7WEc19XLArp0dPBhWEJBIWDz6VO4bQmAtGppxpClMFBVh-R3uG3OmOW&amp;amp;new=1&#34;&gt;骨折后，保守治疗选择石膏固定，还是支具固定？&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;根据骨折的稳定程度决定，稳定性好的骨折，可以采取支具固定；需要手法复位后再固定的，或者容易发生移位的骨折，建议打石膏固定，但可以缩短石膏固定的时间。比如常规石膏固定一个半月，可以石膏固定 3 周后改成支具固定。&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FiensyyCY5JDCzGinx1RmUPgCblG.png&#34; /&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FhfwByktPr8Pf084YmPglSO0e4D2.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;肘关节解剖图&#34;&gt;肘关节解剖图&lt;a class=&#34;headerlink&#34; href=&#34;#肘关节解剖图&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;肘关节（elbow joint）是由肱骨下端与桡骨上端构成的复关节，包括三个关节：&lt;/p&gt;
&lt;p&gt;(1) 肱尺关节 （humeroulnar joint）：由肱骨滑车和尺骨滑车切迹构成。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FlUF-EqlwGmYtSDHydq_IlI4BbLm.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;(2) 肱桡关节（humeroradial joint）：由肱骨小头和桡骨关节凹构成。
(3) 桡尺近侧关节（proximal radioulnar joint）：由桡骨环状关节面和尺骨桡切迹构成。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/Fpfdat_I-Yyk4zmR27f_qiKLjg-w.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;上述 3 个关节包在一个关节囊内，肘关节囊前、后壁薄而松弛，两侧壁厚而紧张，并有韧带加强囊的后壁最薄弱，故常见桡、尺两骨向后脱位，移向肱骨的后上方。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/Fr-fmJUm3BnNndwQi0OpxgMPyMwZ.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;人体全身骨骼挂图&#34;&gt;人体全身骨骼挂图&lt;a class=&#34;headerlink&#34; href=&#34;#人体全身骨骼挂图&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&#34;高清人体全身骨骼挂图(双语).jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FjNy1VJvBVZJd3cqoFTRBRf7eCEF.jpeg&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;骨折的一些基础知识&#34;&gt;骨折的一些基础知识&lt;a class=&#34;headerlink&#34; href=&#34;#骨折的一些基础知识&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&#34;骨裂和骨折&#34;&gt;骨裂和骨折&lt;a class=&#34;headerlink&#34; href=&#34;#骨裂和骨折&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;按程度不同，骨折可以分为不全骨折（断裂一部分，没全断）和完全骨折（全部断了）。完全骨折又分为无移位骨折和有移位骨折。&lt;strong&gt;在很多人的认知中，不全骨折和无移位的完全骨折被归类为骨裂，但它们其实都是骨折&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;骨裂往往由较小的暴力引起，没有明显移位，通常不需要手术治疗，只需要石膏、夹板、支具等外固定措施治疗就足够了。&lt;/p&gt;
&lt;p&gt;来源：郭树章，人卫健康《&lt;a href=&#34;https://mp.weixin.qq.com/s/Jgv1mBOY2p4q2LehbdJdag&#34;&gt;骨折与骨裂有没有区别，骨裂是不是骨折？&lt;/a&gt;》&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;青枝骨折&#34;&gt;青枝骨折&lt;a class=&#34;headerlink&#34; href=&#34;#青枝骨折&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;青枝骨折多见于儿童，“青枝”两个是借用来的，在植物的青嫩枝条中，常常会见到折而不断的情况。儿童的骨骼中含有较多的有机物，外面包裹的骨外膜由特别的厚，因此在力学上就具有很好的弹性和韧性，不容易折断，遭受暴力发生骨折就会出现与植物青枝一样折而不断的情况，骨科医生就把这种特殊的骨折称之为青枝骨折。&lt;/p&gt;
&lt;p&gt;由于青枝骨折时，骨骼虽“折”却仍然未“断”，因而一般都属于稳定骨折，通常是不需要手术治疗的。四肢骨的青枝骨折用石膏外固定治疗都有很好的效果。&lt;/p&gt;
&lt;p&gt;来源：百度健康医典，《&lt;a href=&#34;https://www.baidu.com/bh/dict/ydxx_10940239469362560976?tab=%E6%A6%82%E8%BF%B0&amp;amp;title=%E9%9D%92%E6%9E%9D%E9%AA%A8%E6%8A%98&amp;amp;contentid=ydxx_10940239469362560976&amp;amp;query=%E9%9D%92%E6%9E%9D%E9%AA%A8%E6%8A%98&amp;amp;sf_ref=dict_home&amp;amp;from=dicta&#34;&gt;青枝骨折&lt;/a&gt;》&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;石膏后一些注意事项&#34;&gt;石膏后一些注意事项&lt;a class=&#34;headerlink&#34; href=&#34;#石膏后一些注意事项&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;青枝骨折常常发生在儿童，主要就是由于骨折之后骨折没有出现完全的断裂，就像植物的青嫩条枝一样，常常出现折而不断的情况，对于这种骨折一般积极的进行保守治疗就会得到很好的缓解。&lt;/p&gt;
&lt;p&gt;需要积极的进行手法复位，然后进行石膏固定，一般固定的时间大约在 3-4 周。在进行石膏固定的时候，肢体要处于功能位。石膏固定之后要多注意休息 3-7 天，有利于骨折部位的固定和康复。&lt;/p&gt;
&lt;h3 id=&#34;注意观察血液循环&#34;&gt;注意观察血液循环&lt;a class=&#34;headerlink&#34; href=&#34;#注意观察血液循环&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;因骨折或手术肢体肿胀，石膏弹性较差，肢体受到石膏压迫易出现循环障碍，所以石膏固定后患者及家属应严密观察石膏固定肢体末端(如手、足)的变化，&lt;strong&gt;如果肢体末端出现皮肤苍白、青紫或皮肤温度降低，应该及时返院复诊。&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;抬高患肢可促进血液回流，有利于消肿和缓解疼痛。&lt;/strong&gt;适当地活动肢体末端，可以促进血液循环，缓解肿胀。同时，如果患肢出现&lt;strong&gt;麻木、疼痛加重、感觉减退、脉搏减弱等现象&lt;/strong&gt;应及时复诊。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;石膏固定期间，尽量减少出汗，生活在干燥、凉爽的环境中。&lt;/strong&gt;石膏固定的肢体血液循环差，天气冷时要注意石膏固定部位保暖，以防冻伤&lt;strong&gt;。&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;别沾水&#34;&gt;别沾水&lt;a class=&#34;headerlink&#34; href=&#34;#别沾水&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;无论石膏支具是不是防水材料，都建议别沾水。因为，即便是防水的玻璃纤维材料，遇水多了也会可能影响其机械强度。更重要的是，水分一旦进入石膏和皮肤之间，就会引起各种不适，比如：瘙痒、有异味，而且很难再完全干燥。甚至还会出现：局部细菌感染、浸渍、溃疡、皮疹以及接触性皮炎等。&lt;/p&gt;
&lt;h3 id=&#34;石膏过松及时更换&#34;&gt;石膏过松及时更换&lt;a class=&#34;headerlink&#34; href=&#34;#石膏过松及时更换&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;如出现石膏过松，应及时更换石膏。&lt;/p&gt;
&lt;h3 id=&#34;没有被固定的部位适度活动&#34;&gt;没有被固定的部位适度活动&lt;a class=&#34;headerlink&#34; href=&#34;#没有被固定的部位适度活动&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;所有不能动的关节，医生已经使用石膏固定好了，你也动不了了。而那些可以活动的关节，骨科医生都会刻意的不固定，以方便患者活动。&lt;/p&gt;
&lt;p&gt;比如脚踝扭伤，石膏一般都不会固定脚趾头和膝关节，这样患者可以通过活动脚趾头和膝关节来促进血液循环，并预防僵硬。&lt;/p&gt;
&lt;p&gt;再比如，腕关节骨折，石膏一般不只固定手腕子，不会固定手指、胳膊肘和肩关节，这样就是为了让患者可以活动手指头、胳膊肘和肩关节。&lt;/p&gt;
&lt;h2 id=&#34;需要立即去医院的情况&#34;&gt;需要立即去医院的情况&lt;a class=&#34;headerlink&#34; href=&#34;#需要立即去医院的情况&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;在医院用石膏、夹板、支具等固定后，一般医生会叮嘱一段时间后来复查，比如每周或每月。但是，如果出现以下 4 点，您可千万别等了，立即去医院吧：&lt;/p&gt;
&lt;p&gt;（1）严重的肿胀疼痛，或肿胀疼痛逐渐加重；
（2）肢体远端（手指或足趾）无法活动，或者颜色、温度改变，比如变紫，发白，变冷等；
（3）出现了石膏松动、过紧、裂开或折断，石膏被浸湿且无法使之干燥；
（4）石膏下皮肤有溃疡或裂口。&lt;/p&gt;
&lt;h2 id=&#34;参考资料&#34;&gt;参考资料&lt;a class=&#34;headerlink&#34; href=&#34;#参考资料&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;《&lt;a href=&#34;https://mp.weixin.qq.com/s?src=11&amp;amp;timestamp=1626833733&amp;amp;ver=3203&amp;amp;signature=lw2bN5bePM1E8wH-3dd0svniMgEjoYPGtHWsbOzOY-rTYexXgyiTpQDtfg3sbRN21-TaSL47j2dcRVC7U8-dww-gom9ytf02M7mZex9ASaal-HOlciq3qLl2rvTAdh9r&amp;amp;new=1&#34;&gt;打完石膏回家，要特别注意这 4 个细节&lt;/a&gt;》，玖玖骨科，微信公众号&lt;/li&gt;
&lt;li&gt;《&lt;a href=&#34;https://mp.weixin.qq.com/s?src=11&amp;amp;timestamp=1626834716&amp;amp;ver=3203&amp;amp;signature=ofejkSNPeSCf1Ai2jkJCf79eRcqzsMSdLDqODcWbdM**xNct*06b0UTWSYuZMgSs6voER8jVvcCOE5ZnRcJ7oJrZVdNuzfThGvfKchbNOBmoMEO05fV5fdFp0L27MT3-&amp;amp;new=1&#34;&gt;打了石膏想洗澡？如何保持石膏干燥&lt;/a&gt;》，骨科时间&amp;rdquo;，微信公众号&lt;/li&gt;
&lt;li&gt;《&lt;a href=&#34;https://mp.weixin.qq.com/s?src=11&amp;amp;timestamp=1626832526&amp;amp;ver=3203&amp;amp;signature=lw2bN5bePM1E8wH-3dd0svniMgEjoYPGtHWsbOzOY-rwz2SVMCzxuGlmI9SR4iAXUCajRR0DNVbQVSLbU5bsdpEzqAQask5oPeXYFSERyewYK*CHpmnEENjv*BJKHsWP&amp;amp;new=1&#34;&gt;骨折、骨裂傻傻分不清楚？一文教你区分！&lt;/a&gt;》，玖玖骨科，微信公众号&lt;/li&gt;
&lt;li&gt;郭树章，《&lt;a href=&#34;https://mp.weixin.qq.com/s/Jgv1mBOY2p4q2LehbdJdag&#34;&gt;骨折与骨裂有没有区别，骨裂是不是骨折？&lt;/a&gt;》，人卫健康，微信公众号&lt;/li&gt;
&lt;li&gt;《&lt;a href=&#34;https://www.baidu.com/bh/dict/ydxx_10940239469362560976?tab=%E6%A6%82%E8%BF%B0&amp;amp;title=%E9%9D%92%E6%9E%9D%E9%AA%A8%E6%8A%98&amp;amp;contentid=ydxx_10940239469362560976&amp;amp;query=%E9%9D%92%E6%9E%9D%E9%AA%A8%E6%8A%98&amp;amp;sf_ref=dict_home&amp;amp;from=dicta&#34;&gt;青枝骨折&lt;/a&gt;》，百度健康医典&lt;/li&gt;
&lt;li&gt;张昶，《&lt;a href=&#34;https://mp.weixin.qq.com/s?src=11&amp;amp;timestamp=1626832526&amp;amp;ver=3203&amp;amp;signature=Md1Pd80D2PPkcrBDkvWOoLu3iPTeTDOSa-nXkhMLroNC62Nx29*XfohLlgXF2LNPkg6yKxV715STq1gaegEuHMJ5P4p1OLQ4TJ9mgQv6tgJcNgnhatuN8TEsSwGxhI8f&amp;amp;new=1&#34;&gt;科普一下：骨折并不等于骨头断成两截！&lt;/a&gt;》，骨伤疼痛专家张昶博士，微信公众号&lt;/li&gt;
&lt;li&gt;《&lt;a href=&#34;https://mp.weixin.qq.com/s?src=11&amp;amp;timestamp=1626830352&amp;amp;ver=3203&amp;amp;signature=lw2bN5bePM1E8wH-3dd0svniMgEjoYPGtHWsbOzOY-qoXjJXXBCuF1A93OP*rZvhpbkftwyoZKpj5Usq5eU*go0G1B49RxR3A3c7mmsdWeu-SJBZDBRANOsO-jPH0JkA&amp;amp;new=1&#34;&gt;儿童常见肘关节骨折&lt;/a&gt;》，玖玖骨科，微信公众号&lt;/li&gt;
&lt;li&gt;《&lt;a href=&#34;https://mp.weixin.qq.com/s?src=11&amp;amp;timestamp=1626830065&amp;amp;ver=3203&amp;amp;signature=7gxCbrFZayPSh*J9nuFw7bMd0Y8W9JiTSC2dOQC089HU55GdXYmVBMdjsTVCR0GLUMDfX9Q*Hp9gf3OlCQvah34EQzaUnlHpeJiUTVU2gnzLGLT*ZwBO8nUnP1jvR0Wo&amp;amp;new=1&#34;&gt;手把手教你看儿童肘关节骨折&lt;/a&gt;》，医学影像服务中心，微信公众号&lt;/li&gt;
&lt;/ul&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;145&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-145/</link>
      <pubDate>Sat, 30 Apr 2022 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-145/</guid>
      
    </item>
    
    <item>
      <title>语雀天使</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;从 2018 年开始接触语雀，一路走来把自己记过的各种文档都托管到了语雀，从原来的写给自己看方便自己查阅，到今天逐步面向大家公开交流，这是最大的变化。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;&lt;img alt=&#34;71bacefe8f8723f9fb80df1dae35f02.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FjymRUVCcoqMDJQzoNAL60HGnj3v.jpeg&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FtSri7LrQFUK5QjFeBtuhW6_e1BV.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;一路走来，也折腾过语雀以外的很多笔记/在线文档平台，但最终还是选择了语雀。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://mp.weixin.qq.com/s/-QuX-z4KlBNXUiRT92uVOA&#34;&gt;只要能坚持下来就是好博客&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://mp.weixin.qq.com/s/F4eu2rK6aiyVrsX_sJldPw&#34;&gt;语雀图片与七牛云之间的迁移同步&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://mp.weixin.qq.com/s/ntOMVcsqfgDK_B7go16hcw&#34;&gt;快速拥有自己的博客，语雀或许是不错的选择&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;到今天（2021 年 10 月 14 日）个人在语雀一共写了 700 多篇文档，400 多篇是公开的，300 多个关注者，很平淡的一些数据。&lt;/p&gt;
&lt;p&gt;在 2021 年 9 月 26 日的&lt;a href=&#34;https://www.yuque.com/yuque/blog/iaidt8&#34;&gt;&lt;strong&gt;语雀知识大会&lt;/strong&gt;&lt;/a&gt;上收到了另外一个社会身份，叫&lt;strong&gt;首批语雀天使&lt;/strong&gt;，成为了幸运的 1/15，算是对这些年默默码字的一个肯定。
&lt;img alt=&#34;f3fa91b08ac80f46be1eeef6754f42b.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FsMA0G3DdG27_-nKrWT47BMwcOF5.jpeg&#34; /&gt;
&lt;img alt=&#34;240b78a46751eec3d3f0a335a75456d.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FlHRIckh5mJ7PFZFz2Y1Qb2n0vt1.jpeg&#34; /&gt;
今天，终于收到了官方送的礼物，上几张图~
&lt;img alt=&#34;71bacefe8f8723f9fb80df1dae35f02.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FjymRUVCcoqMDJQzoNAL60HGnj3v.jpeg&#34; /&gt; &lt;img alt=&#34;ff8c02f34eb75882b81aae4b3024e4e.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FnHN_g1qbAiZzaYON80lBraD16PH.jpeg&#34; /&gt;
未来不敢承诺什么，但至少还会坚持码码字，不管技术的还是生活，吐槽的还是失意的，若干年后当你回头看看你一路写过的东西，应该会有的心情吧。就好像你现在回去看看你当年 QQ 空间的日志一样，或许会有很多感触！&lt;/p&gt;
&lt;p&gt;而且，最值得期待的语雀移动端 APP 在今年下半年也要出来了，你还有什么好犹豫呢？&lt;/p&gt;
&lt;p&gt;和我一起，在语雀记录和沉淀你的点滴吧！&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;148&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-148/</link>
      <pubDate>Sat, 30 Apr 2022 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-148/</guid>
      
    </item>
    
    <item>
      <title>语雀目录的一些困惑</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;p&gt;语雀的目录应该是语雀的一大特色，像书本一样清晰明了的结构的确能解决一些问题，但是随着文档越来越多，使用起来感觉越来越臃肿——最起码会有目录编排的逻辑困惑（我应该怎么系统设置我的目录？）。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;p&gt;&lt;a href=&#34;https://www.yuque.com/shenweiyan/mind/whnegc?view=doc_embed&#34;&gt;语雀知识库文档分类的纠结&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;还有的就是目录层级太多，上下滚动，或者在看某一篇文档时，有种不知道自己在哪里的错觉。不清楚整个目录的逻辑是什么样的。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FlqfKANn6DQsTEDdoTNQ21a76R8D.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;所以，还是想要类似的一个目录，虽然觉得官方不可能会支持，但想想总是可以的。如果可以支持多种目录样式，这对于没有系统分类的人来说应该算一种福利吧。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FuAD9wruzOFqtCy4QqXPuvxNSUxJ.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;回到现有目录结构，认真想一下，一旦你的知识库目录想好了（可能要花不少时间去思考：知识库核心是什么，放什么内容，按照什么标准来划分层级......），后面的书写就会很顺理成章。其实就是先想好大纲，理清思路，再进行写作。
&lt;img alt=&#34;a557c65ea2805ab271fe885b00284f0.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FpQ3iwTyae-7t-zZOzpbeUcOhgY-.jpeg&#34; /&gt;&lt;/p&gt;
&lt;p&gt;对于现有的目录结构，更喜欢 &lt;a href=&#34;http://www.wjjsoft.com/mybase_cn.html&#34;&gt;Mybase&lt;/a&gt; 这种树形大纲、树形标签样式的。
&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/Foz3UT1eeeM40gp0KS4gw-oB7HmO.png&#34; /&gt;
&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/Fot8QZF_MhgiUHR1ooyarNtdmzzw.jpeg&#34; /&gt;&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;147&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-147/</link>
      <pubDate>Sat, 30 Apr 2022 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-147/</guid>
      
    </item>
    
    <item>
      <title>输入法，哪一个才是我的菜？</title>
      
      
        
      <author>shenweiyan</author>
        
      
      
      
      <description>&lt;blockquote&gt;
&lt;p&gt;Categories: 博客/语雀&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;记录一下这些年来在电脑上使用的输入法的一些感受，以前在 Win10 使用自带微软拼音输入法倒也没发现什么问题，后来办公的 PC 变成了 Win7，强迫症作祟开始各种倒腾和记录。&lt;/p&gt;
&lt;!-- more --&gt;

&lt;h2 id=&#34;20220112修复&#34;&gt;20220112，修复&lt;a class=&#34;headerlink&#34; href=&#34;#20220112修复&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;搜狗输入法（PC）对用户的反馈的问题还是比较重视的，终于把这一个问题给修复了。
&lt;img alt=&#34;2c52da194b39fe60f660e4d989178da.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/Fq4slj-Qr0vXLUMGhYX2wQZwnpB4.jpeg&#34; /&gt;
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FjpghqJs-16Udl2XmpLT87Vs0g0m.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;20211018删除操作&#34;&gt;20211018，删除操作&lt;a class=&#34;headerlink&#34; href=&#34;#20211018删除操作&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;试了一下搜狗、百度和讯飞 PC 端的输入法，发现搜狗和百度在 Mobaxterm 中 Backspace 删除操作无法在候选区进行删除，只有讯飞可以正常使用！！！
&lt;a href=&#34;https://www.yuque.com/shenweiyan/notebook/input&#34;&gt;百度搜狗在 Mobaxterm 中无法通过 Backspace 键删除.mp4&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;20211012数据与账号同步&#34;&gt;20211012，数据与账号同步&lt;a class=&#34;headerlink&#34; href=&#34;#20211012数据与账号同步&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;从 9 月中旬把移动端+PC 端的输入法从搜狗全线换成百度输入法后，一直在努力适应中，但今天居然发现账号/数据同步出现问题了！
&lt;img alt=&#34;百度输入法01.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/Fi9keXw1_rv7xDz83p_hfkhCt19d.jpeg&#34; /&gt;
&lt;img alt=&#34;百度输入法02.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/Fie1gLptxXtDyZ6x_m4sKxdHB23m.jpeg&#34; /&gt;
而且发现：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://shurufa.baidu.com/update&#34;&gt;百度 PC 端&lt;/a&gt;的输入法更新力度比不上&lt;a href=&#34;https://pinyin.sogou.com/changelog.php&#34;&gt;搜狗 PC 端&lt;/a&gt;的输入法。百度 PC 输入法在 2020 年基本没有任何更新，直到 2021.06 月才开始有所动作。&lt;/li&gt;
&lt;li&gt;问题反馈，都有微博，都有百度贴吧，搜狗有 QQ 群（虽然我没怎么用过）。个人试过微博反馈相关的问题，很快就收到了&lt;a href=&#34;https://weibo.com/u/2285231187&#34;&gt;搜狗技术支持&lt;/a&gt;的回馈；&lt;a href=&#34;https://weibo.com/u/1829860077&#34;&gt;百度输入法商务助手&lt;/a&gt;迟迟没有反应，反而是&lt;a href=&#34;https://weibo.com/u/2757484243&#34;&gt;百度输入法小助手&lt;/a&gt;很快就反馈了。&lt;/li&gt;
&lt;li&gt;在手机端百度输入法和搜狗输入法都感觉很顺畅，没什么大的问题；PC 端，百度输入法在切换不同的软件场景时会默认开启全角输入，非常不好。&lt;/li&gt;
&lt;li&gt;搜狗输入法的账号系统，个人感觉不太好用，尤其的 web 端！百度输入法的账号系统相对好一些，但是稳定性不够。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;搜狗输入法是搜狗(Sogou)公司于 2006 年 6 月推出的一款汉字输入法工具。2009 年 9 月开始，搜狗输入法陆续推出 Android、iOS 版本，成为智能手机时代最强大的第三方输入法之一。&lt;/p&gt;
&lt;p&gt;百度拼音输入法是百度公司免费提供的输入软件。2010 年 10 月推出，拥有百度搜索和云端技术的支持，百度输入法很快成为了新一代的输入产品。&lt;/p&gt;
&lt;p&gt;一点直观感受是，在流畅度上搜狗输入法要好一点点，但是百度输入法可能更值得期待。&lt;/p&gt;
&lt;h2 id=&#34;20210913使用百度&#34;&gt;20210913，使用百度&lt;a class=&#34;headerlink&#34; href=&#34;#20210913使用百度&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;百度输入法也终于在&lt;strong&gt;安卓手机&lt;/strong&gt;上支持&lt;strong&gt;左右滑动键盘&lt;/strong&gt;来&lt;strong&gt;移动光标&lt;/strong&gt;，我也把手机、PC 的输入法都换成百度了！&lt;/p&gt;
&lt;h2 id=&#34;20200820搜狗自定义并固定标点&#34;&gt;20200820，搜狗自定义并固定标点&lt;a class=&#34;headerlink&#34; href=&#34;#20200820搜狗自定义并固定标点&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;问：安卓手机中搜狗输入法左边的标点符号怎样自定义并且固定？&lt;/strong&gt;
&lt;strong&gt;答：设置 → 更多设置 → 输入习惯 → 自定义符号设置&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&#34;20191016左右滑动键盘来移动光标&#34;&gt;20191016，左右滑动键盘来移动光标&lt;a class=&#34;headerlink&#34; href=&#34;#20191016左右滑动键盘来移动光标&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;现在移动端电脑端的输入法有很多。但有一个问题：&lt;strong&gt;安卓手机&lt;/strong&gt;上哪个输入法可以&lt;strong&gt;左右滑动键盘&lt;/strong&gt;来&lt;strong&gt;移动光标&lt;/strong&gt;？&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/Fp2xs-BpN1KDZPOpv_MxM7r7W635.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;我用的是华为手机，经测试目前搜狗输入法是可以的，百度、讯飞暂不支持。&lt;/p&gt;
&lt;p&gt;第二个问题，左右角引号（「」）怎么打在搜狗输入法中怎么打出来？&lt;strong&gt;ctrl+shift+z&lt;/strong&gt; 快捷键弹出搜狗输入法特殊符号，在 &lt;strong&gt;&amp;ldquo;标点符号&amp;rdquo;&lt;/strong&gt; 中选择。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FlJaOTNYFhTbGfIcrRVVSZ3rjudX.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;艾媒咨询 (https://www.iimedia.cn/) 每年都有关于中国第三方手机输入法行业趋势研究报告，PC 端的不怎么看到，感兴趣的也可以去看看。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-notebook-img/FvF-dagzFM03BT3s0Ti7tkyIK8Eo.png&#34; /&gt;&lt;/p&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
    data-repo=&#34;shenweiyan/Digital-Garden&#34;
    data-repo-id=&#34;R_kgDOKgxWlg&#34;
    data-mapping=&#34;number&#34;
    data-term=&#34;119&#34;
    data-reactions-enabled=&#34;1&#34;
    data-emit-metadata=&#34;0&#34;
    data-input-position=&#34;bottom&#34;
    data-theme=&#34;light&#34;
    data-lang=&#34;zh-CN&#34;
    crossorigin=&#34;anonymous&#34;
    async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/blog/discussions-119/</link>
      <pubDate>Sat, 30 Apr 2022 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/blog/discussions-119/</guid>
      
    </item>
    
    <item>
      <title>IPython 内置魔法命令</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2022-04-21&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2022-04-21T00:00:00&#39;&gt;2022-04-21&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2023-09-06&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2023-09-06T11:09:50&#39;&gt;2023-09-06&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;IPython 中有一些特有的魔法命令，如果能合理的利用这些魔法命令，会省去很多不必要的操作，为编程带来很大程度的便利，下面基于 IPytthon 官方的《&lt;a href=&#34;https://ipython.readthedocs.io/en/stable/interactive/magics.html&#34;&gt;Built-in magic commands&lt;/a&gt;》安利一下这些命令。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;本文档涵盖 IPython 6.0 及更高版本。 从 6.0 版开始，IPython 停止支持与低于 3.3 的 Python 版本的兼容性，包括所有 Python 2.7 版本。
如果您正在寻找与 Python 2.7 兼容的 IPython 版本，请使用 IPython 5.x LTS 版本并参考其文档（LTS 是长期支持版本）。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;基础知识&#34;&gt;基础知识&lt;a class=&#34;headerlink&#34; href=&#34;#基础知识&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&#34;-和-&#34;&gt;? 和 ??&lt;a class=&#34;headerlink&#34; href=&#34;#-和-&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;例：%matplotlib?、%matplotlib??&lt;/strong&gt;
后缀为 ? 可以获取一个对象的相关信息，比如描述一个方法该怎么用；后缀为 ?? 可以获取该对象更加详细的信息，比如源码。这个对象可以是 IPython 中自带的、也可以是导入的、也可以是自己定义的。&lt;/p&gt;
&lt;h3 id=&#34;-和-_1&#34;&gt;% 和 %%&lt;a class=&#34;headerlink&#34; href=&#34;#-和-_1&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;例：%time、%%time&lt;/strong&gt;
前缀为 % 被称作行魔法命令（line magics），只能在单个输入行上运行；前缀为 %% 被称作单元格魔法命令（cell magics），可以在多个输入行上运行。&lt;/p&gt;
&lt;p&gt;更新中。。。&lt;/p&gt;
&lt;h2 id=&#34;参考资料&#34;&gt;参考资料&lt;a class=&#34;headerlink&#34; href=&#34;#参考资料&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;佚名，《&lt;a href=&#34;https://developer.51cto.com/article/620863.html?pc&#34;&gt;12 个常用的 IPython 魔法命令&lt;/a&gt;》，51CTO.COM&lt;/li&gt;
&lt;/ol&gt;</description>
      <link>https://shenwy.com/yuque/%E7%BC%96%E7%A8%8B%E6%8A%80%E6%9C%AF/Python/2022-04-21-ipython-magics/</link>
      <pubDate>Thu, 21 Apr 2022 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E7%BC%96%E7%A8%8B%E6%8A%80%E6%9C%AF/Python/2022-04-21-ipython-magics/</guid>
      
    </item>
    
    <item>
      <title>Python 类型与编码转换</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2022-04-19&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2022-04-19T00:00:00&#39;&gt;2022-04-19&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2022-04-19&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2022-04-19T16:52:04&#39;&gt;2022-04-19&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;一些类型与编码解码使用示例。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# xlrd 中 sheet0.row_values(n) 的每个元素都是 unicode;&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# Python 中如果执行 str+unicode 拼接会出现 UnicodeDecodeError 错误.&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;geneid&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;str&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;line&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;])&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;isinstance&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;line&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;float&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;else&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;line&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;.encode&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;utf-8&amp;quot;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
      <link>https://shenwy.com/yuque/%E7%BC%96%E7%A8%8B%E6%8A%80%E6%9C%AF/Python/2022-04-19-gqksoi/</link>
      <pubDate>Tue, 19 Apr 2022 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E7%BC%96%E7%A8%8B%E6%8A%80%E6%9C%AF/Python/2022-04-19-gqksoi/</guid>
      
    </item>
    
    <item>
      <title>终端 | PortX 使用感受</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2022-03-03&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2022-03-03T00:00:00&#39;&gt;2022-03-03&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2022-03-03&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2022-03-03T16:32:32&#39;&gt;2022-03-03&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;我是在逛 V2EX 的时候（&lt;a href=&#34;https://www.v2ex.com/t/837538&#34;&gt;xshell 和 xftp 终于支持跨平台了 - V2EX&lt;/a&gt;）发现的这个终端应用，出于好奇去安装使用了一下。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FvSDVHBQg1aLY_eKvYk-r1iqZU6t.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;PortX 官网：&lt;a href=&#34;https://portx.online/zh/&#34;&gt;https://portx.online/&lt;/a&gt;。官网比较简洁，连具体的一些使用文档都没发现，全靠自己摸索。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fj97lR5WQ4uQ892FujRDaCkmHpu4.png&#34; /&gt;
优点：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;颜值不错，而且是跨平台。&lt;/li&gt;
&lt;li&gt;支持把文件拖到 terminal 上传到当前目录。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;缺点：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;没有具体文档，上手有点慢。&lt;/li&gt;
&lt;li&gt;安装时候不能选择自定义安装目录！&lt;/li&gt;
&lt;li&gt;文件上传下载目前没搞明白具体是怎么操作的，除了知道把文件拖到 terminal 上传到当前目录，但不清楚下载文件需要怎么操作。&lt;/li&gt;
&lt;li&gt;Windows 10 中使用底部任务栏图标，无法切换其他 Tab，PortX 永远在永远在最上层，点击其他任务图标无法切换出去。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;可能是 MobaXterm/XShell 用久了，对其他 terminal 显得有点挑剔，也不愿意用太多的时间去摸索，后面如有时间再去尝试吧！&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/Windows/2022-03-03-portx-ssh-client/</link>
      <pubDate>Thu, 03 Mar 2022 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/Windows/2022-03-03-portx-ssh-client/</guid>
      
    </item>
    
    <item>
      <title>Win10 | 隐藏图片视频文档等文件夹</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2022-02-25&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2022-02-25T00:00:00&#39;&gt;2022-02-25&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2022-02-25&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2022-02-25T16:52:15&#39;&gt;2022-02-25&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Win10 系统刚安装后，打开“此电脑”，在资源管理器上面会有图片/文档/音乐/3D 对象视频等 7 个文件夹，对于有强迫症的朋友来说，第一件事就是将这几个文件夹删除。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;① 红色框：右侧管理器窗口&lt;/li&gt;
&lt;li&gt;② 绿色框：左侧栏&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&#34;两处不同位置的文件夹&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FgVW3X2VaHWXI527qCNVuCRgLoe_.png&#34; title=&#34;两处不同位置的文件夹&#34; /&gt;&lt;/p&gt;
&lt;p&gt;个人用的是 Win10 专业版（21H1），网上找了不少方法都没能解决想要删除/隐藏资源管理器中的 &amp;ldquo;&lt;strong&gt;图片/视频/文档/下载/音乐/桌面&lt;/strong&gt;&amp;rdquo; 这些文件夹的方法。&lt;/p&gt;
&lt;p&gt;有时候自己胡乱更改，甚至删除注册表，一不小心还会导致电脑出现各种异常，没有备份注册表的情况下就恢复不回来了！下面的解决方法，完整原文参考：《&lt;a href=&#34;https://zhuanlan.zhihu.com/p/346784646&#34;&gt;Win10 删除资源管理器“图片/视频/文档/下载/音乐/桌面&amp;rdquo;等文件夹方法 - 知乎&lt;/a&gt;》。&lt;/p&gt;
&lt;h1 id=&#34;一打开注册表编辑器&#34;&gt;一、打开注册表编辑器&lt;a class=&#34;headerlink&#34; href=&#34;#一打开注册表编辑器&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;按下 Win+R，输入 &lt;strong&gt;regedit&lt;/strong&gt; 回车，打开注册表。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FmhdMYm60Ele1bbGBjACm1iC-L3C.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;两处文件夹的注册表根位置&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FlYGLQE1L16xiDSxvm_Rw968n15m.png&#34; title=&#34;两处文件夹的注册表根位置&#34; /&gt;&lt;/p&gt;
&lt;h1 id=&#34;二删除红色框-①-处的文件夹&#34;&gt;二、删除红色框 ① 处的文件夹&lt;a class=&#34;headerlink&#34; href=&#34;#二删除红色框-①-处的文件夹&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;定位到以下位置：&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;HKEY_LOCAL_MACHINE
|-SOFTWARE
|-Microsoft
|-Windows
|-CurrentVersion
|-Explorer
|-MyComputer
|-NameSpace&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;红色①处的注册表项&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fhi81vpR0oH2XW5MX_lG2fNCUf91.png&#34; title=&#34;红色①处的注册表项&#34; /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;找到相应的键值进行删除操作（删除之前先做好备份），或者注释（推荐）。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;删除【下载】文件夹： {088e3905-0323-4b02-9826-5d99428e115f}&lt;/li&gt;
&lt;li&gt;删除【图片】文件夹： {24ad3ad4-a569-4530-98e1-ab02f9417aa8}&lt;/li&gt;
&lt;li&gt;删除【音乐】文件夹： {3dfdf296-dbec-4fb4-81d1-6a3438bcf4de}&lt;/li&gt;
&lt;li&gt;删除【文档】文件夹： {d3162b92-9365-467a-956b-92703aca08af}&lt;/li&gt;
&lt;li&gt;删除【视频】文件夹： {f86fa3ab-70d2-4fc7-9c99-fcbf05467f3a}&lt;/li&gt;
&lt;li&gt;删除【桌面】文件夹： {B4BFCC3A-DB2C-424C-B029-7FE99A87C641}&lt;/li&gt;
&lt;li&gt;删除【3D 对象】文件夹： {0DB7E03F-FC29-4DC6-9020-FF41B59E513A}&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img alt=&#34;选中项右键选择删除或者左键选中，按 Delete 直接删除&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FgXdxFb3Nax_8SBiKy8B1Wpof2MF.png&#34; title=&#34;选中项右键选择删除或者左键选中，按 Delete 直接删除&#34; /&gt;
如果不想删除，可以在每个注册表前边加一个减号“-”，同样起作用。
&lt;img alt=&#34;2022.02.25-16.13.44.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FmGo2OdcMS9YLi5OOPFCESD8GeB9.png&#34; /&gt;&lt;/p&gt;
&lt;h1 id=&#34;三删除绿色框-②-处的文件夹&#34;&gt;三、删除绿色框 ② 处的文件夹&lt;a class=&#34;headerlink&#34; href=&#34;#三删除绿色框-②-处的文件夹&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;定位以下位置：&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;HKEY_LOCAL_MACHINE
|-SOFTWARE
|-WOW6432Node
|-Microsoft
|-Windows
|-CurrentVersion
|-Explorer
|-MyComputer
|-NameSpace
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fires9GSQz2Dv_Y625NOQ-Fq61IL.png&#34; /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;找到相应的键值进行删除操作（删除之前先做好备份），或者注释（推荐）。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;删除【下载】文件夹： {088e3905-0323-4b02-9826-5d99428e115f}&lt;/li&gt;
&lt;li&gt;删除【图片】文件夹： {24ad3ad4-a569-4530-98e1-ab02f9417aa8}&lt;/li&gt;
&lt;li&gt;删除【音乐】文件夹： {3dfdf296-dbec-4fb4-81d1-6a3438bcf4de}&lt;/li&gt;
&lt;li&gt;删除【文档】文件夹： {d3162b92-9365-467a-956b-92703aca08af}&lt;/li&gt;
&lt;li&gt;删除【视频】文件夹： {f86fa3ab-70d2-4fc7-9c99-fcbf05467f3a}&lt;/li&gt;
&lt;li&gt;删除【桌面】文件夹： {B4BFCC3A-DB2C-424C-B029-7FE99A87C641}&lt;/li&gt;
&lt;li&gt;删除【3D 对象】文件夹： {0DB7E03F-FC29-4DC6-9020-FF41B59E513A}&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h1 id=&#34;四重启下-explorer-进程&#34;&gt;四、重启下 explorer 进程&lt;a class=&#34;headerlink&#34; href=&#34;#四重启下-explorer-进程&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;打开任务管理器。
&lt;img alt=&#34;在任务栏空白处鼠标右键选择任务管理器&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FpWNs94O60MPdU5JVk2-3fxt0wmK.png&#34; title=&#34;在任务栏空白处鼠标右键选择任务管理器&#34; /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;重新启动 &amp;ldquo;Windows 资源管理器&amp;rdquo;。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fvju7OJDsNuM1X5-3fCnBMRC1f7R.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;以上就是如何删除资源管理器中的图片/文档/音乐/视频等文件夹的操作方法，如果也有强迫症希望自己的资源管理器看着干干净净，可以试试这些方法。&lt;/p&gt;
&lt;h1 id=&#34;五参考资料&#34;&gt;五、参考资料&lt;a class=&#34;headerlink&#34; href=&#34;#五参考资料&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&#34;https://www.zhihu.com/people/harvim&#34;&gt;小马哥看世界&lt;/a&gt;，《&lt;a href=&#34;https://zhuanlan.zhihu.com/p/346784646&#34;&gt;Win10 删除资源管理器“图片/视频/文档/下载/音乐/桌面&amp;rdquo;等文件夹方法&lt;/a&gt;》，知乎&lt;/li&gt;
&lt;/ol&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/Windows/2022-02-25-wl23zw/</link>
      <pubDate>Fri, 25 Feb 2022 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/Windows/2022-02-25-wl23zw/</guid>
      
    </item>
    
    <item>
      <title>如何在 Python 中使用 ggplot2？</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2022-02-24&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2022-02-24T00:00:00&#39;&gt;2022-02-24&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2022-02-24&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2022-02-24T11:00:52&#39;&gt;2022-02-24&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;作者 |&lt;/strong&gt; &lt;a href=&#34;https://medium.com/@lukaskfrei?source=user_profile----------------------------------------&#34;&gt;Lukas Frei&lt;/a&gt;
&lt;strong&gt;编译 |&lt;/strong&gt; &lt;a href=&#34;https://www.yuque.com/shenweiyan&#34;&gt;史提芬先森&lt;/a&gt;
**原文 | **&lt;a href=&#34;https://towardsdatascience.com/how-to-use-ggplot2-in-python-74ab8adec129&#34;&gt;How to Use ggplot2 in Python&lt;/a&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fhj9qSY3gT5PR2pZhEyuNGpQVBa8.png&#34; /&gt;&lt;/p&gt;
&lt;h1 id=&#34;简介&#34;&gt;简介&lt;a class=&#34;headerlink&#34; href=&#34;#简介&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;由于严格执行图形语法，ggplot2 提供了一种极其直观且一致的数据绘制方式。 ggplot2 的绘图方法不仅确保每个绘图都包含某些基本元素，而且在很大程度上简化了代码的可读性。&lt;/p&gt;
&lt;p&gt;但是，如果您是 Python 的频繁使用用户，那么由于 matplotlib 或 seaborn 等流行绘图库中缺乏标准化语法，因此实现图形语法可能会非常具有挑战性。 如果您仍想使用图形语法，那么 Python 包 &lt;a href=&#34;https://plotnine.readthedocs.io/en/stable/index.html&#34;&gt;plotnine&lt;/a&gt; 为您提供了另一种选择。&lt;/p&gt;
&lt;h1 id=&#34;图形语法&#34;&gt;图形语法&lt;a class=&#34;headerlink&#34; href=&#34;#图形语法&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;如果您不熟悉图形的语法，这里有一个快速概述：
&lt;img alt=&#34;图形语法（Grammar of Graphics）的主要组成部分&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fgrj6NPiMNKMvW6hxMl0OvyY-c3n.png&#34; title=&#34;图形语法（Grammar of Graphics）的主要组成部分&#34; /&gt;
如您所见，从您的数据开始，有几个组件构成了图形的语法。在确定要可视化的数据后，您必须指定您感兴趣的变量。例如，您可能希望在 x 轴上显示一个变量，在 y 轴上显示另一个变量。第三，你必须定义你想使用什么类型的几何对象（geometric object，简称 geom）。这可以是从条形图到散点图或任何其他现有绘图类型的任何东西。&lt;/p&gt;
&lt;p&gt;所有的组件中，前三个组件是强制性的。没有数据，就没有什么可绘制的。没有轴定义，也没有什么可以绘制的。最后，如果不定义几何对象，您只会看到一个空坐标系。构成图形语法的其余组件是可选的，可以它们的实现以改进可视化。分面（facet） 指的是子图（subplots）的规范，也就是说，在单独的图中，将数据中的几个变量挨个绘制出来。统计转换主要是指在绘图中包含汇总统计信息，例如中位数或百分位数。坐标描述了可供您使用的不同坐标系。最常用和默认的坐标系是笛卡尔坐标系。根据您要绘制的数据结构，较少使用的坐标系（例如极坐标系）可能会提供更好的数据可视化方式。最后，主题提供了多种选项来设计绘图的所有非数据元素，例如图例、背景或注释。&lt;/p&gt;
&lt;p&gt;虽然有许多可视化图形语法的方法，但我特别喜欢我在上面创建的那个，因为它暗示了这些层的可加性以及它们相互构建的事实。如果您曾经使用过 ggplot2，那么您就会熟悉其语法中的“+”，它象征着上述相同的想法。&lt;/p&gt;
&lt;h1 id=&#34;plotnine&#34;&gt;plotnine&lt;a class=&#34;headerlink&#34; href=&#34;#plotnine&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;plotnine 是一个 Python 包，允许您使用实现图形语法的类似 ggplot2 的代码。 通过这样做，就像在 ggplot2 中一样，您可以将数据专门映射到构成可视化的可视对象。 这使您能够提高代码的可读性和结构。 虽然您可以将 matplotlib 的样式设置为 ggplot，但您无法像在 ggplot2 中那样在 matplotlib 中实现图形语法。&lt;/p&gt;
&lt;h1 id=&#34;安装&#34;&gt;安装&lt;a class=&#34;headerlink&#34; href=&#34;#安装&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;在开始之前，您必须安装 plotnine。 与往常一样，这样做有两个主要选项：pip 和 conda。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# Using pip&lt;/span&gt;
pip&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;plotnine

&lt;span class=&#34;c1&#34;&gt;# Using conda&lt;/span&gt;
conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-c&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conda-forge&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;plotnine
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h1 id=&#34;绘图&#34;&gt;绘图&lt;a class=&#34;headerlink&#34; href=&#34;#绘图&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;安装了 plotnine 之后，就可以开始使用图形语法绘制图形了。让我们开始构建一个非常简单的绘图，只使用三个必不可少的组成部分：数据、aesthetics 组件和几何对象。
&lt;img alt=&#34;使用图形语法构建绘图&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FpSVj4i3xkaxuYugmFgde3-A20v_.png&#34; title=&#34;使用图形语法构建绘图&#34; /&gt;
如您所见，语法非常类似于 ggplot2。首先，我们指定数据源。在我们的例子中，我们使用的数据是典型的 mpg 数据集。接下来，我们定义变量 &amp;ldquo;class&amp;rdquo; 将显示在 x 轴上。最后，我们说，我们想使用大小为 20 的条形图来可视化我们的数据。让我们来看看完整的代码和结果图：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;pandas&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;as&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;pd&lt;/span&gt;
&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;numpy&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;as&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;np&lt;/span&gt;
&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;pandas.api.types&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;CategoricalDtype&lt;/span&gt;
&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;plotnine&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;
&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;plotnine.data&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mpg&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;%&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;matplotlib&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;inline&lt;/span&gt;

&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ggplot&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mpg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;         &lt;span class=&#34;c1&#34;&gt;# defining what data to use&lt;/span&gt;
 &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;aes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;class&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;    &lt;span class=&#34;c1&#34;&gt;# defining what variable to use&lt;/span&gt;
 &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;geom_bar&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;20&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# defining the type of plot to use&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;上面的代码将产生以下输出：
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FgfImN28Xhbb1598BjRGsb0Eo-rQ.png&#34; /&gt;
虽然这是一个好的开始，但看起来还不是很好。让我们用图形的语法的其他组成部分来美化我们的图形。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ggplot&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mpg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
 &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;aes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;class&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
 &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;geom_bar&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;20&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
 &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;coord_flip&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;        &lt;span class=&#34;c1&#34;&gt;# flipping the x- and y-axes&lt;/span&gt;
 &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;labs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Number of Vehicles per Class&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Vehicle Class&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Number of Vehicles&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# customizing labels&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;例如，我们可以使用&lt;code&gt;coord_flip()&lt;/code&gt;翻转坐标轴，并使用&lt;code&gt;labs()&lt;/code&gt;自定义绘图和坐标轴标题以改进我们的绘图。使用上面的代码块，我们的绘图将如下所示：
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fvf7e57OhZ-C4uCwL0EyWvSMJBVi.png&#34; /&gt;&lt;/p&gt;
&lt;h1 id=&#34;绘制多维数据&#34;&gt;绘制多维数据&lt;a class=&#34;headerlink&#34; href=&#34;#绘制多维数据&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;除了基本的绘图之外，您还可以在 ggplot2 中完成几乎所有可以做的事情，比如绘制多维数据。如果你想将三个变量之间的关系可视化，你可以在平面图上添加美学元素：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ggplot&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mpg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
 &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;aes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;displ&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;hwy&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;class&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
 &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;geom_point&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
 &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;labs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Engine Displacement vs. Highway Miles per Gallon&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Engine Displacement, in Litres&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Highway Miles per Gallon&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;将 &lt;strong&gt;color&lt;/strong&gt; 添加到 aesthetics 组件中将会促使 plotnine 呈现一个在 x 轴上使用 &lt;strong&gt;displ&lt;/strong&gt;（发动机排量，以升为单位）和在 y 轴上使用 &lt;strong&gt;hwy&lt;/strong&gt;（每加仑高速公路英里数），并根据 &lt;strong&gt;class&lt;/strong&gt; 变量为数据着色的二维图。我们还可以将几何对象切换到 &lt;code&gt;geom_point()&lt;/code&gt;，这将为我们提供散点图而不是条形图。 让我们来看看会是什么样子：
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fn4CPQ7BvgXq12KKAefzIkVDiBgC.png&#34; /&gt;&lt;/p&gt;
&lt;h1 id=&#34;总结&#34;&gt;总结&lt;a class=&#34;headerlink&#34; href=&#34;#总结&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;如您所见，plotnine 为您提供了在 Python 中利用图形语法的能力。这增加了代码的可读性，并允许您将部分数据专门映射到可视对象。如果您已经熟悉 ggplot2，那么您无需学习任何新知识即可掌握 plotnine。如果没有，这里是 &lt;a href=&#34;https://ggplot2.tidyverse.org/&#34;&gt;ggplot2 网站的链接&lt;/a&gt;，您可以在该网站上找到更多关于图形语法和所有类型的可用几何对象的信息。&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E5%8F%AF%E8%A7%86%E5%8C%96/Python%E5%8F%AF%E8%A7%86%E5%8C%96/2022-02-24-how-to-use-ggplot2-in-python/</link>
      <pubDate>Thu, 24 Feb 2022 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%8F%AF%E8%A7%86%E5%8C%96/Python%E5%8F%AF%E8%A7%86%E5%8C%96/2022-02-24-how-to-use-ggplot2-in-python/</guid>
      
    </item>
    
    <item>
      <title>Win10 | 微软输入法快速输入时间</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2022-02-15&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2022-02-15T00:00:00&#39;&gt;2022-02-15&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2022-02-15&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2022-02-15T15:23:35&#39;&gt;2022-02-15&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;2022 年开始，办公电脑终于更换成了一直念念不忘的 Windows10 专业版本了，记录一下一些常用设置和折腾的小技巧，以作备忘。&lt;/p&gt;
&lt;p&gt;一个来源于网络的简单的教程分享：&lt;strong&gt;微软输入法快速输入时间的方法&lt;/strong&gt; 给各位需要的小伙伴们！&lt;/p&gt;
&lt;h1 id=&#34;1-进入微软输入法&#34;&gt;1. 进入微软输入法&lt;a class=&#34;headerlink&#34; href=&#34;#1-进入微软输入法&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;右键电脑右下角的微软输入法，选择“设置”；
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FqQ1fFFR2h7KxNdMCPlCvhH3qJTj.png&#34; /&gt;
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FpyJnEhU9PLSodJyCwtAKcNziVoA.png&#34; /&gt;&lt;/p&gt;
&lt;h1 id=&#34;2-选择词库和自学习&#34;&gt;2. 选择词库和自学习&lt;a class=&#34;headerlink&#34; href=&#34;#2-选择词库和自学习&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FkJu366CxUSVSVMQmTBho0CNtK-o.png&#34; /&gt;&lt;/p&gt;
&lt;h1 id=&#34;3-选择用户定义的短语&#34;&gt;3. 选择用户定义的短语&lt;a class=&#34;headerlink&#34; href=&#34;#3-选择用户定义的短语&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;选择“用户定义的短语”，点击 “添加或编辑自定义短语”。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FiByYZ4n_0aCh76euDri75w4lIqL.png&#34; /&gt;&lt;/p&gt;
&lt;h1 id=&#34;4-选择添加&#34;&gt;4. 选择添加&lt;a class=&#34;headerlink&#34; href=&#34;#4-选择添加&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fq62cRR-HLrNVX5vKhroaR2j1SBT.png&#34; /&gt;&lt;/p&gt;
&lt;h1 id=&#34;5-输入短语和自定义的输入出&#34;&gt;5. 输入短语和自定义的输入出&lt;a class=&#34;headerlink&#34; href=&#34;#5-输入短语和自定义的输入出&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;如下是 sj 的快速输入，把下面贴到短语里面，然后选择“添加”即可。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;// sj的
%yyyy%-%MM%-%dd% %HH%:%mm%:%ss%

//rq的
%yyyy%年%MM%月%dd%日 %HH%:%mm%:%ss%
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;然后 你就可以看到如下界面：
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FpJ_iN-ryFNf_xkS7dFyL-3xft3U.png&#34; /&gt;
接下来，小伙伴们再去实验一下 sj 和 rq 吧！&lt;/p&gt;
&lt;h1 id=&#34;参考资料&#34;&gt;参考资料&lt;a class=&#34;headerlink&#34; href=&#34;#参考资料&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.csdn.net/weixin_43949535/article/details/110315757&#34;&gt;https://blog.csdn.net/weixin_43949535/article/details/110315757&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/Windows/2022-02-15-pwh0lg/</link>
      <pubDate>Tue, 15 Feb 2022 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/Windows/2022-02-15-pwh0lg/</guid>
      
    </item>
    
    <item>
      <title>综合 | 我的常用工具和网站</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2022-01-20&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2022-01-20T00:00:00&#39;&gt;2022-01-20&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2022-12-05&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2022-12-05T17:16:43&#39;&gt;2022-12-05&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;很长一段时间没有更新啦（主要是说公众号）！&lt;/p&gt;
&lt;p&gt;本期托一次家底，和大家分享几个自己日常工作学习过程中的常用在线工具和网站，希望能有帮助。&lt;/p&gt;
&lt;p&gt;也欢迎小伙伴们分享和安利出你们觉得有用的工具，不要停啊。
&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FrXaLC7b74ZnQAaUoFOi1IKKreLm.png&#34; /&gt;&lt;/p&gt;
&lt;h1 id=&#34;网站与导航&#34;&gt;网站与导航&lt;a class=&#34;headerlink&#34; href=&#34;#网站与导航&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;一个导航走天下。&lt;/p&gt;
&lt;h2 id=&#34;导航&#34;&gt;导航&lt;a class=&#34;headerlink&#34; href=&#34;#导航&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;个人最常用的一些站点都整合到 &lt;a href=&#34;https://nav.bioitee.com/&#34;&gt;https://nav.bioitee.com/&lt;/a&gt; 的网址导航上了，把它设置成浏览器主页，走到哪里都可以一键打开，再也不用担心是否跨浏览器和墙不墙的问题了。&lt;/p&gt;
&lt;p&gt;更重要的是这是一个开源的公益项目，你可以拿来制作自己的网址导航，也可以做与导航无关的网站。你可以直接部署在 GitHub Pages/Gitee Pages/&lt;a href=&#34;https://pages.cloudflare.com/&#34;&gt;Cloudflare Pages&lt;/a&gt;，不用担心是否需要主机的问题。&lt;/p&gt;
&lt;h2 id=&#34;浏览器&#34;&gt;浏览器&lt;a class=&#34;headerlink&#34; href=&#34;#浏览器&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;主力浏览器还是 Chrome，备用 Edge+Firefox。&lt;/p&gt;
&lt;h1 id=&#34;文档与知识管理&#34;&gt;文档与知识管理&lt;a class=&#34;headerlink&#34; href=&#34;#文档与知识管理&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;文档也好，笔记也罢，目前我的主力是语雀，没有之一。&lt;/p&gt;
&lt;h2 id=&#34;语雀&#34;&gt;语雀&lt;a class=&#34;headerlink&#34; href=&#34;#语雀&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;写博客、记录文字是一个好的习惯。在《&lt;a href=&#34;https://www.yuque.com/shenweiyan/mind/focus-on-writing?view=doc_embed&#34;&gt;只要能坚持下来就是好博客&lt;/a&gt;》记录了这些年依赖折腾过的笔记和博客软件。现在语雀成了我的主力，加上语雀天使的福利（10 年会员），我的语雀会员的已经续费到了 2034 年！
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FlNR6eniXbZzcLBFAugJNZy6xWLi.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;生活的，工作的，技术的，娱乐的，还有一些非公开的，都放在语雀了。语雀挺好，虽然有些细节的地方还需要继续打磨，但正如玉伯说的：面向星辰大海，语雀虽慢必至。
&lt;img alt=&#34;48ef8775db9f83f75afd77255a6bfb9.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fr5WSs_DUnydzJ-0O6rcLnxU_Sd8.jpeg&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;公众号&#34;&gt;公众号&lt;a class=&#34;headerlink&#34; href=&#34;#公众号&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;最近的公众号更新的没有以前那么频繁了。公众号作为一个相对封闭的内容平台，更多承载的是对外展示的内容，我个人的习惯一向都是在语雀完成原文，再通过 &lt;a href=&#34;https://mdx.bioitee.com/&#34;&gt;Md2X Editor&lt;/a&gt; 发布到公众号。
&lt;img alt=&#34;aefa08e75f549171455ce06b8c543ab.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FkQP5VvG6G19e2EPp0BijdM6D5sy.jpeg&#34; /&gt;&lt;/p&gt;
&lt;p&gt;发布的文章由于时限性和公众号的局限性，偶尔需要内容更新调整，或者勘误，这些都是在语雀完成。&lt;/p&gt;
&lt;p&gt;而且，对于公众号写文章，强烈推荐读一下这篇文章《&lt;a href=&#34;https://www.yuque.com/shenweiyan/articles/qw325a?view=doc_embed&#34;&gt;为什么我不在微信公众号上写文章&lt;/a&gt;》！&lt;/p&gt;
&lt;h2 id=&#34;博客&#34;&gt;博客&lt;a class=&#34;headerlink&#34; href=&#34;#博客&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;博客对我的作用，现在就像一张对外展示的名片 —— 内容很少更新了，但它就在那里，你可以通过它认识我，了解我，仅此而已。&lt;/p&gt;
&lt;p&gt;对于博客的托管，我主要用 &lt;a href=&#34;https://webify.cloudbase.net/&#34;&gt;云开发 Webify&lt;/a&gt;、&lt;a href=&#34;https://pages.cloudflare.com/&#34;&gt;Cloudflare Pages&lt;/a&gt;，以及 GitHub Pages，所有代码都托管在 GitHub，然后通过 &lt;a href=&#34;https://github.com/actions&#34;&gt;GitHub Action&lt;/a&gt;s 进行自动同步（包括同步到 Gitee/CODING）和自动化部署。&lt;/p&gt;
&lt;h1 id=&#34;邮件与沟通&#34;&gt;邮件与沟通&lt;a class=&#34;headerlink&#34; href=&#34;#邮件与沟通&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id=&#34;qq-邮箱&#34;&gt;QQ 邮箱&lt;a class=&#34;headerlink&#34; href=&#34;#qq-邮箱&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;主力邮箱用的是 QQ 的 foxmail 别名邮箱，把 gmail/outlook/aliyun/163 ...... 这些的邮件都统一转发到了 QQ，网页端也好移动端也罢，方便省事。QQ 邮箱的日历、记事本、文件中转站都是我的最爱。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FuljSftZ-RZ-lmYx2BiZzW9dEu95.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;微信&#34;&gt;微信&lt;a class=&#34;headerlink&#34; href=&#34;#微信&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;即时通讯，用的比较多的还是微信吧！QQ 偶尔还会登陆，只是频率少了很多。&lt;/p&gt;
&lt;h1 id=&#34;代码与编辑器&#34;&gt;代码与编辑器&lt;a class=&#34;headerlink&#34; href=&#34;#代码与编辑器&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;编辑，托管，操作。&lt;/p&gt;
&lt;h2 id=&#34;编辑&#34;&gt;编辑&lt;a class=&#34;headerlink&#34; href=&#34;#编辑&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;主力还是 Windows，本地的代码编辑主力当然是 Visual Studio Code，强大易用。
&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FoqS7w6P3eN0CA1XLzllv65qvMy9.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;终端&#34;&gt;终端&lt;a class=&#34;headerlink&#34; href=&#34;#终端&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;尝试过 Putty/XShell/Tabby/SecureCRT，最终还是选择了 MobaXterm，不为别的，一个软件就包含了全部的功能，而且习惯了。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FhQZiSfIO9VUF-pRc4FJ47Jcc68w.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;托管&#34;&gt;托管&lt;a class=&#34;headerlink&#34; href=&#34;#托管&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;目前还是选择 GitHub 吧！&lt;/p&gt;
&lt;p&gt;国内虽然不少人都在使用 Gitee，但 Gitee 时不时恶心你一下（前不久就无缘无故把我的 oschina 的账号封了，而且要加 QQ 群去申诉，最后我是直接通过邮件反馈解封了），而且有时候有些资源用起来限制太多，很麻烦。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fk75lv_gxton8XOluyhE6xpiNmhk.png&#34; /&gt;&lt;/p&gt;
&lt;h1 id=&#34;待续&#34;&gt;待续&lt;a class=&#34;headerlink&#34; href=&#34;#待续&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;先啰嗦这么多吧，后面遇到好玩的、有用的也会持续分享，也欢迎小伙伴们分享和安利出你们觉得有用的工具。&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/Windows/2022-01-20-my-tools/</link>
      <pubDate>Thu, 20 Jan 2022 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/Windows/2022-01-20-my-tools/</guid>
      
    </item>
    
    <item>
      <title>终端 | Tabby 使用笔记</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2022-01-13&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2022-01-13T00:00:00&#39;&gt;2022-01-13&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2022-04-22&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2022-04-22T10:19:03&#39;&gt;2022-04-22&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;尝试了一下 Tabby 终端（官网：&lt;a href=&#34;https://github.com/Eugeny/tabby&#34;&gt;https://github.com/Eugeny/tabby&lt;/a&gt;），虽然是开源的，速度和颜值都不错。Windows 7 下的体验目前感觉还不太好。
&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fto5o-5ea0sNMlW_75VgGJCv2AcJ.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;记录一下遇到的问题。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Win 7 下安装 &lt;a href=&#34;https://github.com/Eugeny/tabby/releases/download/v1.0.169/tabby-1.0.169-setup.exe&#34;&gt;tabby-1.0.169-setup.exe&lt;/a&gt; 和 &lt;a href=&#34;https://github.com/Eugeny/tabby/releases/download/v1.0.169/tabby-1.0.169-portable.zip&#34;&gt;tabby-1.0.169-portable.zip&lt;/a&gt; 会闪退；1.0.168 版本正常（&lt;a href=&#34;https://github.com/Eugeny/tabby/issues/5465&#34;&gt;issues/5465&lt;/a&gt;）。值得一提的是这个问题终于在 &lt;a href=&#34;https://github.com/Eugeny/tabby/tree/v1.0.175&#34;&gt;v1.0.175&lt;/a&gt; 中修复了！&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FmA43T6fVfg75SRflniZcLEcCBWS.png&#34; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;SSH 设置的站点，再次连接经常会出现各种错误，连接不上。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;后来个人更换 Win10 系统安装了最新的 &lt;a href=&#34;https://github.com/Eugeny/tabby/tree/v1.0.176&#34;&gt;v1.0.176&lt;/a&gt; 再也没有出现过这个问题。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FklH8YpKs1DxweRSo_nfD8YPWN3D.png&#34; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;配置了 SOCKET 的隧道连接，如果 SSH 终端断开，SOCKET 也会断掉（这一点 MobaXterm/Xshell 体验很好）。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;SFTP 上传下载文件，只能一层一层去点开目录，不能直接粘贴路径，很不方便。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;今天发现可以参考 &lt;a href=&#34;https://github.com/Eugeny/tabby/wiki/Shell-working-directory-reporting&#34;&gt;Shell working directory reporting · Eugeny/tabby Wiki&lt;/a&gt; 实现 SFTP 打开当前目录：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# Bash&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# ~/.bash_profile&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;PS1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PS1&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;\[\e]1337;CurrentDir=&amp;quot;&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;$(pwd)\a\]&amp;#39;&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# ZSH&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# ~/.zshrc&lt;/span&gt;
precmd&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-n&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;\x1b]1337;CurrentDir=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;pwd&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;\x07&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;终端记录太多，top 命令会导致没法上下滚动查看之前的终端记录。&lt;/li&gt;
&lt;/ul&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/Windows/2022-01-13-mxrwo4/</link>
      <pubDate>Thu, 13 Jan 2022 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/Windows/2022-01-13-mxrwo4/</guid>
      
    </item>
    
    <item>
      <title>生物科学数据分析和数据管理本体论</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-12-16&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-12-16T00:00:00&#39;&gt;2021-12-16&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2022-05-13&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2022-05-13T09:50:34&#39;&gt;2022-05-13&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;说到本体论，生信的同学估计第一个想到的就是基因本体论 ( Gene Ontology, GO ) 了，而基因本体论其实也是开放生物医学系统注释（Open Biomedical Ontologies (OBO)）下的一个分类项目。今天来说另外一个生物科学数据分析和数据管理本体论——&lt;a href=&#34;https://bioportal.bioontology.org/ontologies/EDAM&#34;&gt;EDAM - Bioscientific data analysis ontology&lt;/a&gt;。&lt;/p&gt;
&lt;h1 id=&#34;背景知识&#34;&gt;背景知识&lt;a class=&#34;headerlink&#34; href=&#34;#背景知识&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;以下背景知识主要摘录于隔壁老湿在简书的《&lt;a href=&#34;https://www.jianshu.com/p/b4d8922c9c42&#34;&gt;学习笔记：本体论与生物医学&lt;/a&gt;》一文。&lt;/p&gt;
&lt;h2 id=&#34;本体论&#34;&gt;本体论&lt;a class=&#34;headerlink&#34; href=&#34;#本体论&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;本体论（Ontology）是个哲学的概念，作为一门学问起源于对万物本源的追问，最早这个词在 17 世纪诞生，从哲学意义上，本体论关注的是“存在”，即世界在本质上有什么样的东西存在，或者世界存在哪些类别的实体。&lt;/p&gt;
&lt;p&gt;作者：隔壁老湿，链接：&lt;a href=&#34;https://www.jianshu.com/p/b4d8922c9c42&#34;&gt;https://www.jianshu.com/p/b4d8922c9c42&lt;/a&gt;，来源：简书&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;本体论与信息科学&#34;&gt;本体论与信息科学&lt;a class=&#34;headerlink&#34; href=&#34;#本体论与信息科学&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;在人工智能领域，经历了 60 年代通用问题求解方法研究的困境，学者们开始研究通过专门领域的知识表达来支持自动推理，以 Dendral 为代表的知识库系统的成功确立了知识在解决人工智能问题方面的重要地位。为了减少构建知识库的代价，避免每次从头开始，有必要考虑知识的复用问题，通过复用，系统开发者可以在已有知识基础上更加专注于特定领域的知识构建，且新系统可以利用复用知识与现存其他系统进行交互。这样，描述性的知识、问题解决方法及推理服务都可以在系统中实现共享，从而可以方便的构建更大，更好的知识库。还为了解决数据库集成中专门化和不一致特征导致的实际问题。解决这些问题都需要对某个领域进行通用概念上的描述，就必须回答这样的问题：对于某个领域，本质上有些什么样的对象、过程、属性和关系？什么是一项事务、一个人及一个组织？它们之间的相互依赖关系如何？这就是本体论研究的内容。&lt;/p&gt;
&lt;p&gt;AI 逻辑学家在 1980 年提出：以逻辑概念为基础的智能系统必须列出所有存在的事物，并构建一个本体描述我们的世界。&lt;/p&gt;
&lt;p&gt;1993 年，斯坦福大学知识系统实验室的 Gruber 给出了第一个在信息科学领域广泛接受的 Ontology 定义： an ontology is an explicit specification of a conceptualization，概念化是从特定目的的出发对所表达的世界所进行的一种抽象的、简化的观察。本体论是对某一概念化所做的一种显式的解释说明。本体论是一个逻辑理论，用来说明一个正规（formal）词汇表的预定含义。因此本体是语言相关的，而概念化则是语言无关的，认清这一点对本体集成、融合和转换都非常重要。另外在上述定义中，概念化是比本体论（仅限于信息科学中）更为广泛的概念，前者更接近领域的事实和哲学上的本体论。&lt;/p&gt;
&lt;p&gt;由于 Web 技术为全球信息共享提供了便捷手段，以共享为特征的本体论与 Web 技术结合是必然趋势。在此背景下，基于 Web 标准的本体描述语言成为本体论研究和运用的热点。在标准方面，由 W3C 主持制订的 RDF 和 RDF Schema 是建立在 XML 语法上，以语义网为理论基础，对信息资源进行语义描述的的语言规范，RDF 采用资源（Resource）、属性（Properties）、和声明（Statement）等三元组来描述事物。RDF schema 则做了进一步扩展。因此，RDF 成为一个能对本体进行初步描述的标准语言。
作者：隔壁老湿，链接：&lt;a href=&#34;https://www.jianshu.com/p/b4d8922c9c42&#34;&gt;https://www.jianshu.com/p/b4d8922c9c42&lt;/a&gt;，来源：简书&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;本体论与语义-web&#34;&gt;本体论与语义 WEB&lt;a class=&#34;headerlink&#34; href=&#34;#本体论与语义-web&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;本体论在 WEP 上的应用导致了语义 WEP 的诞生，其目的是解决 Web 上信息共享时的语义问题，语义 WEP 被看做是当前本体论从学术研究走向实际应用的最重要的构想和研究计划。&lt;/p&gt;
&lt;p&gt;从技术上讲，语义 Web 要提供足够而又合适的语义描述机制，然而，从整个应用构想来看，语义 Web 要实现的是信息在知识级的共享和语义上的互操作性，这需要不同系统间有一个语义上的“共同理解”才行。于是，本体论自然地成为指导语义 Web 发展的理论基础。
作者：隔壁老湿，链接：&lt;a href=&#34;https://www.jianshu.com/p/b4d8922c9c42&#34;&gt;https://www.jianshu.com/p/b4d8922c9c42&lt;/a&gt;，来源：简书&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;本体论与生物医学&#34;&gt;本体论与生物医学&lt;a class=&#34;headerlink&#34; href=&#34;#本体论与生物医学&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;复杂的生物学知识常常是以一种相互关联且有层级（hierarchical）的方式存在，需要有某种途径和分子数据（例如测序产生的数据）进行整合，需要的领域很多，比如怎样在解剖，信号传导途径，和表型之间的知识和数据建立联系。“生物本体论”（Bio-ontologies）的方法是解决这个问题的一种方式。用本体论的方法来规范特定生物领域的知识，用基于特定规则的概念来来界定和描述概念之间的关系，基于本体论“结构化”后的知识就能和分子数据建立联系。以“肱”这个概念为例，来解释本体论就是，需要一系列“声明”（assertions）来定义“肱”的内涵和外延，比如它是手臂的一部分，含成骨细胞，有肌肉的粘附点，可以是骨头等。在生物本体论的定义里，它不仅仅被定义成一系列关系的集合，它也有一个唯一的识别代码（比如 GO:0019505)。&lt;/p&gt;
&lt;p&gt;以生物本体论领域应用最广的 GO（基因本体论，Gene Ontology）为例，目前它已经积累了 16500 个概念，GO 连接了 12000 个基因来自 20 种模式生物，包含动物，植物，真菌，细菌和病毒，每个基因已经用唯一的 GOID 标记。就每一个基因而言，会对其功能（function）、参与的生物过程（biological process）和细胞定位（celluar localization）进行注释。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://obi-ontology.org/&#34;&gt;OBI&lt;/a&gt;（生物医学研究本体 Ontology for biomedical investigations）是本体论在生物医学研究的又一个例子。这是一个生物医学领域本体论学者自发形成的组织，其宗旨是构建和描述生命科学和临床研究相关的本体（An integrated ontology for the description of life-science and clinical investigations）。它涉及用本体论的方法对研究设计、方案、设备、研究数据、数据分析方法等进行注释。它源于功能基因组研究本体组织（FuGO），它们之间涉及的共同 Term 是共享且一致的。
作者：隔壁老湿，链接：&lt;a href=&#34;https://www.jianshu.com/p/b4d8922c9c42&#34;&gt;https://www.jianshu.com/p/b4d8922c9c42&lt;/a&gt;，来源：简书&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id=&#34;edam&#34;&gt;EDAM&lt;a class=&#34;headerlink&#34; href=&#34;#edam&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;EDAM 是生物医学领域研究除 GO、OBI 以外的又一个例子，个人最开始是从 Galaxy Project 了解得到，EDAM 在 Galaxy 项目中主要用于解决海量生物医学工具在 Galaxy 平台面板中分类不统一，用户难以查找的难题而被纳入使用。最早在 Galaxy Release 21.09 版本中上线（&lt;a href=&#34;https://www.yuque.com/shenweiyan/biox/release-21.09?view=doc_embed&#34;&gt;Galaxy Release (v 21.09)，新的工具面板视图&lt;/a&gt;）。    &lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;galaxy-edam.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fv6PvOlE9Mfam6G836k_f-0v-yfc.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;简介&#34;&gt;简介&lt;a class=&#34;headerlink&#34; href=&#34;#简介&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;EDAM - Ontology of bioscientific data analysis and data management，是一个全面的本体论，包含了在生物科学数据分析和数据管理(包括计算生物学、生物信息学和生物图像信息学)中广泛存在的既定的、熟悉的概念。EDAM 包括与生命科学中的数据分析和数据管理相关的主题（topics）、操作（operations）、数据类型（types of data）和数据标识符（data identifiers）以及数据格式（data formats）。EDAM 提供了一组包含首选术语和同义词、相关术语、定义和其他信息的概念，组织成一个简单直观的层次结构，以方便使用（见下图）。  &lt;br /&gt;
&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FocvwtruP49TGXYE3hvJOQ8AzVt5.png&#34; /&gt;
&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FnD1uGI1VLNhgjvfSlq0hPukz02k.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;biotools&#34;&gt;Bio.Tools&lt;a class=&#34;headerlink&#34; href=&#34;#biotools&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;EDAM 目前包含了一下几个子项目，Galaxy Project 的工具面板正好是使用了 &lt;a href=&#34;https://bioportal.bioontology.org/projects/Bio.Tools&#34;&gt;Bio.Tools&lt;/a&gt; 这一本体库。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://bioportal.bioontology.org/projects/Bio.Tools&#34;&gt;Bio.Tools&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://bioportal.bioontology.org/projects/BioSimulations&#34;&gt;BioSimulations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://bioportal.bioontology.org/projects/BioSimulators&#34;&gt;BioSimulators&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://bioportal.bioontology.org/projects/BioXSD&#34;&gt;BioXSD&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://bioportal.bioontology.org/projects/CEDAR-FFF&#34;&gt;CEDAR FAIR Funder Form&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://bioportal.bioontology.org/projects/CWL&#34;&gt;Common Workflow Language&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://bioportal.bioontology.org/projects/IBC&#34;&gt;omputational Biology Institute of Montpellier&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://bioportal.bioontology.org/projects/EMBOSS&#34;&gt;EMBOSS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://bioportal.bioontology.org/projects/eSysbio&#34;&gt;eSysbio&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://bioportal.bioontology.org/projects/runBioSimulations&#34;&gt;runBioSimulations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://bioportal.bioontology.org/projects/SEQwiki&#34;&gt;SEQwiki&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Bio.Tools 是一个致力于提供软件和数据库的全面登记册，以便来自生物和生物医学科学领域的研究人员寻找、理解、利用和引用他们日常工作所需的资源（software and databases）的服务。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Everything from simple command-line tools and online services, through to databases and complex, multi-functional analysis workflows is included. Resources are described in a rigorous semantics and syntax, providing end-users with the convenience of concise, consistent and therefore comparable information.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Each bio.tools entry is assigned a human-readable, unique identifier based on the resource name, e.g. &lt;a href=&#34;https://bio.tools/signalp&#34;&gt;biotools:signalp&lt;/a&gt;. These identifiers provide a persistent reference to our &amp;ldquo;Tool Cards&amp;rdquo; of essential information, as well as a means to trace resources and integrate bio.tools data with other resources.&lt;/p&gt;
&lt;p&gt;每个 bio.tools 条目都会根据资源名称分配一个人类可读的唯一标识符，例如 &lt;a href=&#34;https://bio.tools/signalp&#34;&gt;biotools: signalp&lt;/a&gt;（或者 &lt;a href=&#34;https://bio.tools/samtools&#34;&gt;biotools: ssamtools&lt;/a&gt;）。这些标识符提供了对基本信息的“工具卡”的持久引用，以及跟踪资源并将 bio.tools 数据与其他资源集成的手段。  &lt;br /&gt;
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FiL0wmF9y1fCbNfxg1rT5Db25LZz.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;All the bio.tools data and technical components are available under open license and we warmly welcome you to &lt;a href=&#34;https://biotools.readthedocs.io/en/latest/what_is_biotools.html#getting-involved-a-quick-start-guide&#34;&gt;get involved&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;所有的生物工具数据和技术组件都是开放许可的，此外，Bio.Tools 是由 ELIXIR 通过 ELIXIR-exgelerate 补助金支持的，该补助金由欧盟的 European Union Horizon 2020 项目根据补助金协议 &lt;a href=&#34;https://cordis.europa.eu/project/rcn/198519_en.html&#34;&gt;676559&lt;/a&gt; 资助。&lt;/p&gt;
&lt;h2 id=&#34;总结&#34;&gt;总结&lt;a class=&#34;headerlink&#34; href=&#34;#总结&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;简单总结一下，目前对 DEAM 了解不多，Bio.Tools 也只还在探索中，但个人的感觉这其实就是一个生物医学软件与数据库的标准化数据库，把那些杂乱无章的软件统计分类管理，结构化也好层次化也好，最起码能一定程度降低对海量软件和数据库的搜索成本，可以有助于更容易地找到所需的工具。&lt;/p&gt;
&lt;p&gt;Galaxy Project 是一个相当活跃的生物医学开源项目，它的一些标准一些思想是值得借鉴的，项目中对于最新技术的考量和接纳整合，让它从一个生物领域的项目不断扩展到其他领域，如农业、制药。随着开源技术的兴起，希望能遇到更多对 Galaxy 也感兴趣的人，一起交流分享。&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E7%94%9F%E7%89%A9%E4%BF%A1%E6%81%AF/%E6%9D%82%E9%A1%B9/2021-12-16-edam/</link>
      <pubDate>Thu, 16 Dec 2021 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E7%94%9F%E7%89%A9%E4%BF%A1%E6%81%AF/%E6%9D%82%E9%A1%B9/2021-12-16-edam/</guid>
      
    </item>
    
    <item>
      <title>GitHub 代码实时同步至国内 GIT 站点</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-12-10&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-12-10T00:00:00&#39;&gt;2021-12-10&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2024-01-15&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2024-01-15T16:12:07&#39;&gt;2024-01-15&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;GitHub 是一个神奇而强大的社区，它作为全世界最大的代码集中地，在上面，我们可以随意地下载或者参与各种著名开源项目和开源开发框架。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;使用 GitHub 至少有以下几个好处：&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;获取最新最热门最实用的开源组件，有助于开发公司项目；&lt;/li&gt;
&lt;li&gt;获取最流行的技术相关源代码，有助于参考学习借鉴；&lt;/li&gt;
&lt;li&gt;参与感兴趣的开源项目，增强与他人协作开发的能力；&lt;/li&gt;
&lt;li&gt;创建属于自己的开源项目，提升编程能力，打造个人名片。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;但由于一些大家都知道的原因，国内访问 GitHub 有时候会不太稳定，这就可能导致你在安装 GitHub 上的一些软件（或者拉取代码）的时候，由于网络问题而失败。这时候你就想：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;把代码同步一份到 gitee/coding/gitcode 等托管平台，从这些托管平台进行拉取下载；&lt;/li&gt;
&lt;li&gt;把代码同步一份到 gitee，使用 gitee 的网站托管/自动构建功能，实时部署你的站点应用。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;虽然，gitee/coding/gitcode 等平台都提供了从 GitHub 导入项目和强制更新的选项（coding 还提供了可以&lt;strong&gt;通过触发时间来自动同步&lt;/strong&gt;），但都比较繁琐，在这里介绍一种通过 GitHub Actions 的方法是一步实现 GitHub 代码实时同步 gitee/coding/gitcode 等。&lt;/p&gt;
&lt;h2 id=&#34;使用秘钥的方式&#34;&gt;使用秘钥的方式&lt;a class=&#34;headerlink&#34; href=&#34;#使用秘钥的方式&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;本方法主要基于 &lt;a href=&#34;https://github.com/Yikun/hub-mirror-action&#34;&gt;https://github.com/Yikun/hub-mirror-action&lt;/a&gt; 提供的 Actions 实现。&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id=&#34;1-基于-ssh-配置公钥和私钥&#34;&gt;1. 基于 SSH 配置公钥和私钥&lt;a class=&#34;headerlink&#34; href=&#34;#1-基于-ssh-配置公钥和私钥&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;这一步可以参考或网上N多资料，如《&lt;a href=&#34;https://help.gitee.com/enterprise/code-manage/%E6%9D%83%E9%99%90%E4%B8%8E%E8%AE%BE%E7%BD%AE/%E9%83%A8%E7%BD%B2%E5%85%AC%E9%92%A5%E7%AE%A1%E7%90%86/%E7%94%9F%E6%88%90%E6%88%96%E6%B7%BB%E5%8A%A0SSH%E5%85%AC%E9%92%A5&#34;&gt;生成/添加SSH公钥 -Gitee&lt;/a&gt;》。    &lt;br /&gt;
&lt;img alt=&#34;ssh-keygen-ed25519&#34; src=&#34;https://shub.weiyan.tech/kgarden/2024/01/ssh-keygen-ed25519.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;2-将私钥传到-github-仓库&#34;&gt;2. 将私钥传到 GitHub 仓库&lt;a class=&#34;headerlink&#34; href=&#34;#2-将私钥传到-github-仓库&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;通过 &amp;ldquo;&lt;strong&gt;Settings → Secrets and variables → Actions → New repository secret&lt;/strong&gt;&amp;ldquo;，创建一个 &lt;code&gt;GITEE_PRIVATE_KEY&lt;/code&gt; 变量，将私钥(&lt;code&gt;~/.ssh/id_ed25519&lt;/code&gt;)内容拷贝到值区域。   &lt;br /&gt;
&lt;img alt=&#34;GITEE_PRIVATE_KEY&#34; src=&#34;https://shub.weiyan.tech/kgarden/2024/01/gitee_private_key.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;3-将公钥传到-gitee&#34;&gt;3. 将公钥传到 Gitee&lt;a class=&#34;headerlink&#34; href=&#34;#3-将公钥传到-gitee&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;我们只需要把公钥 &lt;code&gt;~/.ssh/id_ed25519.pub&lt;/code&gt; 的内容，粘贴到 Gitee 即可。&lt;/p&gt;
&lt;p&gt;这样一来，就可以实现 GitHub 和 Gitee 之间的通信。而对于不同的公钥配置，Github 可以在&lt;a href=&#34;https://github.com/settings/keys&#34;&gt;这里&lt;/a&gt;配置，Gitee 可以在&lt;a href=&#34;https://gitee.com/profile/sshkeys&#34;&gt;这里&lt;/a&gt;配置，对于 GitHub → Giee 我们只需要配置 Giee 上配置公钥即可。  &lt;br /&gt;
&lt;img alt=&#34;ssh-pub-key&#34; src=&#34;https://shub.weiyan.tech/kgarden/2024/01/ssh-pub-key.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;4-在-gitee-上创建一个私人令牌&#34;&gt;4. 在 Gitee 上创建一个私人令牌&lt;a class=&#34;headerlink&#34; href=&#34;#4-在-gitee-上创建一个私人令牌&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;这个 token 记得保存，因为它只会出现一次。   &lt;br /&gt;
&lt;img alt=&#34;gitee-token&#34; src=&#34;https://shub.weiyan.tech/kgarden/2024/01/gitee-token.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;5-github-目标仓库粘贴-gitee-私人令牌&#34;&gt;5. GitHub 目标仓库粘贴 Gitee 私人令牌&lt;a class=&#34;headerlink&#34; href=&#34;#5-github-目标仓库粘贴-gitee-私人令牌&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;类似第 2 步，我们在想要同步到 Gitee 的 GitHub 源仓库中创建一个 &lt;code&gt;GITEE_TOKEN&lt;/code&gt; 变量，将第 4 步生成的私人令牌作为值粘贴进去。   &lt;br /&gt;
&lt;img alt=&#34;add-gitee-token&#34; src=&#34;https://shub.weiyan.tech/kgarden/2024/01/add-gitee-token.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;6-修改配置文件中的源和目标设置&#34;&gt;6. 修改配置文件中的源和目标设置&lt;a class=&#34;headerlink&#34; href=&#34;#6-修改配置文件中的源和目标设置&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;最后，我们将配置文件中的源和目标设置为你自己的账号即可。
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;src: github/&amp;lt;这里改成自己的GitHub名字&amp;gt;
dst: gitee/&amp;lt;这里改成自己的Gitee名字&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;这样配置就完成了。提交你的修改，GitHub Action 就会开始启动并工作了。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：   &lt;br /&gt;
&lt;a href=&#34;https://github.com/Yikun/hub-mirror-action&#34;&gt;&lt;strong&gt;Hub Mirror Action&lt;/strong&gt;&lt;/a&gt; 默认会同步你个人账号(或者组织) 下的全部仓库，如果你只想同步当前一个仓库，可以参考 &lt;a href=&#34;https://github.com/Yikun/hub-mirror-action?tab=readme-ov-file#%E9%BB%91%E7%99%BD%E5%90%8D%E5%8D%95&#34;&gt;&lt;strong&gt;黑/白名单&lt;/strong&gt;&lt;/a&gt; 和 &lt;a href=&#34;https://github.com/Yikun/hub-mirror-action?tab=readme-ov-file#%E9%9D%99%E6%80%81%E5%90%8D%E5%8D%95%E5%8F%AF%E7%94%A8%E4%BA%8E%E5%8D%95%E4%B8%80%E4%BB%93%E5%BA%93%E5%90%8C%E6%AD%A5&#34;&gt;&lt;strong&gt;静态名单（可用于单一仓库同步）&lt;/strong&gt;&lt;/a&gt; 的配置。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;使用账号密码的方式&#34;&gt;使用账号密码的方式&lt;a class=&#34;headerlink&#34; href=&#34;#使用账号密码的方式&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;这个方法参考的是 &lt;a href=&#34;https://github.com/abersheeran&#34;&gt;@abersheeran&lt;/a&gt; 的 &lt;a href=&#34;https://github.com/abersheeran/index.py/blob/a9ef1e2dca0c975108b942657679ec47908c7bcc/.github/workflows/setup.yml#L55-L82&#34;&gt;push-to-mirror &lt;/a&gt;方法，可以同步到 gitee 以及任何一个支持 git 的平台，其原理很简单，就拉取然后推送。&lt;/p&gt;
&lt;p&gt;从 2024-01 起，发现通过这种方法同步到 gitee，会提示 &lt;code&gt;Connection timed out&lt;/code&gt;，但是同步 GitCode.com 是正常的，目前暂时没找到解决方法。   &lt;br /&gt;
&lt;img alt=&#34;sync-gitee Connection timed out&#34; src=&#34;https://shub.weiyan.tech/kgarden/2024/01/sync-gitee-time-out.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;配置账号密码&#34;&gt;配置账号密码&lt;a class=&#34;headerlink&#34; href=&#34;#配置账号密码&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;首先，在 GitHub 项目的「&lt;strong&gt;Settings&lt;/strong&gt; -&amp;gt; &lt;strong&gt;Secrets&lt;/strong&gt; → &lt;strong&gt;New repository secret&lt;/strong&gt;」路径下配置好你需要同步的 coding 和 gitee 账号密码（命名可以随便，只要求跟下面 &lt;strong&gt;sync.yml&lt;/strong&gt; 的变量名称一致即可）。其中：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;GITEE_USERNAME&lt;/strong&gt; 存放 &lt;strong&gt;Gitee 的账号&lt;/strong&gt;；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GITEE_PASSWORD&lt;/strong&gt; 存放 &lt;strong&gt;Gitee&lt;/strong&gt; &lt;strong&gt;帐号的密码&lt;/strong&gt;；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CODING_USERNAME&lt;/strong&gt; 存放 &lt;strong&gt;Coding 的账号&lt;/strong&gt;；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CODING_PASSWORD&lt;/strong&gt; 存放 &lt;strong&gt;Coding&lt;/strong&gt; &lt;strong&gt;帐号的密码&lt;/strong&gt;；&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FsW8HjkaxCtwI0YVC4DHrFPceXmD.png&#34; /&gt;
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FrllDsG6dnVD9N553JIP4a1GVOZA.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;创建-workflow&#34;&gt;创建 workflow&lt;a class=&#34;headerlink&#34; href=&#34;#创建-workflow&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;在你的 GitHub 项目 &lt;strong&gt;.github/workflows/&lt;/strong&gt; 文件夹下创建一个 &lt;code&gt;.yml&lt;/code&gt; 文件，如 &lt;strong&gt;sync.yml&lt;/strong&gt;，内容如下：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l l-Scalar l-Scalar-Plain&#34;&gt;Sync-To-Gitee-and-Coding&lt;/span&gt;

&lt;span class=&#34;nt&#34;&gt;on&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;push&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;branches&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;p p-Indicator&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l l-Scalar l-Scalar-Plain&#34;&gt;main&lt;/span&gt;

&lt;span class=&#34;nt&#34;&gt;jobs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;push-to-mirror&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;runs-on&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l l-Scalar l-Scalar-Plain&#34;&gt;ubuntu-latest&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;steps&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;p p-Indicator&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l l-Scalar l-Scalar-Plain&#34;&gt;Clone&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;run&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p p-Indicator&#34;&gt;|&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;no&#34;&gt;git init&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;no&#34;&gt;git remote add origin https://github.com/${GITHUB_REPOSITORY}.git&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;no&#34;&gt;git fetch --all&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;no&#34;&gt;for branch in `git branch -a | grep remotes | grep -v HEAD`; do&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;no&#34;&gt;git branch --track ${branch##*/} $branch&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;no&#34;&gt;done&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;GITHUB_REPOSITORY&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l l-Scalar l-Scalar-Plain&#34;&gt;shenweiyan/GitHub-SYNC&lt;/span&gt;

&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;p p-Indicator&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l l-Scalar l-Scalar-Plain&#34;&gt;Push to Coding&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;run&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p p-Indicator&#34;&gt;|&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;no&#34;&gt;remote_repo=&amp;quot;https://${CODING_USERNAME}:${CODING_PASSWORD}@e.coding.net/${CODING_REPOSITORY}.git&amp;quot;&lt;/span&gt;

&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;no&#34;&gt;git remote add coding &amp;quot;${remote_repo}&amp;quot;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;no&#34;&gt;git show-ref # useful for debugging&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;no&#34;&gt;git branch --verbose&lt;/span&gt;

&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;no&#34;&gt;# publish all&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;no&#34;&gt;git push --all --force coding&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;no&#34;&gt;git push --tags --force coding&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;CODING_REPOSITORY&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l l-Scalar l-Scalar-Plain&#34;&gt;shenweiyan/devs/GitHub-SYNC&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;CODING_USERNAME&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l l-Scalar l-Scalar-Plain&#34;&gt;${{ secrets.CODING_USERNAME }}&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;CODING_PASSWORD&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l l-Scalar l-Scalar-Plain&#34;&gt;${{ secrets.CODING_PASSWORD }}&lt;/span&gt;

&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;p p-Indicator&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l l-Scalar l-Scalar-Plain&#34;&gt;Push to Gitee&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;run&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p p-Indicator&#34;&gt;|&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;no&#34;&gt;remote_repo=&amp;quot;https://${GITEE_USERNAME}:${GITEE_PASSWORD}@gitee.com/${GITEE_REPOSITORY}.git&amp;quot;&lt;/span&gt;

&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;no&#34;&gt;git remote add gitee &amp;quot;${remote_repo}&amp;quot;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;no&#34;&gt;git show-ref # useful for debugging&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;no&#34;&gt;git branch --verbose&lt;/span&gt;

&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;no&#34;&gt;# publish all&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;no&#34;&gt;git push --all --force gitee&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;no&#34;&gt;git push --tags --force gitee&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;GITEE_REPOSITORY&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l l-Scalar l-Scalar-Plain&#34;&gt;shenweiyan/GitHub-SYNC&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;GITEE_USERNAME&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l l-Scalar l-Scalar-Plain&#34;&gt;${{ secrets.GITEE_USERNAME }}&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;GITEE_PASSWORD&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l l-Scalar l-Scalar-Plain&#34;&gt;${{ secrets.GITEE_PASSWORD }}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;执行同步&#34;&gt;执行同步&lt;a class=&#34;headerlink&#34; href=&#34;#执行同步&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;最后，修改代码（如修改 README），提交，成功触发同步！
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FnPI_f183sRTBRgB6Gh5bVbzJE7b.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;同步 workflows 执行成功！&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fn7B-rFuN_RYsSuuraS0H7YpBx-f.png&#34; title=&#34;同步 workflows 执行成功！&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;GitHub 代码同步 Coding 成功！&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FqGnfZCiqR_Jd1EiWghqmztpcfe2.png&#34; title=&#34;GitHub 代码同步 Coding 成功！&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;GitHub 代码同步 Gitee 成功！&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FlfUfgGFbwojp08rLox4EwsFVP4d.png&#34; title=&#34;GitHub 代码同步 Gitee 成功！&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;总结&#34;&gt;总结&lt;a class=&#34;headerlink&#34; href=&#34;#总结&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;文章中参考前人的一些成果成功把 GitHub 的代码同步到了 gitee 和 coding，可能还有可以改进的地方，但不管怎么说，基本满足了个人的需求。&lt;/p&gt;
&lt;p&gt;最后，GitHub 是一个非常棒的平台，希望大家拥抱开源，多多分享。&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E7%89%88%E6%9C%AC%E6%8E%A7%E5%88%B6/2021-12-10-github-sync/</link>
      <pubDate>Fri, 10 Dec 2021 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E7%89%88%E6%9C%AC%E6%8E%A7%E5%88%B6/2021-12-10-github-sync/</guid>
      
    </item>
    
    <item>
      <title>Hugo 不解析 markdown 中的 html 标签</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-12-09&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-12-09T00:00:00&#39;&gt;2021-12-09&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2023-08-22&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2023-08-22T11:07:59&#39;&gt;2023-08-22&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;在 Hugo 中的 markdown 语法中插入 html 时候发现插入的 html 无法解析，但是标准 Markdown 语法仍然有效。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;无效：&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;href&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;baidu.com&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;百度&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;有效：&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;[Link to Google](https://www.google.com)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;最佳答案&#34;&gt;最佳答案&lt;a class=&#34;headerlink&#34; href=&#34;#最佳答案&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Hugo &amp;gt;=0.60 现在使用 Goldmark (见 &lt;a href=&#34;https://gohugo.io/news/0.60.0-relnotes/&#34;&gt;https://gohugo.io/news/0.60.0-relnotes/&lt;/a&gt;)，所以为了在 Markdown 文件中使用 html 标签，你应该在您的 config.toml 文件中添加：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;[markup.goldmark.renderer]
unsafe = true
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;关于 R - Blogdown 和 Hugo 不解析 markdown 中的 html 标签，在 Stack Overflow 上找到一个类似的问题： &lt;a href=&#34;https://stackoverflow.com/questions/60329235/&#34;&gt;https://stackoverflow.com/questions/60329235/&lt;/a&gt;
&lt;img alt=&#34;image&#34; src=&#34;https://github.com/shenweiyan/Knowledge-Garden/assets/26101369/f82b1742-107a-4974-ba31-95b0535e3b91&#34; /&gt;&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E9%9D%99%E6%80%81%E7%BD%91%E7%AB%99/2021-12-09-mle18r/</link>
      <pubDate>Thu, 09 Dec 2021 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E9%9D%99%E6%80%81%E7%BD%91%E7%AB%99/2021-12-09-mle18r/</guid>
      
    </item>
    
    <item>
      <title>Python Excel 操作 | Openpyxl 模块笔记</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-12-07&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-12-07T00:00:00&#39;&gt;2021-12-07&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-12-07&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-12-07T16:00:41&#39;&gt;2021-12-07&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;xlsx 是 Microsoft Excel 使用的开放 XML 电子表格文件格式的文件扩展名。xlsm 文件支持宏。xlsx 是专有的二进制格式，而 xlsx 是基于 Office Open XML 格式的。&lt;/p&gt;
&lt;h1 id=&#34;excel-文件处理&#34;&gt;Excel 文件处理&lt;a class=&#34;headerlink&#34; href=&#34;#excel-文件处理&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;h3 id=&#34;1-打开-excel-文件&#34;&gt;1. 打开 excel 文件&lt;a class=&#34;headerlink&#34; href=&#34;#1-打开-excel-文件&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;openpyxl&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;book&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;openpyxl.load_workbook&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;sample.xlsx&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;2-获取并操作-sheet-工作表&#34;&gt;2. 获取并操作  sheet 工作表&lt;a class=&#34;headerlink&#34; href=&#34;#2-获取并操作-sheet-工作表&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;#获取所有工作簿名称&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;sheets&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;book.sheetnames&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 返回 book 中所有工作表的名字, [&amp;#39;Sheet1&amp;#39;, &amp;#39;Sheet2&amp;#39;]&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# 以下三个函数都会返回一个 Worksheet 对象&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;book.active&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;             &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 获取 activate sheet 工作簿&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;book&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;sheet1&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 通过名称获取，如读取 sheet1 表单&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 获取所有行的数据&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;rows_g&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rows&lt;/span&gt;                 &lt;span class=&#34;c1&#34;&gt;# generator object&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;rows_l&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;list&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rows&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;       &lt;span class=&#34;c1&#34;&gt;# 把 generator 转换成 list&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;row0&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;rows_l&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;                        &lt;span class=&#34;c1&#34;&gt;# generator object&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;row0&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;list&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rows_l&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;          &lt;span class=&#34;c1&#34;&gt;# generator object&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# 打印第一行的所有列数据&lt;/span&gt;
&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cell&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;rows_l&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt;
    &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cell&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;遍历所有行&#34;&gt;遍历所有行&lt;a class=&#34;headerlink&#34; href=&#34;#遍历所有行&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;openpyxl&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;book&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;openpyxl.load_workbook&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;sample.xlsx&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;book.active&lt;/span&gt;

&lt;span class=&#34;kr&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rows&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;list&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sheet.rows&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cell&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;list&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rows&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cell_value&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cell.value&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cell_value&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h1 id=&#34;参考资料&#34;&gt;参考资料&lt;a class=&#34;headerlink&#34; href=&#34;#参考资料&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://openpyxl.readthedocs.io/en/stable/index.html&#34;&gt;openpyxl - A Python library to read/write Excel 2010 xlsx/xlsm files&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://geek-docs.com/python/python-tutorial/python-openpyxl.html&#34;&gt;Openpyxl 教程 | 极客教程&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <link>https://shenwy.com/yuque/%E7%BC%96%E7%A8%8B%E6%8A%80%E6%9C%AF/Python/2021-12-07-plf2lq/</link>
      <pubDate>Tue, 07 Dec 2021 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E7%BC%96%E7%A8%8B%E6%8A%80%E6%9C%AF/Python/2021-12-07-plf2lq/</guid>
      
    </item>
    
    <item>
      <title>磁盘管理</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-11-26&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-11-26T00:00:00&#39;&gt;2021-11-26&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-11-26&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-11-26T10:34:53&#39;&gt;2021-11-26&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id=&#34;开机自动挂载硬盘&#34;&gt;开机自动挂载硬盘&lt;a class=&#34;headerlink&#34; href=&#34;#开机自动挂载硬盘&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&#34;1-查看磁盘分区的-uuid&#34;&gt;1. 查看磁盘分区的 UUID&lt;a class=&#34;headerlink&#34; href=&#34;#1-查看磁盘分区的-uuid&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sudo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;blkid
/dev/sda1:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;UUID&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;8048997a-16c9-447b-a209-82e4d380326e&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;TYPE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;ext4&amp;quot;&lt;/span&gt;
/dev/sda5:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;UUID&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;0c5f073a-ad3f-414f-85c2-4af83f6a437f&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;TYPE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;swap&amp;quot;&lt;/span&gt;
/dev/sdb1:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;UUID&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;11263962-9715-473f-9421-0b604e895aaa&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;TYPE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;ext4&amp;quot;&lt;/span&gt;
/dev/sr0:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;LABEL&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;Join Me&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;TYPE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;iso9660&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;2-配置开机自动挂载&#34;&gt;2. 配置开机自动挂载&lt;a class=&#34;headerlink&#34; href=&#34;#2-配置开机自动挂载&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;mount 命令重启后会失效，将分区信息写入 /etc/fstab 文件启动自动挂载：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;sudo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;vim&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/etc/fstab
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FnQR9M4uGlenJNokKQ_T0voZltar.png&#34; /&gt;
加入：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;#&amp;lt;file system&amp;gt; &amp;lt;mount point&amp;gt;   &amp;lt;type&amp;gt;  &amp;lt;options&amp;gt;  &amp;lt;dump&amp;gt;  &amp;lt;pass&amp;gt;&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;UUID&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;11263962&lt;/span&gt;-9715-473f-9421-0b604e895aaa&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/data&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ext4&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;defaults&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;具体说明，以挂载 /dev/sdb1 为例：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;file system&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;分区定位，可以给 UUID 或 LABEL，例如：UUID=6E9ADAC29ADA85CD 或 LABEL=software；&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;mount point&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;挂载路径，最终硬盘会被挂载到配置的这个路径下，但是这个路径必须先存在，提前创建好这个路径即可，例如：/data；&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;type&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;硬盘的文件系统类型，相应的有 &lt;strong&gt;ntfs&lt;/strong&gt;，&lt;strong&gt;ext4&lt;/strong&gt;，&lt;strong&gt;fat&lt;/strong&gt;，&lt;strong&gt;vfat&lt;/strong&gt; 等等，这里要根据实际情况设置，同样的也可以通过指令 &lt;strong&gt;blkid&lt;/strong&gt;，查看硬盘的 &lt;strong&gt;TYPE&lt;/strong&gt;；&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;options&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;挂载参数，一般为 defaults；&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;option&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;description&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;defaults&lt;/td&gt;
&lt;td&gt;use default options: rw, suid, dev, exec, auto, nouser, and async.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;noauto&lt;/td&gt;
&lt;td&gt;do not mount when “mount -a” is given (e.g., at boot time)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;user&lt;/td&gt;
&lt;td&gt;allow a user to mount&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;owner&lt;/td&gt;
&lt;td&gt;allow device owner to mount&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;comment or x-&lt;/td&gt;
&lt;td&gt;for use by fstab-maintaining programs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;nofail&lt;/td&gt;
&lt;td&gt;do not report errors for this device if it does not exist.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;dump&lt;/strong&gt;
  这个参数用来检查文件系统以多快频率进行备份，系统将认为其值为 0，则不需要进行备份；设置成 1 暂时也没有实践过；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;pass&lt;/strong&gt;
  这个参数用来决定在启动时需要被 &lt;strong&gt;fsck&lt;/strong&gt; 扫描的文件系统的顺序，根文件系统 &amp;ldquo;/&amp;rdquo; 对应该字段的值应该为 1，其他的应该逐渐递增，如果设置为 0 则表示不扫描。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;3-重启系统&#34;&gt;3. 重启系统&lt;a class=&#34;headerlink&#34; href=&#34;#3-重启系统&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;修改完 /etc/fstab 文件后，运行：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;sudo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mount&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-a
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;验证配置是否正确，配置不正确可能会导致系统无法正常启动。&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/Debian/2021-11-26-gyhb14/</link>
      <pubDate>Fri, 26 Nov 2021 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/Debian/2021-11-26-gyhb14/</guid>
      
    </item>
    
    <item>
      <title>管理用户和用户组</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-11-26&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-11-26T00:00:00&#39;&gt;2021-11-26&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-11-26&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-11-26T10:30:07&#39;&gt;2021-11-26&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;普通用户无法查找和使用 useradd/groupad，你需要通过下面的命令切换成 root，才能查找和使用 useradd/groupadd。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;sudo - root  # 不能直接 su root 切换
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;su&lt;/strong&gt;：只能切换到管理员用户权限，不使用管理员的登陆脚本和搜索路径。&lt;/li&gt;
&lt;li&gt;s&lt;strong&gt;u -&lt;/strong&gt;：不但能切换到管理员权限，而且使用管理员登陆脚本和搜索路径。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fr7y6J-Cj_JgMAW87D3N2QFD-Y6a.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;没有-home-目录&#34;&gt;没有 home 目录&lt;a class=&#34;headerlink&#34; href=&#34;#没有-home-目录&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;如果我们安装最常规的方法，直接使用 useradd username -g groupname 创建用户，Debian 中默认是没有 /home/username 目录的，以至于在登录时出现报错。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FmAcFO-y-gEkmCoD3kLFTxFpdEBD.png&#34; /&gt;
因此，需要通过下面的方式创建用户。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;# 添加用户，参数-m，自动创建用户的家目录，注意一定要添加 -s /bin/bash，原因下面细说
useradd -m -s /bin/bash your_username -g your_groupname
# 或者
useradd -d /home/your_username -m -s /bin/bash your_username -g your_groupname

# 添加密码
passwd your_username

# 删除用户
userdel your_username
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;无法使用-tab-补全&#34;&gt;无法使用 tab 补全&lt;a class=&#34;headerlink&#34; href=&#34;#无法使用-tab-补全&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;这个问题，与其说有点坑爹。其实是不了解 Ubuntu 和 debian 的 shell 默认安装的是 dash，而不是 bash。参考网络《&lt;a href=&#34;https://www.yangshengliang.com/kaiyuan-shijie/linux-shijie/452.html&#34;&gt;解决 debian 终端命令行无法自动补全 _杨圣亮的技术博客&lt;/a&gt;》的做法：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;安装命令补全：&lt;/li&gt;
&lt;/ol&gt;
&lt;!----&gt;

&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;apt-get install bash-completion
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;在 /etc/profile 里追加：&lt;/li&gt;
&lt;/ol&gt;
&lt;!----&gt;

&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;if [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;刷新 /etc/profile 配置文件，使其生效。&lt;/li&gt;
&lt;/ol&gt;
&lt;!----&gt;

&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;source /etc/profile
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fmgxt3-ojNfOAEgVIpr3LrqL8fdh.png&#34; /&gt;
这是因为 Ubuntu 和 debian 的 shell 默认安装的是 dash，而不是 bash！解决方法如下：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;root@VM-8-4-debian:~#&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;usermod&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--shell&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/bin/bash&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;shenweiyan
root@VM-8-4-debian:~#&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;grep&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;shenweiyan&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/etc/passwd
shenweiyan:x:1001:1001::/home/shenweiyan:/bin/bash
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;正确创建用户&#34;&gt;正确创建用户&lt;a class=&#34;headerlink&#34; href=&#34;#正确创建用户&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;CentOS 和 Debian 使用 useradd 命令的区别，以下面的命令举例：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;useradd&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;shenweiyan
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;这条命令在 Debian 下不会做如下几件事：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;不会创建家目录；&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;默认 shell 是 /bin/sh；&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;而 /bin/sh 默认是软连接到 /bin/dash 解释器 /bin/sh -&amp;gt; dash。&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;如果需要创建这些内容则必须指定参数：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;useradd&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-m&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-s&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/bin/bash&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;shenweiyan
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;用-bash-作为默认-shell&#34;&gt;用 bash 作为默认 shell&lt;a class=&#34;headerlink&#34; href=&#34;#用-bash-作为默认-shell&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Debian 中/bin/sh 是 dash 的链接，如果大家想用 bash 作为默认 shell 的话，可以用以下的办法修改：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# https://unix.stackexchange.com/questions/442510/how-to-use-bash-for-sh-in-ubuntu&lt;/span&gt;
sudo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;dpkg-reconfigure&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;dash
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;然后在弹出来的界面中选择“yes” 来保持使用 dash 作为 /bin/sh 首选；或者选择“no” 把 /bin/sh 切换为 bash！
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fuj2yF_wJe2deQbiKeANFpV3oh87.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;sudo-出现-unable-to-resolve-host&#34;&gt;sudo 出现 unable to resolve host&lt;a class=&#34;headerlink&#34; href=&#34;#sudo-出现-unable-to-resolve-host&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FrgbwzbZts8TwZpsiNNh2UVm29uA.png&#34; /&gt;
/etc/hosts 内容修改成如下：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;m&#34;&gt;121&lt;/span&gt;.23.19.88&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;或者&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;127&lt;/span&gt;.0.0.1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;kvm-bioitee
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
      <link>https://shenwy.com/yuque/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/Debian/2021-11-26-hlgbmo/</link>
      <pubDate>Fri, 26 Nov 2021 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/Debian/2021-11-26-hlgbmo/</guid>
      
    </item>
    
    <item>
      <title>基础配置</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-11-26&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-11-26T00:00:00&#39;&gt;2021-11-26&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2023-07-19&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2023-07-19T15:41:36&#39;&gt;2023-07-19&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id=&#34;hostname&#34;&gt;Hostname&lt;a class=&#34;headerlink&#34; href=&#34;#hostname&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;新的服务器一般自带的 hostname 都是一串无规律的字符串，很难记也不好看（例如我们这个服务器的 r0sasd1bQi ），对于有强迫症的童鞋可以参考下面的方法去修改。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;在 CentOS 7 中，有三种定义的主机名：静态的（static）、瞬态的（transient）、灵活的（pretty）。“静态”主机名也称为内核主机名，是系统在启动时从 /etc/hostname 自动初始化的主机名。“瞬态”主机名是在系统运行时临时分配的主机名，例如，通过 DHCP 或 mDNS 服务器分配。静态主机名和瞬态主机名都遵从作为互联网域名同样的字符限制规则。而另一方面，“灵活”主机名则允许使用自由形式（包括特殊/空白字符）的主机名，以展示给终端用户。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;方法一，通过 &lt;code&gt;hostnamectl&lt;/code&gt;  来修改主机名。修改后需要重启服务器。&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@r0sasd1bQi&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# hostnamectl   #查看一下当前主机名的情况&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;Static&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;hostname:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;r0sasd1bQi
&lt;span class=&#34;w&#34;&gt;         &lt;/span&gt;Icon&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;name:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;computer-vm
&lt;span class=&#34;w&#34;&gt;           &lt;/span&gt;Chassis:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;vm
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;Machine&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ID:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;b6302a1a586547a09aae75efbfa34901
&lt;span class=&#34;w&#34;&gt;           &lt;/span&gt;Boot&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ID:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;f75d72657c524500b47edc250c13c6f2
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;Virtualization:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;kvm
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Operating&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;System:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;CentOS&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Linux&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;7&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;Core&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;CPE&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;OS&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Name:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;cpe:/o:centos:centos:7
&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;Kernel:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Linux&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;.10.0-957.el7.x86_64
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;Architecture:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;x86-64

&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@r0sasd1bQi&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# hostnamectl set-hostname bioitee-server --static&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@r0sasd1bQi&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# hostnamectl status&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;Static&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;hostname:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bioitee-server
&lt;span class=&#34;w&#34;&gt;         &lt;/span&gt;Icon&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;name:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;computer-vm
&lt;span class=&#34;w&#34;&gt;           &lt;/span&gt;Chassis:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;vm
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;Machine&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ID:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;b6302a1a586547a09aae75efbfa34901
&lt;span class=&#34;w&#34;&gt;           &lt;/span&gt;Boot&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ID:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;f75d72657c524500b47edc250c13c6f2
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;Virtualization:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;kvm
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Operating&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;System:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;CentOS&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Linux&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;7&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;Core&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;CPE&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;OS&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Name:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;cpe:/o:centos:centos:7
&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;Kernel:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Linux&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;.10.0-957.el7.x86_64
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;Architecture:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;x86-64

&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@r0sasd1bQi&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# reboot now    # 重启服务器&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;方法二，通过修改文件 &lt;code&gt;/etc/hostname&lt;/code&gt;  来实现主机名的修改。把该文件内容替换成自己想要的主机名重启即可。&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@r0sasd1bQi&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# vim /etc/hostname      # 修改 hostname&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@r0sasd1bQi&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# reboot now                 # 重启服务器&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;————————————————
版权声明：本文为 CSDN 博主「点亮梦想那束光」的原创文章，遵循 CC 4.0 BY-SA 版权协议，转载请附上原文出处链接及本声明。
原文链接：&lt;a href=&#34;https://blog.csdn.net/solaraceboy/java/article/details/78563537&#34;&gt;https://blog.csdn.net/solaraceboy/java/article/details/78563537&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img alt=&#34;hostname.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FlAOVtpFIgQk86W-6qj8BricELTk.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;命令行提示符&#34;&gt;命令行提示符&lt;a class=&#34;headerlink&#34; href=&#34;#命令行提示符&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;bash 中命令行提示符的格式是由 PS1 来控制的。 &lt;code&gt;/etc/bashrc&lt;/code&gt;  中 PS1 的格式定义用于控制全局用户的命令行提示符样式；而针对个人用户的  PS1 设置，位于 &lt;code&gt;~/.bashrc&lt;/code&gt;  中。&lt;/p&gt;
&lt;p&gt;我自己的 PS1 定义：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nv&#34;&gt;PS1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;\033[35;1m\u@\h \[\e[m\]\t \[\033[36;1m\]$(pwd) \n$ \[\e[m\]&amp;#39;&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/data&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;clear&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;bashrc.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Foo_b2Q05LyXas8ullEsgISnlyUx.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;有关于 PS1 的格式介绍如下：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;序列&lt;span class=&#34;w&#34;&gt;                  &lt;/span&gt;说明
&lt;span class=&#34;se&#34;&gt;\a&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;ASCII&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;响铃字符（也可以键入&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\0&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;07&lt;/span&gt;）
&lt;span class=&#34;se&#34;&gt;\d&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;Wed Sep 06&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;格式的日期
&lt;span class=&#34;se&#34;&gt;\e&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;ASCII&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;转义字符（也可以键入&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\0&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;33&lt;/span&gt;）
&lt;span class=&#34;se&#34;&gt;\h&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;主机名的第一部分（如&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;mybox&amp;quot;&lt;/span&gt;）
&lt;span class=&#34;se&#34;&gt;\H&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;主机的全称（如&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;mybox.mydomain.com&amp;quot;&lt;/span&gt;）
&lt;span class=&#34;se&#34;&gt;\j&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;在此&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;shell&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;中通过按&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;^Z&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;挂起的进程数
&lt;span class=&#34;se&#34;&gt;\l&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;此&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;shell&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;的终端设备名（如&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;ttyp4&amp;quot;&lt;/span&gt;）
&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;换行符
&lt;span class=&#34;se&#34;&gt;\r&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;回车符
&lt;span class=&#34;se&#34;&gt;\s&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;shell&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;的名称（如&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;bash&amp;quot;&lt;/span&gt;）
&lt;span class=&#34;se&#34;&gt;\t&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;24&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;小时制时间（如&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;23:01:01&amp;quot;&lt;/span&gt;）
&lt;span class=&#34;se&#34;&gt;\T&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;12&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;小时制时间（如&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;11:01:01&amp;quot;&lt;/span&gt;）
&lt;span class=&#34;se&#34;&gt;\@&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;带有&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;am/pm&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;的&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;12&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;小时制时间
&lt;span class=&#34;se&#34;&gt;\u&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;用户名
&lt;span class=&#34;se&#34;&gt;\v&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;bash&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;的版本（如&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;.04）
&lt;span class=&#34;se&#34;&gt;\V&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;Bash&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;版本（包括补丁级别）
&lt;span class=&#34;se&#34;&gt;\w&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;当前工作目录（如&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;/home/shenweiyan&amp;quot;&lt;/span&gt;）
&lt;span class=&#34;se&#34;&gt;\W&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;当前工作目录的&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;basename&amp;quot;&lt;/span&gt;（如&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;shenweiyan&amp;quot;&lt;/span&gt;）
&lt;span class=&#34;se&#34;&gt;\!&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;当前命令在历史缓冲区中的位置
&lt;span class=&#34;se&#34;&gt;\#&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;命令编号（只要您键入内容，它就会在每次提示时累加）
&lt;span class=&#34;se&#34;&gt;\$&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;如果您不是超级用户&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;root&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;，则插入一个&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;$&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;；如果您是超级用户，则显示一个&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;#&amp;quot;&lt;/span&gt;
&lt;span class=&#34;se&#34;&gt;\x&lt;/span&gt;xx&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;插入一个用三位数&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;xxx（用零代替未使用的数字，如&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;\007&amp;quot;&lt;/span&gt;）表示的&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ASCII&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;字符
&lt;span class=&#34;se&#34;&gt;\\&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;反斜杠
&lt;span class=&#34;se&#34;&gt;\[&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;这个序列应该出现在不移动光标的字符序列（如颜色转义序列）之前。它使&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bash&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;能够正确计算自动换行。
&lt;span class=&#34;se&#34;&gt;\]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;这个序列应该出现在非打印字符序列之后。
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;vim-中启用鼠标复制粘贴&#34;&gt;vim 中启用鼠标复制粘贴&lt;a class=&#34;headerlink&#34; href=&#34;#vim-中启用鼠标复制粘贴&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Debian 10 操作系统中，使用 apt 安装的 vim 默认无法使用鼠标进行复制粘贴，很不方便。因此，介绍一下如何在 Debian 10 中恢复鼠标复制粘贴的功能。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;创建 vimrc.local 文件。&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;touch&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/etc/vim/vimrc.local
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;编辑文件 /etc/vim/vimrc.local 加入下面的行：&lt;/li&gt;
&lt;/ol&gt;
&lt;!----&gt;

&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;source /usr/share/vim/vim81/defaults.vim  #这里根据你 vim 实际的目录填写
let skip_defaults_vim = 1
if has(&amp;#39;mouse&amp;#39;)
    set mouse=r
endif
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;也可以通过 curl 直接下载本人已经编辑好的 vimrc.local 文件。&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# &amp;lt;VERSION&amp;gt; 为非必填项，默认为 latest&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# https://shenweiyan.coding.net/public-artifacts/btscl/debian-ubuntu-config/packages&lt;/span&gt;

$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;curl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-fL&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;https://shenweiyan-generic.pkg.coding.net/btscl/debian-ubuntu-config/vimrc.local?version=latest&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-o&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/etc/vim/vimrc.local
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;这个启用了鼠标的配置文件覆盖了 vim 的配置。这样，我们再使用 vim 的时候就可以使用鼠标来复制粘贴了。&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/Debian/2021-11-26-ytodmy/</link>
      <pubDate>Fri, 26 Nov 2021 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/Debian/2021-11-26-ytodmy/</guid>
      
    </item>
    
    <item>
      <title>GCC 套件</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-11-26&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-11-26T00:00:00&#39;&gt;2021-11-26&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2023-07-19&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2023-07-19T15:43:15&#39;&gt;2023-07-19&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id=&#34;gcc&#34;&gt;GCC&lt;a class=&#34;headerlink&#34; href=&#34;#gcc&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;默认的 Ubuntu 软件源包含了一个软件包组，名称为 &amp;ldquo;&lt;a href=&#34;https://pkgs.org/download/build-essential&#34;&gt;build-essentia&lt;/a&gt;l&amp;rdquo;，它包含了 GNU 编辑器集合，GNU 调试器，和其他编译软件所必需的开发库和工具。&lt;/p&gt;
&lt;p&gt;想要安装开发工具软件包，以 拥有 sudo 权限用户身份或者 root 身份运行下面的命令：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;sudo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;apt&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;update
sudo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;apt&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;build-essential
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;这个命令将会安装一系列软件包，包括 gcc，g++ 和 make。&lt;/p&gt;
&lt;p&gt;你可能还想安装关于如何使用 GNU/Linux 开发的手册。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;sudo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;apt&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;manpages-dev
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;通过运行下面的命令，打印 GCC 版本，来验证 GCC 编译器是否被成功地安装。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;gcc&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--version
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;在 Ubuntu 20.04 软件源中 GCC 的默认可用版本号为 &lt;strong&gt;9.3.0&lt;/strong&gt;：
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FjlSu0YinX1hjb-ziAqopumm07Xl.png&#34; /&gt;
就这些。GCC 已经在你的 Ubuntu 系统上安装好了，你可以开始使用它了。&lt;/p&gt;
&lt;h2 id=&#34;参考资料&#34;&gt;参考资料&lt;a class=&#34;headerlink&#34; href=&#34;#参考资料&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&#34;https://developer.aliyun.com/article/766146&#34;&gt;如何在 Ubuntu 20.04 上安装 GCC (build-essential)&lt;/a&gt; - 阿里云开发者社区&lt;/li&gt;
&lt;/ol&gt;</description>
      <link>https://shenwy.com/yuque/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/Debian/%E8%BD%AF%E4%BB%B6%E5%8C%85%E7%AE%A1%E7%90%86/2021-11-26-imno9x/</link>
      <pubDate>Fri, 26 Nov 2021 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/Debian/%E8%BD%AF%E4%BB%B6%E5%8C%85%E7%AE%A1%E7%90%86/2021-11-26-imno9x/</guid>
      
    </item>
    
    <item>
      <title>关于 RHEL</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-11-26&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-11-26T00:00:00&#39;&gt;2021-11-26&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2023-07-19&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2023-07-19T15:40:31&#39;&gt;2023-07-19&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;根据官网最新的产品规范，CentOS 7 在 2024 年停止支持，CentOS 8 将在今年年末停止支持。产品规范链接：&lt;a href=&#34;https://wiki.centos.org/zh/About/Product&#34;&gt;https://wiki.centos.org/zh/About/Product&lt;/a&gt;
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fu0JN7Zh4-HTqsIrrd4i_dkLUB5l.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;:::tips
&lt;strong&gt;Rocky Linux 8 (released &lt;/strong&gt;&lt;a href=&#34;https://forums.rockylinux.org/t/rocky-linux-8-4-available-now/3015&#34;&gt;&lt;strong&gt;June 2021&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;, LTS EOL &lt;/strong&gt;&lt;a href=&#34;https://forums.rockylinux.org/t/what-is-eol-of-rl8/3316&#34;&gt;&lt;strong&gt;May 2029&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;)&lt;/strong&gt;
:::&lt;/p&gt;
&lt;h2 id=&#34;论坛社区&#34;&gt;论坛社区&lt;a class=&#34;headerlink&#34; href=&#34;#论坛社区&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;官网：&lt;a href=&#34;https://rockylinux.org/&#34;&gt;https://rockylinux.org/&lt;/a&gt;
中文社区：&lt;a href=&#34;https://www.rockylinux.cn/&#34;&gt;https://www.rockylinux.cn/&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;镜像源&#34;&gt;镜像源&lt;a class=&#34;headerlink&#34; href=&#34;#镜像源&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;官方源列表：&lt;a href=&#34;https://mirror.rockylinux.org/mirrormanager/mirrors&#34;&gt;https://mirror.rockylinux.org/mirrormanager/mirrors&lt;/a&gt;
阿里云源：&lt;a href=&#34;https://developer.aliyun.com/mirror/rockylinux&#34;&gt;https://developer.aliyun.com/mirror/rockylinux&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;资料文档&#34;&gt;资料文档&lt;a class=&#34;headerlink&#34; href=&#34;#资料文档&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Rocky Linux 的基础知识，可以阅读下面三个 PDF。
&lt;a href=&#34;https://www.yuque.com/attachments/yuque/0/2023/pdf/126032/1684287766015-55bcc398-3f4f-43da-8619-304e216fb3ab.pdf&#34;&gt;RHEL 安装程序的引导选项.pdf&lt;/a&gt;
&lt;a href=&#34;https://www.yuque.com/attachments/yuque/0/2023/pdf/126032/1684287807849-fd5169b0-3d12-4b1c-8133-8764259201a6.pdf&#34;&gt;在 Red Hat Enterprise Linux 8 中配置 InfiniBand 和 RDMA 网络的指南.pdf&lt;/a&gt;
&lt;a href=&#34;https://www.yuque.com/attachments/yuque/0/2023/pdf/126032/1684287824129-2584dc32-9e9e-4411-bcaa-fa1dbaa72655.pdf&#34;&gt;配置 Red Hat Enterprise Linux 9 中基本系统设置的指南.pdf&lt;/a&gt;&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/RHEL/2021-11-26-about-rhel/</link>
      <pubDate>Fri, 26 Nov 2021 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/RHEL/2021-11-26-about-rhel/</guid>
      
    </item>
    
    <item>
      <title>基础配置</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-11-26&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-11-26T00:00:00&#39;&gt;2021-11-26&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2023-07-19&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2023-07-19T15:38:53&#39;&gt;2023-07-19&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id=&#34;hostname&#34;&gt;Hostname&lt;a class=&#34;headerlink&#34; href=&#34;#hostname&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;新的服务器一般自带的 hostname 都是一串无规律的字符串，很难记也不好看（例如我们这个服务器的 r0sasd1bQi ），对于有强迫症的童鞋可以参考下面的方法去修改。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;在 CentOS 7 中，有三种定义的主机名：静态的（static）、瞬态的（transient）、灵活的（pretty）。“静态”主机名也称为内核主机名，是系统在启动时从 /etc/hostname 自动初始化的主机名。“瞬态”主机名是在系统运行时临时分配的主机名，例如，通过 DHCP 或 mDNS 服务器分配。静态主机名和瞬态主机名都遵从作为互联网域名同样的字符限制规则。而另一方面，“灵活”主机名则允许使用自由形式（包括特殊/空白字符）的主机名，以展示给终端用户。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;方法一，通过 &lt;code&gt;hostnamectl&lt;/code&gt;  来修改主机名。修改后需要重启服务器。&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@r0sasd1bQi&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# hostnamectl   #查看一下当前主机名的情况&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Static&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;hostname:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;r0sasd1bQi
&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;Icon&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;name:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;computer-vm
&lt;span class=&#34;w&#34;&gt;         &lt;/span&gt;Chassis:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;vm&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;🖴
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;Machine&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ID:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;5b87417f755c419bbacbb0a0f0f363e8
&lt;span class=&#34;w&#34;&gt;         &lt;/span&gt;Boot&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ID:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;2ba10754ac064e6f9473ad579a5ba163
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Virtualization:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;kvm
Operating&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;System:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;AlmaLinux&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;9&lt;/span&gt;.0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;Emerald&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Puma&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;CPE&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;OS&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Name:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;cpe:/o:almalinux:almalinux:9::baseos
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;Kernel:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Linux&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;5&lt;/span&gt;.14.0-70.17.1.el9_0.x86_64
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;Architecture:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;x86-64
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Hardware&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Vendor:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Alibaba&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Cloud
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Hardware&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Model:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Alibaba&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Cloud&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ECS

&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@r0sasd1bQi&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# hostnamectl set-hostname shumlab-server --static&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@r0sasd1bQi&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# hostnamectl status&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Static&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;hostname:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;shumlab-rhel9
&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;Icon&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;name:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;computer-vm
&lt;span class=&#34;w&#34;&gt;         &lt;/span&gt;Chassis:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;vm&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;🖴
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;Machine&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ID:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;5b87417f755c419bbacbb0a0f0f363e8
&lt;span class=&#34;w&#34;&gt;         &lt;/span&gt;Boot&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ID:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;2ba10754ac064e6f9473ad579a5ba163
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Virtualization:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;kvm
Operating&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;System:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;AlmaLinux&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;9&lt;/span&gt;.0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;Emerald&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Puma&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;CPE&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;OS&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Name:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;cpe:/o:almalinux:almalinux:9::baseos
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;Kernel:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Linux&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;5&lt;/span&gt;.14.0-70.17.1.el9_0.x86_64
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;Architecture:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;x86-64
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Hardware&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Vendor:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Alibaba&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Cloud
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Hardware&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Model:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Alibaba&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Cloud&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ECS

&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@r0sasd1bQi&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# reboot now    # 重启服务器&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;方法二，通过修改文件 &lt;code&gt;/etc/hostname&lt;/code&gt;  来实现主机名的修改。把该文件内容替换成自己想要的主机名重启即可。&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@r0sasd1bQi&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# vim /etc/hostname      # 修改 hostname&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@r0sasd1bQi&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# reboot now                 # 重启服务器&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;**声明：**以上为 CSDN 博主「点亮梦想那束光」的原创文章，遵循 CC 4.0 BY-SA 版权协议，转载请附上原文出处链接及本声明。
&lt;strong&gt;原文：&lt;/strong&gt;&lt;a href=&#34;https://blog.csdn.net/solaraceboy/java/article/details/78563537&#34;&gt;https://blog.csdn.net/solaraceboy/java/article/details/78563537&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;环境变量&#34;&gt;环境变量&lt;a class=&#34;headerlink&#34; href=&#34;#环境变量&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;常用的自定义环境变量配置。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;# User Specific Alias
alias disp=&amp;#39;display&amp;#39;
alias rm=&amp;#39;rm -i&amp;#39;
alias la=&amp;#39;ls -al&amp;#39;
alias ll=&amp;#39;ls -lht&amp;#39;
alias le=&amp;#39;less -S&amp;#39;

# Custom History setting
# HISTFILESIZE 定义了在 .bash_history 中保存命令的记录总数
HISTFILESIZE=3000000
# HISTSIZE 定义了 history 命令输出的记录数
HISTSIZE=3000
# 定义 History 输出格式
export HISTTIMEFORMAT=&amp;#39;%F %T &amp;#39;
# 使用 HISTCONTROL 从命令历史中剔除连续重复的条目
HISTCONTROL=ignoredups
# 将 bash 内存中历史命令追加到 .bash_history 历史命令文件中， 默认只有退出 shell 是才会保存
PROMPT_COMMAND=&amp;quot;history -a&amp;quot;

# Login Style
PS1=&amp;#39;\033[35;1m\u@\h \[\e[m\]\t \[\033[36;1m\]$(pwd) \n$ \[\e[m\]&amp;#39;
clear;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;命令行提示符&#34;&gt;命令行提示符&lt;a class=&#34;headerlink&#34; href=&#34;#命令行提示符&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;bash 中命令行提示符的格式是由 PS1 来控制的。 &lt;code&gt;/etc/bashrc&lt;/code&gt;  中 PS1 的格式定义用于控制全局用户的命令行提示符样式；而针对个人用户的  PS1 设置，位于 &lt;code&gt;~/.bashrc&lt;/code&gt;  中。&lt;/p&gt;
&lt;p&gt;我自己的 PS1 定义：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nv&#34;&gt;PS1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;\033[35;1m\u@\h \[\e[m\]\t \[\033[36;1m\]$(pwd) \n$ \[\e[m\]&amp;#39;&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/data&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;clear&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FvZ1R9E_oUY-KMyvlggg7RnFD3U3.png&#34; /&gt;
有关于 PS1 的格式介绍如下：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;序列&lt;span class=&#34;w&#34;&gt;                  &lt;/span&gt;说明
&lt;span class=&#34;se&#34;&gt;\a&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;ASCII&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;响铃字符（也可以键入&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\0&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;07&lt;/span&gt;）
&lt;span class=&#34;se&#34;&gt;\d&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;Wed Sep 06&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;格式的日期
&lt;span class=&#34;se&#34;&gt;\e&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;ASCII&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;转义字符（也可以键入&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\0&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;33&lt;/span&gt;）
&lt;span class=&#34;se&#34;&gt;\h&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;主机名的第一部分（如&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;mybox&amp;quot;&lt;/span&gt;）
&lt;span class=&#34;se&#34;&gt;\H&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;主机的全称（如&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;mybox.mydomain.com&amp;quot;&lt;/span&gt;）
&lt;span class=&#34;se&#34;&gt;\j&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;在此&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;shell&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;中通过按&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;^Z&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;挂起的进程数
&lt;span class=&#34;se&#34;&gt;\l&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;此&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;shell&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;的终端设备名（如&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;ttyp4&amp;quot;&lt;/span&gt;）
&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;换行符
&lt;span class=&#34;se&#34;&gt;\r&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;回车符
&lt;span class=&#34;se&#34;&gt;\s&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;shell&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;的名称（如&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;bash&amp;quot;&lt;/span&gt;）
&lt;span class=&#34;se&#34;&gt;\t&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;24&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;小时制时间（如&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;23:01:01&amp;quot;&lt;/span&gt;）
&lt;span class=&#34;se&#34;&gt;\T&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;12&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;小时制时间（如&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;11:01:01&amp;quot;&lt;/span&gt;）
&lt;span class=&#34;se&#34;&gt;\@&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;带有&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;am/pm&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;的&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;12&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;小时制时间
&lt;span class=&#34;se&#34;&gt;\u&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;用户名
&lt;span class=&#34;se&#34;&gt;\v&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;bash&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;的版本（如&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;.04）
&lt;span class=&#34;se&#34;&gt;\V&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;Bash&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;版本（包括补丁级别）
&lt;span class=&#34;se&#34;&gt;\w&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;当前工作目录（如&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;/home/shenweiyan&amp;quot;&lt;/span&gt;）
&lt;span class=&#34;se&#34;&gt;\W&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;当前工作目录的&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;basename&amp;quot;&lt;/span&gt;（如&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;shenweiyan&amp;quot;&lt;/span&gt;）
&lt;span class=&#34;se&#34;&gt;\!&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;当前命令在历史缓冲区中的位置
&lt;span class=&#34;se&#34;&gt;\#&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;命令编号（只要您键入内容，它就会在每次提示时累加）
&lt;span class=&#34;se&#34;&gt;\$&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;如果您不是超级用户&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;root&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;，则插入一个&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;$&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;；如果您是超级用户，则显示一个&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;#&amp;quot;&lt;/span&gt;
&lt;span class=&#34;se&#34;&gt;\x&lt;/span&gt;xx&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;插入一个用三位数&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;xxx（用零代替未使用的数字，如&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;\007&amp;quot;&lt;/span&gt;）表示的&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ASCII&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;字符
&lt;span class=&#34;se&#34;&gt;\\&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;反斜杠
&lt;span class=&#34;se&#34;&gt;\[&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;这个序列应该出现在不移动光标的字符序列（如颜色转义序列）之前。它使&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bash&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;能够正确计算自动换行。
&lt;span class=&#34;se&#34;&gt;\]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;这个序列应该出现在非打印字符序列之后。
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
      <link>https://shenwy.com/yuque/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/RHEL/2021-11-26-ut1tmm/</link>
      <pubDate>Fri, 26 Nov 2021 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/RHEL/2021-11-26-ut1tmm/</guid>
      
    </item>
    
    <item>
      <title>管理用户和用户组</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-11-26&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-11-26T00:00:00&#39;&gt;2021-11-26&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2023-07-19&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2023-07-19T15:40:04&#39;&gt;2023-07-19&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;openEuler-20.03 LTS 管理用户和用户组的官方文档，在&lt;a href=&#34;https://docs.openeuler.org/zh/docs/20.03_LTS/docs/Administration/%E7%AE%A1%E7%90%86%E7%94%A8%E6%88%B7%E5%92%8C%E7%94%A8%E6%88%B7%E7%BB%84.html&#34;&gt;这里&lt;/a&gt;。补充一下关于如何在 openeuler 上创建启用 sudo 新用户（无需修改服务器 /etc/sudoers 文件）的一个小知识点。&lt;/p&gt;
&lt;h2 id=&#34;创建启用-sudo-新用户&#34;&gt;创建启用 sudo 新用户&lt;a class=&#34;headerlink&#34; href=&#34;#创建启用-sudo-新用户&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;该 sudo 命令提供了一种向普通用户授予管理员特权（通常仅对 root 用户可用）的机制。本指南将向您展示如何 sudo 在 openeuler 上创建具有访问权限的新用户，而无需修改服务器 /etc/sudoers 文件。
:::tips
注意：如果要 sudo 为现有的 openeuler 用户配置，请跳至步骤 3。
:::&lt;/p&gt;
&lt;h3 id=&#34;第-1-步登录到服务器&#34;&gt;第 1 步，登录到服务器&lt;a class=&#34;headerlink&#34; href=&#34;#第-1-步登录到服务器&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;以 root 用户身份登录到服务器：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;#使用服务器的IP地址或主机名代替your_server_ip_address上面的名称&lt;/span&gt;
ssh&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;root@your_server_ip_address
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;第-2-步将新用户添加到系统&#34;&gt;第 2 步，将新用户添加到系统&lt;a class=&#34;headerlink&#34; href=&#34;#第-2-步将新用户添加到系统&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;使用 adduser 命令将新用户添加到系统中：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;#确保sammy用您要创建的用户名替换&lt;/span&gt;
adduser&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sammy
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;使用 passwd 命令来更新新用户的密码：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;passwd&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sammy
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;请记住 sammy 用您刚创建的用户替换。系统将提示您两次输入新密码：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Changing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;password&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;user&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;developer.
New&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;password:
Retype&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;new&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;password:
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;步骤-3将用户添加到-wheel-组&#34;&gt;步骤 3，将用户添加到 wheel 组&lt;a class=&#34;headerlink&#34; href=&#34;#步骤-3将用户添加到-wheel-组&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;使用 usermod 命令将用户添加到 wheel 组：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;usermod&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-aG&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;wheel&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sammy
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;再一次，请确保替换 sammy 为您要赋予 sudo 特权的用户名。&lt;strong&gt;默认情况下，在 CentOS 上，wheel 组的所有成员都具有完全 sudo 访问权限。&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id=&#34;第-4-步测试-sudo-访问权限&#34;&gt;第 4 步，测试 sudo 访问权限&lt;a class=&#34;headerlink&#34; href=&#34;#第-4-步测试-sudo-访问权限&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;要测试新 sudo 权限是否正常运行，请首先使用以下 su 命令从 root 用户切换到新用户帐户：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;su&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sammy
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;作为新用户，sammy 通过 sudo 在要使用超级用户特权运行的命令之前添加验证您可以使用：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;sudo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;command_to_run
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;例如，您可以列出目录的内容，该 /root 目录通常只有 root 用户可以访问：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;sudo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ls&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-la&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/root
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;第一次 sudo 在会话中使用时，系统将提示您输入该用户帐户的密码。输入密码以继续：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;sudo&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;password&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sammy:
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;:::tips
&lt;strong&gt;注意：&lt;/strong&gt;这不是要求输入&lt;strong&gt; root&lt;/strong&gt; 密码！输入启用了 sudo 的用户的密码，而不是 &lt;strong&gt;root&lt;/strong&gt; 密码。
:::&lt;/p&gt;
&lt;p&gt;如果您的用户在适当的组中，并且您正确输入了密码，则发出的命令 sudo 将以 root 特权运行。&lt;/p&gt;
&lt;h3 id=&#34;总结&#34;&gt;总结&lt;a class=&#34;headerlink&#34; href=&#34;#总结&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;在本快速入门教程中，我们创建了一个新的用户帐户，并将其添加到 wheel 组以启用 sudo 访问权限。&lt;/p&gt;
&lt;h3 id=&#34;_1&#34;&gt;&lt;a class=&#34;headerlink&#34; href=&#34;#_1&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;</description>
      <link>https://shenwy.com/yuque/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/openEuler/2021-11-26-psetzg/</link>
      <pubDate>Fri, 26 Nov 2021 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/openEuler/2021-11-26-psetzg/</guid>
      
    </item>
    
    <item>
      <title>个人域名跳转至语雀个人主页</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-11-16&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-11-16T00:00:00&#39;&gt;2021-11-16&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2023-04-07&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2023-04-07T14:00:08&#39;&gt;2023-04-07&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;📢 域名 &lt;a href=&#34;https://weiyan.cc&#34;&gt;https://weiyan.cc&lt;/a&gt; 就是基于本文章中的 &amp;ldquo;&lt;strong&gt;无服务器&lt;/strong&gt;&amp;rdquo; 步骤实现的个人域名跳转至语雀个人主页！因此，本篇文档你也可以通过以下的链接访问：&lt;a href=&#34;https://weiyan.cc/cookbook/301-redirects&#34;&gt;https://weiyan.cc/cookbook/301-redirects&lt;/a&gt;！&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;语雀的个人使用目前是不支持自定义域名的，虽然空间的使用可以自定义二级域名，如：&lt;a href=&#34;https://weiyan.yuque.com/&#34;&gt;weiyan.yuque.com&lt;/a&gt;，但是空间知识库必须要先登录，不方便其他人查看，尤其是对于没有注册语雀的用户。&lt;/p&gt;
&lt;p&gt;现在的情况是，我有一个已经备案的个人域名 &lt;code&gt;www.example.com&lt;/code&gt;，现在我想：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;让所有 &lt;code&gt;www.example.com&lt;/code&gt; 的访问地址都跳转到 &lt;a href=&#34;https://www.yuque.com/shenweiyan&#34;&gt;https://www.yuque.com/shenweiyan&lt;/a&gt;，比如 &lt;code&gt;https://www.example.com/cookbook&lt;/code&gt; 跳转到 &lt;a href=&#34;https://www.yuque.com/shenweiyan/cookbook&#34;&gt;https://www.yuque.com/shenweiyan/cookbook&lt;/a&gt;。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;www.example.com&lt;/code&gt; 的访问地址跳转同时支持 http/https。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;example.com/www.example.com&lt;/code&gt; 同时实现以上跳转。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;反正就一句话，让下面的链接都跳转到 &lt;a href=&#34;https://www.yuque.com/shenweiyan&#34;&gt;https://www.yuque.com/shenweiyan&lt;/a&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://example.com&#34;&gt;http://example.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.example.com&#34;&gt;http://www.example.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://example.com&#34;&gt;https://example.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.example.com&#34;&gt;https://www.example.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;下面简单记录一下具体的实现过程。&lt;/p&gt;
&lt;h2 id=&#34;背景知识&#34;&gt;背景知识&lt;a class=&#34;headerlink&#34; href=&#34;#背景知识&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;显性 URL 转发：&lt;/strong&gt; 用的是 301 重定向技术，效果为浏览器地址栏输入 &lt;a href=&#34;http://a.com/&#34;&gt;http://a.com&lt;/a&gt; 回车，打开网站内容是目标地址 &lt;a href=&#34;http://cloud.baidu.com/&#34;&gt;http://cloud.baidu.com/&lt;/a&gt; 的网站内容，且地址栏显示目标地址 &lt;a href=&#34;http://cloud.baidu.com/&#34;&gt;http://cloud.baidu.com/&lt;/a&gt; 。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;隐性 URL 转发：&lt;/strong&gt; 用的是 iframe 框架技术、非重定向技术，效果为浏览器地址栏输入 &lt;a href=&#34;http://a.com/&#34;&gt;http://a.com&lt;/a&gt; 回车，打开网站内容是目标地址 &lt;a href=&#34;http://cloud.baidu.com/&#34;&gt;http://cloud.baidu.com/&lt;/a&gt; 的网站内容，但地址栏显示当前地址 &lt;a href=&#34;http://a.com/&#34;&gt;http://a.com&lt;/a&gt; 。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;301 重定向是什么？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;301 重定向表示网页由一个地址永久地移动到了另外一个地址。这里中的 301 是被重定向网页的 HTTP 状态代码。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;例如：&lt;/strong&gt; &lt;a href=&#34;https://blog.ahrefs.com/&#34;&gt;blog.ahrefs.com&lt;/a&gt; 重定向到了 &lt;a href=&#34;https://ahrefs.com/blog&#34;&gt;ahrefs.com/blog&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;简单来说，301 重定向是在告诉浏览器：“这个页面已经永久迁移了。这个是新的地址，我们不打算把它移回去啦。”这时，浏览器会回复：“没问题！我现在（开始）就把用户引向这里！”&lt;/p&gt;
&lt;p&gt;这就是为什么访问 blog.ahrefs.com 已经不可能了。你最后会去到的网页是 ahrefs.com/blog。&lt;/p&gt;
&lt;h2 id=&#34;前提条件&#34;&gt;前提条件&lt;a class=&#34;headerlink&#34; href=&#34;#前提条件&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;前提条件可以分为&lt;strong&gt;有服务器&lt;/strong&gt;和&lt;strong&gt;无服务器&lt;/strong&gt;两种情况，下面具体说一下。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;有服务器（可以考虑腾讯云或者阿里云的轻量云服务器，双十一优惠价一年也就几十块）；&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;阿里云轻量云服务器：&lt;a href=&#34;https://www.aliyun.com/activity/1111?userCode=mx65q35j&#34;&gt;购买链接&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;腾讯云轻量云服务器：&lt;a href=&#34;https://curl.qcloud.com/0Sy0R0AX&#34;&gt;购买链接&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;域名（域名需要已经完成备案）；&lt;/li&gt;
&lt;li&gt;SSL 证书（可以使用阿里云或者腾讯云的免费域名证书）；&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;无服务器&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;可以考虑使用 &lt;a href=&#34;https://support.cloudflare.com/hc/zh-cn/articles/218411427&#34;&gt;Cloudflare Page Rules&lt;/a&gt;（页面规则）；当然，其他的平台也可以；&lt;/li&gt;
&lt;li&gt;域名（有些域名可以不用备案）；&lt;/li&gt;
&lt;li&gt;SSL 证书（如果你用的是 &lt;a href=&#34;https://support.cloudflare.com/hc/zh-cn/articles/218411427&#34;&gt;Cloudflare Page Rules&lt;/a&gt;，可以不用 SSL 证书 ）。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;操作步骤有服务器&#34;&gt;操作步骤：有服务器&lt;a class=&#34;headerlink&#34; href=&#34;#操作步骤有服务器&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;本操作以 &lt;strong&gt;ncbix.com&lt;/strong&gt; 域名为示例。&lt;/p&gt;
&lt;h3 id=&#34;1-域名解析&#34;&gt;1. 域名解析&lt;a class=&#34;headerlink&#34; href=&#34;#1-域名解析&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;在你的域名供应商后台点击“添加记录”，分别输入 www 和 @，记录类型“A”，记录值就是你虚拟主机或 VPS 服务器的 IP 地址，最后保存。以 DNSPOD 为例。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FqvWUx6cyUz-O8d1avOdFZ1aDIWF.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;2-ssl-证书&#34;&gt;2. SSL 证书&lt;a class=&#34;headerlink&#34; href=&#34;#2-ssl-证书&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;申请免费证书，具体操作可以自行百度。以腾讯云为例：&lt;a href=&#34;https://console.cloud.tencent.com/ssl&#34;&gt;https://console.cloud.tencent.com/ssl&lt;/a&gt;。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fo4XBIRStXxx27kvjKULIjHazdJ9.png&#34; /&gt;
根据截图，一步步点击操作。申请完成后，把证书下载并上传到你的服务器。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FqamrO4EBSQuO6wsJ28y8g-AH63E.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;3-安装-nginx&#34;&gt;3. 安装 Nginx&lt;a class=&#34;headerlink&#34; href=&#34;#3-安装-nginx&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;可以直接使用 &lt;strong&gt;yum/apt&lt;/strong&gt; 的方式直接安装；源码方式的安装，参考：《&lt;a href=&#34;https://www.yuque.com/shenweiyan/cookbook/centos-install-nginx&#34;&gt;CentOS 7 下编译安装 Nginx · 语雀&lt;/a&gt;》。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# Debian/Ubuntu&lt;/span&gt;
apt&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;update
apt&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;nginx

&lt;span class=&#34;c1&#34;&gt;# CentOS/RHEL&lt;/span&gt;
yum&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;nginx
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;4-配置-nginx&#34;&gt;4. 配置 Nginx&lt;a class=&#34;headerlink&#34; href=&#34;#4-配置-nginx&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;通过 &lt;strong&gt;yum/apt&lt;/strong&gt; 安装的 Nginx 默认的置文件在 &lt;strong&gt;/etc/nginx/nginx.conf&lt;/strong&gt;，编辑该文件。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;k&#34;&gt;http&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;##&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# Basic Settings&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;##&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;......&lt;/span&gt;

&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;##&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# Virtual Host Configs&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;##&lt;/span&gt;
&lt;span class=&#34;s&#34;&gt;server&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;listen&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;80&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;listen&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;443&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;ssl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;server_name&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;ncbix.com&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;www.ncbix.com&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;ssl_certificate&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;/etc/nginx/ssl/nginx/www.ncbix.com_bundle.crt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;ssl_certificate_key&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;/etc/nginx/ssl/nginx/www.ncbix.com.key&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;index&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;index.php&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;index.html&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;index.htm&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;

&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$scheme&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;http&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;return&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;301&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;https://www.yuque.com/shenweiyan&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$request_uri&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;#确保跳转到新域名HTTPS如果没有HTTPS可以去掉&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;location&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;rewrite&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;/.*&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;https://www.yuque.com/shenweiyan&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$uri&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;redirect&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;#跳转到新域名并重写为新域名&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;

&lt;span class=&#34;kn&#34;&gt;include&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;/etc/nginx/conf.d/*.conf&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;include&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;/etc/nginx/sites-enabled/*&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;5-重启-nginx&#34;&gt;5. 重启 Nginx&lt;a class=&#34;headerlink&#34; href=&#34;#5-重启-nginx&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;最后，通过下面的命令重启 Nginx 服务即可。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;service&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;nginx&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;restart
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;操作步骤无服务器&#34;&gt;操作步骤：无服务器&lt;a class=&#34;headerlink&#34; href=&#34;#操作步骤无服务器&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;我们以 &lt;a href=&#34;https://support.cloudflare.com/hc/zh-cn/articles/218411427&#34;&gt;Cloudflare Page Rules&lt;/a&gt; 为例，说明一下具体怎么操作。&lt;/p&gt;
&lt;h3 id=&#34;1-cloudflare-中添加站点&#34;&gt;1. Cloudflare 中添加站点&lt;a class=&#34;headerlink&#34; href=&#34;#1-cloudflare-中添加站点&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fjd2wS9yVs0ZiBBalZQVOuPQHbU1.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;添加完站点后，可以选择 &lt;strong&gt;Free 计划&lt;/strong&gt;，然后点击继续：
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FumaUELUaIJnv9s0Q4paKUDIAWTL.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;点击继续后，Cloudflare 会自动扫描你对应域名的一些解析记录：
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FtQZKAyQd_6dd5d7A_ZLCVp4NUEg.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;我们可以直接选择 &lt;strong&gt;&amp;ldquo;继续&amp;rdquo;&lt;/strong&gt;。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fvkt0gHVP7lmiqapWf3pM7Zx4YwN.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;2-修改域名-dns&#34;&gt;2. 修改域名 DNS&lt;a class=&#34;headerlink&#34; href=&#34;#2-修改域名-dns&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;首先，我的域名是在腾讯云注册的，可以去腾讯云控制台 &lt;strong&gt;&amp;ldquo;我的域名&amp;rdquo;&lt;/strong&gt; 中直接修改 DNS：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;# 添加 Cloudflare 名称服务器
imani.ns.cloudflare.com
caroline.dnspod.net
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FlKyYHHLGHwD9IPKYvLtPorghBpr.png&#34; /&gt;
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FmRwodrlbkBt6SkX7RsG2ec1iruc.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;3-完成-cloudflare-添加站点&#34;&gt;3. 完成 Cloudflare 添加站点&lt;a class=&#34;headerlink&#34; href=&#34;#3-完成-cloudflare-添加站点&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;可以把后面快速指南的这几个配置都勾选。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FtULJ4uM_TuPjPkkMtdXAhxpyDes.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;等待几分钟就可以看到你的域名站点已经添加到 Cloudflare 上了！
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fk8Hv5dkW8kHd1IorhNfT427RliQ.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;4-设置-dns-记录&#34;&gt;4. 设置 DNS 记录&lt;a class=&#34;headerlink&#34; href=&#34;#4-设置-dns-记录&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;The first thing you will need is a DNS record for &lt;strong&gt;@&lt;/strong&gt;, &lt;strong&gt;www&lt;/strong&gt; and any other subdomains you want to redirect, set to &lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FjjhP041Zj-aZVPAHpQ-YnHIzMA6.png&#34; /&gt;. This can point to any IP address as the redirection page rule will execute first. I would recommend pointing them to 192.0.2.1 , a dummy IP.&lt;/p&gt;
&lt;p&gt;From：&lt;a href=&#34;https://community.cloudflare.com/t/redirecting-one-domain-to-another/81960&#34;&gt;https://community.cloudflare.com/t/redirecting-one-domain-to-another/81960&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;在配置 Cloudflare 站点的页面规则前，你需要把该域名的 &lt;strong&gt;@&lt;/strong&gt;，&lt;strong&gt;www&lt;/strong&gt; 或者其他你想要进行重定向的子域名添加到 DNS 记录中，这个记录的值可以指向任何 IP 地址，因为重定向页面规则将首先执行。我建议将它们指向 192.0.2.1 ，一个虚拟 IP。&lt;/p&gt;
&lt;p&gt;在这里，我们以 &lt;strong&gt;@&lt;/strong&gt; 和 &lt;strong&gt;note&lt;/strong&gt; 子域名为例，添加 DNS 记录，先让它们指向一个虚拟 IP。
&lt;img alt=&#34;images&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fk08ydFuPukTv88AAa0V27T4xTBh.png&#34; title=&#34;以 ncbix.com 和 note.ncbix.com 为例，均重定向到 https://www.yuque.com/shenweiyan 页面&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;5-配置-cloudflare-站点页面规则&#34;&gt;5. 配置 Cloudflare 站点页面规则&lt;a class=&#34;headerlink&#34; href=&#34;#5-配置-cloudflare-站点页面规则&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;首先，在 Cloudflare 的主页上点击对应的站点，选择 &lt;strong&gt;&amp;ldquo;页面规则&amp;rdquo;&lt;/strong&gt;，点击。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FqolXaSzUdkgtKo66yRC3xRkV7mv.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;点击 &lt;strong&gt;&amp;ldquo;创建页面规则&amp;rdquo;&lt;/strong&gt;：
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FnF2bk6hzYvulCtXdLSQSUiV1Z44.png&#34; /&gt;
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fp5DSLxKInn25a591hjYjDNpUeRn.png&#34; /&gt;
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FiFuRSizKlmkmJ5LxiBfkIGreBdm.png&#34; /&gt;
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FtNPR2rLIFDKMYz3N8gqkLBcQFnG.png&#34; /&gt;&lt;/p&gt;
&lt;h4 id=&#34;什么是页面规则&#34;&gt;什么是页面规则？&lt;a class=&#34;headerlink&#34; href=&#34;#什么是页面规则&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;blockquote&gt;
&lt;p&gt;页面规则为 Cloudflare 设置提供基于 URL 的粒度控制。关于页面规则需要了解的最重要事情是，针对一个 URL 仅触发一个页面规则，因此一定要按照优先级顺序对页面规则进行排序并将最具体的页面规则放在顶部。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h5 id=&#34;页面规则中允许哪些模式&#34;&gt;页面规则中允许哪些模式？&lt;a class=&#34;headerlink&#34; href=&#34;#页面规则中允许哪些模式&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h5&gt;
&lt;blockquote&gt;
&lt;p&gt;如果使用的是转发页面规则，则可以将这些通配符映射到变量。在转发 URL 中，可以按照从左到右的顺序指定与原始 URL 中的通配符相匹配的 &lt;span class=&#34;arithmatex&#34;&gt;\(1、\)&lt;/span&gt;2，以此类推。&lt;/p&gt;
&lt;p&gt;例如，可以将 &lt;code&gt;http://.example.com/&lt;/code&gt; 转发到 &lt;code&gt;http://$2.example.com/$1.jpg&lt;/code&gt;。此规则将与 &lt;a href=&#34;http://cloud.example.com/flare&#34;&gt;http://cloud.example.com/flare&lt;/a&gt; 相匹配，这最终将转发到 &lt;a href=&#34;http://flare.example.com/cloud.jpg&#34;&gt;http://flare.example.com/cloud.jpg&lt;/a&gt;。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h5 id=&#34;一些有用的提示&#34;&gt;一些有用的提示：&lt;a class=&#34;headerlink&#34; href=&#34;#一些有用的提示&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h5&gt;
&lt;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;如果要同时匹配 http 和 https，只需编写 example.com 即可。无需编写 example.com。&lt;/li&gt;
&lt;li&gt;如果要匹配域中的每个页面，则需要编写 example.com/，仅编写 example.com 是不够的。&lt;/li&gt;
&lt;li&gt;请参阅 &lt;a href=&#34;https://support.cloudflare.com/hc/articles/218411427&#34;&gt;了解和配置 Cloudflare 页面规则&lt;/a&gt; 了解有关页面规则模式的更多详细信息。&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;6-配置-ssl不必要&#34;&gt;6. 配置 SSL(不必要)&lt;a class=&#34;headerlink&#34; href=&#34;#6-配置-ssl不必要&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;📢 Update 2022.09.05：这一步不是必要的，这里仅供参考！&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;申请 &lt;a href=&#34;http://www.example.com&#34;&gt;www.example.com&lt;/a&gt; 域名的 SSL 证书；&lt;/li&gt;
&lt;li&gt;把 DNS 验证域名的记录添加到 Cloudfare 的 DNS 中；&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FiEmXujpQKK0j0p2GxzaOgTC3xwN.png&#34; /&gt;
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FnOHAmNIAcEmwBD_fv3eIUBzxmiB.png&#34; /&gt;
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FtxcA4iXJhT029vkw35EVkDN-2QG.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意：&lt;/strong&gt;
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FgrIb03h7Inot6k7fa1BHGH4G3HO.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;参考资料&#34;&gt;参考资料&lt;a class=&#34;headerlink&#34; href=&#34;#参考资料&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&#34;https://segmentfault.com/q/1010000015157572&#34;&gt;nginx 实现两个域名之间跳转配置 - SegmentFault 思否&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cloud.baidu.com/doc/DNS/s/ukq4w1pji&#34;&gt;智能云解析 DNS - 通过 Nginx 实现 URL 转发 | 百度智能云文档&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://ahrefs.com/blog/zh/301-redirects/&#34;&gt;SEO 的 301 重定向：你需要知道的一切&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;script src=&#34;https://giscus.app/client.js&#34;
        data-repo=&#34;shenweiyan/Knowledge-Garden&#34;
        data-repo-id=&#34;R_kgDOKgxWlg&#34;
        data-mapping=&#34;number&#34;
        data-term=&#34;8&#34;
        data-reactions-enabled=&#34;1&#34;
        data-emit-metadata=&#34;0&#34;
        data-input-position=&#34;bottom&#34;
        data-theme=&#34;light&#34;
        data-lang=&#34;zh-CN&#34;
        crossorigin=&#34;anonymous&#34;
        async&gt;
&lt;/script&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E5%90%8E%E7%AB%AF/2021-11-16-301-redirects/</link>
      <pubDate>Tue, 16 Nov 2021 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E5%90%8E%E7%AB%AF/2021-11-16-301-redirects/</guid>
      
    </item>
    
    <item>
      <title>Xmanager 7 客户端安装与使用说明</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-11-12&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-11-12T00:00:00&#39;&gt;2021-11-12&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-11-23&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-11-23T13:46:53&#39;&gt;2021-11-23&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;很长一段时间，都在使用 MobaXterm 作为 Windows 下的默认命令行终端，但是最近发现：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在中文输入的时候总会导致 Backspace 回格键无法删除候选区的文字（这一点让我非常不爽）。&lt;/li&gt;
&lt;li&gt;不管是百度输入法还是搜狗输入法中都存在这样的问题，但讯飞输入法起码可以正常使用。&lt;/li&gt;
&lt;li&gt;然而，讯飞输入法 PC 端每次开机的时候，图标总是会固定在右下角的任务栏上，把右下角的任务栏给挡住了。&lt;a href=&#34;http://bbs.xunfei.cn/showtopic-187191-1-1.html&#34;&gt;无力吐槽，也不知道什么时候会优化&lt;/a&gt;！&lt;/li&gt;
&lt;li&gt;都向百度输入法、搜狗输入法反馈过&lt;a href=&#34;https://weibo.com/6020143196/KDiuis3H8&#34;&gt;相关问题&lt;/a&gt;，没有一个是认真去解决的！&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;无奈之下，回来 Xshell 吧，虽然 Xmanager 需要收费，但最起码也不会有那么多糟心的事情\~&lt;/p&gt;
&lt;h1 id=&#34;软件介绍&#34;&gt;软件介绍&lt;a class=&#34;headerlink&#34; href=&#34;#软件介绍&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Xmanager 7 全称叫做 Xmanager Power Suite 7，是专门为网络管理人员提供的一款功能强大专业的会话管理工具，同时也是 Win 一站式集成 UNIX/Linux 解决方案，不仅为用户提供了简洁明了的操作界面，还其内置了强大的会话管理器功能，并且可以同时进行多个会话的连接，从而利用它不仅有助于我们灵活管理和查看自己的连接会话，还可以轻轻松松的满足用户连接远程服务器时行各种操作，非常的强大。&lt;/p&gt;
&lt;p&gt;而且在该软件中直接是集 &lt;strong&gt;Xmanager&lt;/strong&gt;、&lt;strong&gt;Xshell&lt;/strong&gt;、&lt;strong&gt;Xftp&lt;/strong&gt; 和 &lt;strong&gt;Xlpd&lt;/strong&gt; 于一体的，这样不管你是想要在系统之间安全地传输文件，还是使用一个安全终端管理远程 Unix/Linux 服务器、运行 X 个窗口应用程序、在其他系统上运行本地打印远程文档等需求在这里全部都可以一次性满足你的使用。&lt;/p&gt;
&lt;p&gt;另外呢，在这个套件中还含的所有程序都共享一个通用的 SSH 安全模块，有了它就可以更好的方便彼此进行高效地互操作了，从而能够大大地提高了管理人员的效率，节省了对应的时间。&lt;/p&gt;
&lt;p&gt;本次小编为用户们带来的是 Xmanager power suite 7 破解版，附带了相对应的注册机可完美的帮助用户解锁软件的全部功能，以及使用天数限制，亲测有效，并且软件还支持简体中文语言系统，十分适合国人的使用，欢迎有兴趣的用户们免费下载体验。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fp05aRJVZBSfMLkvKB1-yee6qDiq.png&#34; /&gt;&lt;/p&gt;
&lt;h1 id=&#34;破解版安装教程&#34;&gt;破解版安装教程&lt;a class=&#34;headerlink&#34; href=&#34;#破解版安装教程&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;下载解压到，得到 Xmanager power suite 7 安装包和注册机；&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fp_8lWfThHq0sSz_js-Fki8vb3O8.png&#34; /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;运行 XmanagerPowerSuite-7.0.0004r.exe 开始安装软件，点击接受许可条款；&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Ftq8acNsTMhtp0d_sglYMKfhT9vr.png&#34; /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;设置软件安装路径，默认即可；&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fj_A9KB6m-HWXgAObwqH3jkjEMmd.png&#34; /&gt;
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fj6aEY4DjjGbCNF7C6r7GUUBX7fl.png&#34; /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;等待软件安装完成，退出安装引导；&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fv5MOAK9QaSNGSXgw-oz-jsIu1L3.png&#34; /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;安装完成后，Xmanager Power Suite 7 包含了 Xhsell7、Xmanager7、Xftp7、Xlpd7 等工具；&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fs_CT8CVlQ58L3b8Rq6Wptwqz8Oo.png&#34; /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;打开注册机 &lt;strong&gt;netsarang_retail_v7.0.0004_patch_v1.1_by_crd_dfox.exe&lt;/strong&gt;，点击 &lt;strong&gt;patch&lt;/strong&gt; 开始破解；&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FuMjSc8VyyGjd78b9N4a_GTicIPy.png&#34; /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;随意打开一个 Xshell7 进入，即可发现已经授权，至此 xmanager power suite 7 破解版安装完成。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img alt=&#34;激活状态下的 Xshell 7&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FpPLbQkCgjxSgxq-ZXeKNOcIaClF.png&#34; title=&#34;激活状态下的 Xshell 7&#34; /&gt;
&lt;img alt=&#34;未激活状态下的 Xshell 7&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FsZsZDr6QAiaNJIXBO6XHlb2MfiD.jpeg&#34; title=&#34;未激活状态下的 Xshell 7&#34; /&gt;&lt;/p&gt;
&lt;h1 id=&#34;下载链接&#34;&gt;下载链接&lt;a class=&#34;headerlink&#34; href=&#34;#下载链接&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;下载链接这里就不贴了，如果您感兴趣，可以私信我（微信，邮件都可以），我发给你\~&lt;/p&gt;
&lt;p&gt;唠叨一句，有能力的童鞋推荐购买官方正版软件 😃😃😃&lt;/p&gt;
&lt;h1 id=&#34;使用与技巧&#34;&gt;使用与技巧&lt;a class=&#34;headerlink&#34; href=&#34;#使用与技巧&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id=&#34;设置-xshell-显示的最大行数&#34;&gt;设置 XShell 显示的最大行数&lt;a class=&#34;headerlink&#34; href=&#34;#设置-xshell-显示的最大行数&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;用 Xshell 输出 log，有时候 log 行数很多的时候之前的 log 就被冲掉了，就算把滚动条拉到最顶部也无法查看之前的 log。这时可以把 XShell 的 Sroll Buffer size 调大一些，以显示更多的 log。&lt;/p&gt;
&lt;p&gt;方法是：&lt;strong&gt;File&lt;/strong&gt; &amp;ndash;&amp;gt; &lt;strong&gt;Properties&lt;/strong&gt; &amp;ndash;&amp;gt; &lt;strong&gt;Terminal&lt;/strong&gt; &amp;ndash;&amp;gt; &lt;strong&gt;Scroll Buffer&lt;/strong&gt; &amp;ndash;&amp;gt; &lt;strong&gt;Buffer Size&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;可以看到默认的 &lt;strong&gt;Buffer Size&lt;/strong&gt; 是 1024 行，把这个数字改大即可。&lt;/li&gt;
&lt;li&gt;记得勾选 &lt;strong&gt;Push erased screen into Scroll Buffer&lt;/strong&gt;，这样超过一屏的 log 就会写入到 Scroll Buffer 里，否则只能显示一屏的 log。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FkNdSAa0n9BvmgF_aZIjcApMzUGy.png&#34; /&gt;&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/IDE/2021-11-12-xmanager-power-suite-7/</link>
      <pubDate>Fri, 12 Nov 2021 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/IDE/2021-11-12-xmanager-power-suite-7/</guid>
      
    </item>
    
    <item>
      <title>Md2X Editor | 一个专注于微信公众号 Markdown 排版的平台</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-11-11&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-11-11T00:00:00&#39;&gt;2021-11-11&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-11-12&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-11-12T16:56:04&#39;&gt;2021-11-12&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;本站点以颜家大少的 &lt;strong&gt;Md2All&lt;/strong&gt; 为基础，进行了定制化修改和重新部署，是一个专注于解决微信公众号 Markdown 排版的平台。问题或建议，请关注 BioIT 爱好者 公众号，或者通过以下方式与我联系：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;邮箱：&lt;a href=&#34;&amp;#109;&amp;#97;&amp;#105;&amp;#108;&amp;#116;&amp;#111;&amp;#58;&amp;#105;&amp;#115;&amp;#104;&amp;#101;&amp;#110;&amp;#119;&amp;#101;&amp;#105;&amp;#121;&amp;#97;&amp;#110;&amp;#64;&amp;#102;&amp;#111;&amp;#120;&amp;#109;&amp;#97;&amp;#105;&amp;#108;&amp;#46;&amp;#99;&amp;#111;&amp;#109;&#34;&gt;&amp;#105;&amp;#115;&amp;#104;&amp;#101;&amp;#110;&amp;#119;&amp;#101;&amp;#105;&amp;#121;&amp;#97;&amp;#110;&amp;#64;&amp;#102;&amp;#111;&amp;#120;&amp;#109;&amp;#97;&amp;#105;&amp;#108;&amp;#46;&amp;#99;&amp;#111;&amp;#109;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;语雀：&lt;a href=&#34;https://www.yuque.com/shenweiyan&#34;&gt;https://www.yuque.com/shenweiyan&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img alt=&#34;mdx.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fs_gSys5wE-d-lgUE2jNBRdj7G6l.jpeg&#34; /&gt;&lt;/p&gt;
&lt;p&gt;如果你觉得 Md2X Editor 对你有帮助，欢迎赞赏[1]\~
&lt;img alt=&#34;donate-wecaht-aliapy.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fh453wf6DbZoquA_G6wBMWS3uYGC.jpeg&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;关于-md2x-editor-网站访问&#34;&gt;关于 Md2X Editor 网站访问&lt;a class=&#34;headerlink&#34; href=&#34;#关于-md2x-editor-网站访问&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;有时网站的访问不稳定，可分别尝试不同的服务器：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://mdx.bioitee.com/&#34;&gt;服务器 1：https://mdx.bioitee.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&#34;https://mdx.bioitee.com&#34;&gt;Md2X Editor | BioIT 爱好者&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://mdx.bioitee.com/#&#34;&gt;服务器 2：暂未上线&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;md2x-editor-简介&#34;&gt;Md2X Editor 简介&lt;a class=&#34;headerlink&#34; href=&#34;#md2x-editor-简介&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;由于 &lt;a href=&#34;https://md.aclickall.com/&#34;&gt;Md2All&lt;/a&gt; 很长一段时间都不再更新，加上有时候 &lt;a href=&#34;https://md.aclickall.com/&#34;&gt;Md2All&lt;/a&gt; 的访问不稳定，本项目在 &lt;a href=&#34;https://md.aclickall.com/&#34;&gt;Md2All&lt;/a&gt; 的基础上进行了一些调整和修改后的重新部署(包括把站点迁移至腾讯云等)。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Markdown 排版利器，支持 &lt;strong&gt;&amp;ldquo;一键排版&amp;rdquo;&lt;/strong&gt; 、自定义 css、80 多种代码高亮。&lt;/li&gt;
&lt;li&gt;能让 Markdown 内容，无需作任何调整就能&lt;strong&gt;一键复制&lt;/strong&gt;到微信公众号、博客园、掘金、知乎、csdn、51cto、wordpress、hexo。。。等平台。&lt;/li&gt;
&lt;li&gt;支持把图片自动上传到云图床;&lt;/li&gt;
&lt;li&gt;支持 Latex 数学公式在公众号等平台完美显示;&lt;/li&gt;
&lt;li&gt;支持生成带样式的 html 文件;&lt;/li&gt;
&lt;li&gt;甚至支持直接用原生的 html, css 排版。&lt;/li&gt;
&lt;/ul&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/IDE/2021-11-11-md2x-editor/</link>
      <pubDate>Thu, 11 Nov 2021 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/IDE/2021-11-11-md2x-editor/</guid>
      
    </item>
    
    <item>
      <title>使用 rz 和 sz 实现文件传输</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-11-08&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-11-08T00:00:00&#39;&gt;2021-11-08&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2024-09-06&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2024-09-06T00:00:00&#39;&gt;2024-09-06&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id=&#34;简介&#34;&gt;简介&lt;a class=&#34;headerlink&#34; href=&#34;#简介&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;rz&lt;/code&gt;&lt;/strong&gt;，&lt;strong&gt;&lt;code&gt;sz&lt;/code&gt;&lt;/strong&gt; 是 GNU 免费工具 &lt;strong&gt;&lt;code&gt;lrzsz&lt;/code&gt;&lt;/strong&gt; 的两个子命令行程序，它们是 Linux/Unix 同 Windows 进行 ZModem 文件传输的命令行工具，但是 Windows 端需要支持 ZModem 的 telnet/ssh 客户端，比如 Xshell 或者 SecureCRT 下可以使用。&lt;/p&gt;
&lt;p&gt;官网：&lt;a href=&#34;https://www.gnu.org/software/lrzsz/&#34;&gt;https://www.gnu.org/software/lrzsz/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;网络有些文章说 Putty 和 MobaXterm 无法使用 &lt;code&gt;lrzsz&lt;/code&gt;，其实通过安装插件 MobaXterm 是可以使用的，但体验没有 Xshell 或者 SecureCRT 好。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;lrzsz is a unix communication package providing the &lt;a href=&#34;ftp://ftp.std.com/obi/Standards/FileTransfer/YMODEM8.DOC.1.Z&#34;&gt;XMODEM, YMODEM&lt;/a&gt; &lt;a href=&#34;http://www.easysw.com/~mike/serial/zmodem.html&#34;&gt;ZMODEM&lt;/a&gt; file transfer protocols. lrzsz is a heavily rehacked version of the last public domain release of &lt;a href=&#34;http://www.omen.com/&#34;&gt;Omen Technologies&lt;/a&gt; rzsz package, and is now &lt;a href=&#34;http://www.gnu.ai.mit.edu/philosophy/free-sw.html&#34;&gt;free software&lt;/a&gt; and released under the &lt;a href=&#34;http://www.gnu.ai.mit.edu/copyleft/gpl.html&#34;&gt;GNU General Public Licence&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;lrzsz&lt;/code&gt; 是一个提供 XMODEM、YMODEM、ZMODEM 文件传输协议的 unix communication package。 &lt;code&gt;lrzsz&lt;/code&gt; 是 Omen Technologies rzsz 软件包最后一个公共领域版本的重整版，现在是免费软件，并在 GNU 通用公共许可证下发布。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;这两个命令也很好区分：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;sz：将选定的文件发送 (send) 到本地机器，s 作为 send 的简写；&lt;/li&gt;
&lt;li&gt;rz：运行该命令会弹出一个文件选择窗口，从本地选择文件上传 (receive) 到服务器，r 作为 receive 的简写。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;特点&#34;&gt;特点&lt;a class=&#34;headerlink&#34; href=&#34;#特点&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Features of lrzsz：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;非常便携，使用 GNU autoconf 自动配置。&lt;/li&gt;
&lt;li&gt;崩溃恢复（crash recovery）。&lt;/li&gt;
&lt;li&gt;高达 8KB 的块大小 (ZMODEM8K)。&lt;/li&gt;
&lt;li&gt;国际化（使用 GNU gettext）。德语翻译的程序输出（German translation of the programs output exists）。&lt;/li&gt;
&lt;li&gt;远比原始来源更安全。&lt;/li&gt;
&lt;li&gt;高性能。&lt;code&gt;make vcheck-z&lt;/code&gt; 可以查看 BPS 速率 - 我最近看到每秒 1.4 MB 通过管道传输大文件 (on a I586/133 system. Beat that!)。&lt;/li&gt;
&lt;li&gt;良好的块大小计算（尝试根据发生的错误数量计算最佳块大小）。&lt;/li&gt;
&lt;li&gt;它是免费软件。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;安装&#34;&gt;安装&lt;a class=&#34;headerlink&#34; href=&#34;#安装&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;安装也比较容易，这里以 openEuler 系统为例：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;yum&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;lrzsz
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FgUXVx-PHdHqsZ8Au9A-lKk3Y6hI.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;也可以选择从源码安装：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;wget&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://ohse.de/uwe/releases/lrzsz-0.12.20.tar.gz
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tar&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;zvxf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;lrzsz-0.12.20.tar.gz
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;lrzsz-0.12.20
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;./configure&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/path/to/lrzsz-0.12.20
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;使用&#34;&gt;使用&lt;a class=&#34;headerlink&#34; href=&#34;#使用&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;首先利用 Xshell 登录服务器，然后就可以直接使用 &lt;code&gt;rz&lt;/code&gt; 与 &lt;code&gt;sz&lt;/code&gt; 了。&lt;code&gt;sz&lt;/code&gt; 与 &lt;code&gt;rz&lt;/code&gt; 有很多选项参数，但是基本不用设置也可以。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sz&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--help
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;rz&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--help
-+,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--append&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;#将文件内容追加到已存在的同名文件&lt;/span&gt;
-a,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--ascii&lt;span class=&#34;w&#34;&gt;             &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;#以文本方式传输&lt;/span&gt;
-b,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--binary&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;#以二进制方式传输&lt;/span&gt;
--delay-startup&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;N&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;#等待 N 秒&lt;/span&gt;
-e,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--escape&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;#对字符转义&lt;/span&gt;
-E,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--rename&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;#已存在同名文件则重命名新上传的文件，以点和数字作为后缀&lt;/span&gt;
-p,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--protect&lt;span class=&#34;w&#34;&gt;           &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;#对ZMODEM协议有效，如果目标文件已存在则跳过&lt;/span&gt;
-q,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--quiet&lt;span class=&#34;w&#34;&gt;             &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;#安静执行，不输出提示信息&lt;/span&gt;
-v,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--verbose&lt;span class=&#34;w&#34;&gt;           &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;#输出传输过程中的提示信息&lt;/span&gt;
-y,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--overwrite&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;#存在同名文件则替换&lt;/span&gt;
-X,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--xmodem&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;#使用XMODEM协议&lt;/span&gt;
-y,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--overwrite&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;#Yes, clobber existing file if any&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;--ymodem&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;#使用YMODEM协议&lt;/span&gt;
-Z,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--zmodem&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;#使用ZMODEM协议&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;sz-下载案例&#34;&gt;sz 下载案例&lt;a class=&#34;headerlink&#34; href=&#34;#sz-下载案例&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;将两个文件传输到本地，直接 sz 发送，后面接文件名，回车之后就会弹出 Windows 对话框，选择要保存的位置即可，然后就开始传输了（一般传输小文件比较好）。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FmS5BFdZPqw2HzVYsTJWzeqYPT5_.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;rz-上传案例&#34;&gt;rz 上传案例&lt;a class=&#34;headerlink&#34; href=&#34;#rz-上传案例&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;直接在命令行输入 rz 命令，稍后就会弹出 Windows 对话框，选择要上传的文件，确认之后就开始传输了。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FrdDeUAQEyMJP5_7SEWZz4vAunp1.png&#34; /&gt;
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FgyAQ4sZh3xxzFjemYlYGM8ZJSD0.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;mobaxterm-上使用&#34;&gt;MobaXterm 上使用&lt;a class=&#34;headerlink&#34; href=&#34;#mobaxterm-上使用&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;不是所有工具都支持 &lt;code&gt;rz&lt;/code&gt; 与 &lt;code&gt;sz&lt;/code&gt;，必须支持 ZModem 协议才行，例如 putty 不能使用 &lt;code&gt;rz&lt;/code&gt; 与 &lt;code&gt;sz&lt;/code&gt;。MobaXterm 默认也不支持 &lt;code&gt;rz&lt;/code&gt; 与 &lt;code&gt;sz&lt;/code&gt;，但可以通过安装插件实现。&lt;/p&gt;
&lt;p&gt;首先，下载 &lt;code&gt;CygUtils.plugin&lt;/code&gt; 和 &lt;code&gt;lrzsz&lt;/code&gt; 插件，放到 &lt;code&gt;mobaxterm.exe&lt;/code&gt; 目录。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;网址：&lt;a href=&#34;https://mobaxterm.mobatek.net/plugins.html&#34;&gt;https://mobaxterm.mobatek.net/plugins.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;插件：CygUtils.plugin，Lrzsz&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;然后，在 Linux 下输入 rz/sz 命令，此时会出现一行类似乱码的东西，不要紧，我们操作第三步：
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fv5ofP0Sup6fwfbgGvlo5FiWcjvX.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;第三步，在界面当中使用 Ctrl+右键，打开选择框如下：
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FszKjyyYDT_74e11jPx55Z3EVJ4N.png&#34; /&gt;
然后点击相应的按钮就可以了，现在就会弹出文件选择框了。&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E6%96%87%E4%BB%B6%E5%90%8C%E6%AD%A5%E4%BC%A0%E8%BE%93/2021-11-08-lrzsz/</link>
      <pubDate>Mon, 08 Nov 2021 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E6%96%87%E4%BB%B6%E5%90%8C%E6%AD%A5%E4%BC%A0%E8%BE%93/2021-11-08-lrzsz/</guid>
      
    </item>
    
    <item>
      <title>关于 openEuler</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-10-27&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-10-27T00:00:00&#39;&gt;2021-10-27&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2023-07-19&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2023-07-19T15:39:51&#39;&gt;2023-07-19&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id=&#34;论坛社区&#34;&gt;论坛社区&lt;a class=&#34;headerlink&#34; href=&#34;#论坛社区&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;openEuler 官网：&lt;a href=&#34;https://www.openeuler.org/&#34;&gt;https://www.openeuler.org/&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;文档资料&#34;&gt;文档资料&lt;a class=&#34;headerlink&#34; href=&#34;#文档资料&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;openEuler 官方文档链接，相关的一系列操作可以直接参考官方文档。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://docs.openeuler.org/zh/&#34;&gt;openEuler documentation&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FoNUiVkKzDi-CFe_6t7hdeq74p3N.png&#34; /&gt;&lt;/p&gt;
&lt;h1 id=&#34;_1&#34;&gt;&lt;a class=&#34;headerlink&#34; href=&#34;#_1&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;</description>
      <link>https://shenwy.com/yuque/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/openEuler/2021-10-27-about-openeuler/</link>
      <pubDate>Wed, 27 Oct 2021 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/openEuler/2021-10-27-about-openeuler/</guid>
      
    </item>
    
    <item>
      <title>关于 Debian 和 Ubuntu</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-10-21&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-10-21T00:00:00&#39;&gt;2021-10-21&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2023-07-19&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2023-07-19T15:41:04&#39;&gt;2023-07-19&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;根据官网最新的产品规范，CentOS 7 在 2024 年停止支持，CentOS 8 将在今年年末停止支持。产品规范链接：&lt;a href=&#34;https://wiki.centos.org/zh/About/Product&#34;&gt;https://wiki.centos.org/zh/About/Product&lt;/a&gt;
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fn5oaKELIUKI21mN4tRN_P5bydtI.png&#34; /&gt;
所以，想着要入手 Debian 学习和折腾一番，刚好腾讯云有个 2 核 4G，80GB SSD 盘的轻量云服务器，首年才 74 块，于是开始入手。&lt;/p&gt;
&lt;h2 id=&#34;论坛社区&#34;&gt;论坛社区&lt;a class=&#34;headerlink&#34; href=&#34;#论坛社区&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;官网：&lt;a href=&#34;https://www.debian.org/&#34;&gt;https://www.debian.org/&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;文档资料&#34;&gt;文档资料&lt;a class=&#34;headerlink&#34; href=&#34;#文档资料&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;《&lt;a href=&#34;https://www.debian.org/doc/user-manuals.zh-cn.html&#34;&gt;Debian 用户手册&lt;/a&gt;》&lt;/li&gt;
&lt;li&gt;《&lt;a href=&#34;https://debian-handbook.info/browse/zh-CN/stable/&#34;&gt;Debian 管理员手册&lt;/a&gt;》：一本介绍 Debian 发行版的书，从初始的安装过程到配置各种服务。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;其他资料&#34;&gt;其他资料&lt;a class=&#34;headerlink&#34; href=&#34;#其他资料&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;张亚，《&lt;a href=&#34;https://www.cnblogs.com/alaska/p/14141992.html&#34;&gt;[Linux]-Debian10 基础使用&lt;/a&gt;》，博客园&lt;/li&gt;
&lt;/ol&gt;</description>
      <link>https://shenwy.com/yuque/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/Debian/2021-10-21-about-debian-ubuntu/</link>
      <pubDate>Thu, 21 Oct 2021 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/Debian/2021-10-21-about-debian-ubuntu/</guid>
      
    </item>
    
    <item>
      <title>SSH 登录与配置</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;h1 id=&#34;解决-ssh-failed-permission-denied&#34;&gt;解决 SSH Failed Permission Denied&lt;a class=&#34;headerlink&#34; href=&#34;#解决-ssh-failed-permission-denied&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-10-08&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-10-08T00:00:00&#39;&gt;2021-10-08&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2022-08-18&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2022-08-18T09:23:54&#39;&gt;2022-08-18&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;在 SSH 服务器上修改了与权限相关的设置之后，会出现 SSH 权限拒绝错误（SSH Permission denied error）。通常的场景包括安装新的软件包或创建新用户。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FuDhlk0w8wDpdRM2uh0B508OzPs9.png&#34; /&gt;
在本教程中，您将学习如何排除 SSH Permission denied 错误并重新连接到 SSH 服务器。&lt;/p&gt;
&lt;h3 id=&#34;前提条件&#34;&gt;前提条件&lt;a class=&#34;headerlink&#34; href=&#34;#前提条件&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;以本地计算机作为 SSH Client 客户机和远程系统作为 SSH server 服务器。&lt;/li&gt;
&lt;li&gt;通过一个用户账号对远程服务器进行访问(用于基于密码的登录)。&lt;/li&gt;
&lt;li&gt;需要一个具有 sudo 或 root 特权的用户帐户(用于修改 SSH 相关配置)。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;ssh-权限拒绝&#34;&gt;SSH 权限拒绝&lt;a class=&#34;headerlink&#34; href=&#34;#ssh-权限拒绝&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;当尝试通过 SSH 进入服务器时，会出现 SSH 权限拒绝错误：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Permission&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;denied&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;publickey,gssapi-keyex,gssapi-with-mic&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fl0Um1zz_a2haoBC95bM-E9iyATa.png&#34; /&gt;
在 Permission denied 语句之后，括号里面包含了在连接启动时失败时尝试的身份验证方法。这个错误表明公钥才是问题所在，这其实是一种误导。&lt;/p&gt;
&lt;p&gt;出现该错误的一个原因可能是与 &lt;strong&gt;sshd_config&lt;/strong&gt; 的配置有关，这个文件包含了 SSH 服务器的配置。另一种可能性是授权的 &lt;strong&gt;authorized_keys&lt;/strong&gt; 文件没有足够的权限，这个文件包含了允许从 Client 客户机 SSH 到远程服务器的公钥列表。因此，当系统无法正常读取文件就会导致“权限拒绝”错误。&lt;/p&gt;
&lt;h3 id=&#34;修复-ssh-permission-denied&#34;&gt;修复 SSH Permission denied&lt;a class=&#34;headerlink&#34; href=&#34;#修复-ssh-permission-denied&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;两个解决方案都包含需要在服务器端执行的步骤。首先打开服务器上的终端，然后执行下面的解决方案之一。&lt;/p&gt;
&lt;h4 id=&#34;解决方案-1启用密码身份验证&#34;&gt;解决方案 1：启用密码身份验证&lt;a class=&#34;headerlink&#34; href=&#34;#解决方案-1启用密码身份验证&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;如果您想使用密码访问 SSH 服务器，修复 Permission denied 错误的解决方案是在 &lt;strong&gt;sshd_config&lt;/strong&gt; 文件中启用密码登录。&lt;/p&gt;
&lt;p&gt;要做到这一点，在文本编辑器中打开文件：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;sudo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;nano&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/etc/ssh/sshd_config
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;在文件中，找到 &lt;strong&gt;PasswordAuthentication&lt;/strong&gt; 行，并确保它以 &lt;strong&gt;yes&lt;/strong&gt; 结尾。&lt;/li&gt;
&lt;li&gt;在文件中，找到 &lt;strong&gt;ChallengeResponseAuthentication&lt;/strong&gt; 选项，并通过添加 &lt;strong&gt;no&lt;/strong&gt; 来禁用它。&lt;/li&gt;
&lt;li&gt;如果行被注释掉了，删除散列符号** #** 以取消注释。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FvmtituWoEUKfE68c3lIOvjlQZJD.png&#34; /&gt;
保存文件并退出。&lt;/p&gt;
&lt;p&gt;最后，通过输入以下命令重新启动 SSH 服务：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;sudo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;systemctl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;restart&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sshd
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4 id=&#34;解决方案-2更改文件系统权限&#34;&gt;解决方案 2：更改文件系统权限&lt;a class=&#34;headerlink&#34; href=&#34;#解决方案-2更改文件系统权限&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;出于安全考虑，不推荐使用基于密码的登录作为 SSH 身份验证方法。因此，下面的解决方案可能是可取的，因为它解决了公共密钥认证的方法。&lt;/p&gt;
&lt;p&gt;首先，使用文本编辑器打开 sshd_config 文件：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;sudo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;nano&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/etc/ssh/sshd_config
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;在文件中，确保下列选项设置如下：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;PermitRootLogin&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;no
PubkeyAuthentication&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;yes
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FmBtxXXzvWUgnE0hmbGqc99dOFBz.png&#34; /&gt;
:::tips
**注意: **以上步骤被认为是最佳安全实践。如果需要使用 root 登录，请将相关行设置为 &lt;strong&gt;yes&lt;/strong&gt;。
:::&lt;/p&gt;
&lt;p&gt;注释掉与 gssapi 相关的选项，在行首添加 # 符号：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;#GSSAPIAuthentication yes&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;#GSSAPICleanupCredentials no&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FvrgRKB3xIKFGJ5YH8CCouJtb_O1.png&#34; /&gt;
另外，确保 &lt;strong&gt;UsePAM&lt;/strong&gt; 行设置为 &lt;strong&gt;yes&lt;/strong&gt;：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;UsePAM&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;yes
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FuoChiJxnlCg3somKCSt5EKyBI1C.png&#34; /&gt;
保存文件并重新启动 sshd 服务：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;systemctl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;restart&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sshd
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;接下来，导航到你的主文件夹并检查权限：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;ls&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-ld
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FhsXKH2Qsd6vgBpZnwUkkWShZw2A.png&#34; /&gt;
如果您的所有者权限没有设置为读、写和执行(&lt;strong&gt;drwx------&lt;/strong&gt;) ，请使用 &lt;strong&gt;chmod&lt;/strong&gt; 命令更改它们：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;chmod&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0700&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/home/&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;your-username&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;现在进入 &lt;strong&gt;.ssh&lt;/strong&gt; 文件夹，并重新检查该目录的权限：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;ls&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-ld
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FuSd31JgCeH2hRZ4FZ3xWed-sWtJ.png&#34; /&gt;
这个目录还应该具有文件所有者的读、写和执行权限，如果没有，请使用 &lt;strong&gt;chmod&lt;/strong&gt; 命令更改它们：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;chmod&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0700&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/home/your_home/.ssh
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;接着，再来检查 .&lt;strong&gt;ssh&lt;/strong&gt; 文件夹包含授权的 &lt;strong&gt;authorized_keys&lt;/strong&gt; 文件的权限：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;ls&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;–ld&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;authorized_keys
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FnrHAhLGh4q6rv9bfwj9izV45_wd.png&#34; /&gt;
文件所有者应该具有该 &lt;strong&gt;authorized_keys&lt;/strong&gt; 文件的读写权限。如果没有，请使用下面的方法修改：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;chmod&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0600&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/home/&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;username&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;/.ssh/authorized_keys
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;现在再次尝试使用密钥对登录。下面的输出显示了一次成功的登录尝试。
&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fv4k89FRw83fFI31fSukTwPzjJ0X.png&#34; /&gt;
:::tips
**注意：**有关 Linux 文件权限的详细信息，请阅读 Linux 文件权限教程。
:::&lt;/p&gt;
&lt;h2 id=&#34;总结&#34;&gt;总结&lt;a class=&#34;headerlink&#34; href=&#34;#总结&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;本教程介绍了解决 SSH Permission denied (publikey、 gssapi-keyex、 gssapi-with-mic) 错误所需的步骤。通过完成指南中的步骤，您应该可以修复错误并成功地通过 SSH 连接到服务器。&lt;/p&gt;
&lt;h1 id=&#34;解决-ssh-一段时间不操作就退出&#34;&gt;解决 SSH 一段时间不操作就退出&lt;a class=&#34;headerlink&#34; href=&#34;#解决-ssh-一段时间不操作就退出&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;在 CentOS/openEuler/Debian 系统上，发现了这个问题，SSH 登录后，一段时间吧不操作，SSH 就会自动退出。解决这个问题的办法，可以修改 SSH 服务器端的配置，也可以修改 SSH 客户端的配置。&lt;/p&gt;
&lt;h2 id=&#34;修改-ssh-服务端的配置&#34;&gt;修改 SSH 服务端的配置&lt;a class=&#34;headerlink&#34; href=&#34;#修改-ssh-服务端的配置&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;sudo vim /etc/ssh/sshd_config&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;把下面这两行的注册打开，然后修改参数：
&lt;strong&gt;ClientAliveInterval 30&lt;/strong&gt; # 表示每 30 秒服务器向客户端发起一次心跳，如果客户端响应就保持连接
&lt;strong&gt;ClientAliveCountMax 5&lt;/strong&gt; # 如果连续 5 次服务器收不到心跳，就断开连接&lt;/p&gt;
&lt;p&gt;以上两个参数，可以根据自己的情况来设置。&lt;/p&gt;
&lt;p&gt;最后，配置要生效，需要重启 sshd 服务：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;systemctl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;restart&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sshd.service

&lt;span class=&#34;c1&#34;&gt;#或者&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;service&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sshd&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;restart
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;正常情况，客户端不会不响应服务器的心跳，因此 SSH 客户端就不会再自动退出了。&lt;/p&gt;
&lt;h2 id=&#34;修改-ssh-客户端的配置&#34;&gt;修改 SSH 客户端的配置&lt;a class=&#34;headerlink&#34; href=&#34;#修改-ssh-客户端的配置&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;修改客户端的配置的好处是，不需要重启服务端，如果你没有权限修改 SSH 服务器，也只能修改客户端的配置了。
&lt;strong&gt;sudo vim /etc/ssh/ssh_config&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;增加：
&lt;strong&gt;TCPKeepAlive yes&lt;/strong&gt; # 据说这个配置项默认是开启的
&lt;strong&gt;ServerAliveInterval 30&lt;/strong&gt; #客户端主动向服务端请求响应的间隔
&lt;strong&gt;ServerAliveCountMax 5&lt;/strong&gt; # 连续 5 次客户端收不到服务器的响应，就是退出链接&lt;/p&gt;
&lt;p&gt;好像大家都不太喜欢修改客户端的配置，而更新换直接在 ssh 命令行上输入这些配置项：
&lt;strong&gt;ssh -o TCPKeepAlive=yes -o ServerAliveInterval=30 -o ServerAliveCountMax=5 username\@serverip&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;使用的是 -o 参数。&lt;/p&gt;
&lt;p&gt;SSH 断开链接原因，常常是因为长时间没有数据传输，被中间的路由器掐断的。有了心跳，就可以解决这个问题。&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%85%8D%E7%BD%AE%E4%BD%BF%E7%94%A8/2021-10-08-ssh-config/</link>
      <pubDate>Fri, 08 Oct 2021 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%85%8D%E7%BD%AE%E4%BD%BF%E7%94%A8/2021-10-08-ssh-config/</guid>
      
    </item>
    
    <item>
      <title>腾讯云/阿里云升级 Rocky Linux</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-09-30&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-09-30T00:00:00&#39;&gt;2021-09-30&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2022-05-27&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2022-05-27T12:05:55&#39;&gt;2022-05-27&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;昨天在语雀开了一个话题讨论《&lt;a href=&#34;https://www.yuque.com/bioitee/topics/3&#34;&gt;CentOS 7 和 8 不维护停止更新之后，服务器选择使用什么系统好？&lt;/a&gt;》，在&lt;a href=&#34;https://www.v2ex.com/t/805300&#34;&gt; V2EX&lt;/a&gt; 收到不少回复。&lt;/p&gt;
&lt;p&gt;在前几天正好入手了腾讯云/阿里云的一个 2 核 4G，80GB SSD 盘的轻量云服务器，首年才 74，作为尝鲜一开始装了个 Debian 10，不得不说，RH 系用久了，回到 Debian/Ubuntu 还真是一下子没适应过来。&lt;/p&gt;
&lt;p&gt;也看到不少朋友都已经在生产环境用上了 Rocky Linux 和 CentOS 8 无缝对接，突发奇想也想体验一下，搜了一圈发现虽然 Rocky Linux 迁移和安装的教程不少，但唯独没找到在云服务上的迁移的，而且目前国内的阿里云/腾讯云/华为云都没有提供 Rocky Linux 的镜像，于是开始自己折腾。&lt;/p&gt;
&lt;h2 id=&#34;安装前准备&#34;&gt;安装前准备&lt;a class=&#34;headerlink&#34; href=&#34;#安装前准备&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;步骤 1. 首先，把你的服务器变更成 CentOS 8.x 系统。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fk1qd_KA0bQQGzVlj9Uu_tQQZ9uy.png&#34; /&gt;
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FqaH_jPUZfUgkZAmwc4ArAdgoh9P.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;如果你用的是阿里云的 ECS（或者轻量云服务，个人用的是轻量云服务器），可以先升级到 CentOS 8.2 的系统。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FtaE7Ybb8ewn_cJAxlYFqd9Zah5B.png&#34; /&gt;
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FjCrRWqy1hrIsHHOYghc8rB78VmF.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;步骤 2. 然后，让我们先确保您的系统是最新的（如果已经是 CentOS 8.0 及以上，可以不用执行这一步）。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 这一步会把系统升级到最新的版本，如果你是 CentOS 8.0，可能会升级到 8.5&lt;/span&gt;
sudo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;dnf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;update
sudo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;dnf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;upgrade
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;步骤 3. 下载 Rocky Linux 8 到 CentOS 8 的迁移脚本。&lt;/p&gt;
&lt;p&gt;Rocky Linux 提供了一个名为的工具 &lt;a href=&#34;https://docs.rockylinux.org/zh/guides/migrate2rocky/&#34;&gt;migrate2rocky&lt;/a&gt;，该工具已在许多 RHEL 变体（例如 CentOS、AlmaLinux 和 Oracle Linux）上成功测试：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;curl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://raw.githubusercontent.com/rocky-linux/rocky-tools/main/migrate2rocky/migrate2rocky.sh&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-o&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;migrate2rocky.sh
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;或者，可以通过 git 下载：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;dnf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;git
git&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;clone&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://github.com/rocky-linux/rocky-tools.git
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;安装&#34;&gt;安装&lt;a class=&#34;headerlink&#34; href=&#34;#安装&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;这可能是最简单的一点。 登录到您的服务器，然后使用命令放终端 cd 到包含 migrate2rocky.sh 文件的文件目录。&lt;/p&gt;
&lt;p&gt;然后，确保文件是可执行的：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;sudo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;chmod&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;+x&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;migrate2rocky.sh
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;接下来，执行脚本：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;./migrate2rocky.sh -r
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;-r 选项告诉脚本继续安装所有内容 (That &amp;ldquo;-r&amp;rdquo; option tells the script to just go ahead and install everything.)。&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;./migrate2rocky.sh&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-r
Preparing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;migrate&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;CentOS&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Linux&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;8&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Rocky&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Linux&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;8&lt;/span&gt;.

Determining&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;repository&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;names&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;CentOS&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Linux&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;8&lt;/span&gt;.....

Found&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;following&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;repositories&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;which&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;map&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;CentOS&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Linux&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;8&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Rocky&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Linux&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;8&lt;/span&gt;:
CentOS&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Linux&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;8&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Rocky&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Linux&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;8&lt;/span&gt;
appstream&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;appstream
baseos&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;baseos
extras&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;extras

Getting&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;system&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;names&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;CentOS&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Linux&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;8&lt;/span&gt;.......

Found&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;following&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;system&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;packages&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;which&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;map&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;CentOS&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Linux&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;8&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Rocky&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Linux&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;8&lt;/span&gt;:
CentOS&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Linux&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;8&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;Rocky&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Linux&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;8&lt;/span&gt;
centos-backgrounds&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;rocky-backgrounds
centos-gpg-keys&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;rocky-gpg-keys
centos-logos&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;rocky-logos
centos-indexhtml&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;rocky-indexhtml
centos-linux-release&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;rocky-release
centos-linux-repos&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;rocky-repos
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;...&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;如果出现以下的报错信息，则参考 &lt;a href=&#34;https://bugzilla.redhat.com/show_bug.cgi?id=1961083&#34;&gt;Invalid configuration value: failovermethod=priority in repo config files&lt;/a&gt;，把 failovermethod=priority 一行从 /etc/yum.repos.d/CentOS-epel.repo 中删除。&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@iZ7xv4bbjwm8qgx8m72z68Z&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# ./migrate2rocky.sh -r&lt;/span&gt;

Removing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;dnf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;cache
Preparing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;migrate&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;CentOS&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Linux&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;8&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Rocky&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Linux&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;8&lt;/span&gt;.

Determining&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;repository&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;names&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;CentOS&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Linux&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;8&lt;/span&gt;.Invalid&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;configuration&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;value:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;failovermethod&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;priority&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/etc/yum.repos.d/CentOS-epel.repo&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Configuration:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;OptionBinding&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;id&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;failovermethod&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;does&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;exist
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;成功迁移 Rocky Linux 后，您应该会看到以下输出：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;...
Complete!

Done,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;please&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;reboot&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;your&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;system.
A&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;log&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;this&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;installation&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;can&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;be&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;found&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;at&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/var/log/migrate2rocky.log
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fr1ZwTn16QfdEweKjhpCu1Yajb9K.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FitnvEWO4d23TX-NSQz-pObx8xuO.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;然后，运行以下命令来同步已安装的软件包，然后只需重新启动系统：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;sudo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;dnf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;distro-sync&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-y
sudo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;reboot
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FsTMKsGBRiRbvRM3DdeYrEfYgDU0.png&#34; /&gt;
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fus9rZsnBGvgLohr18SnW1ZKByPu.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;检查操作系统版本&#34;&gt;检查操作系统版本&lt;a class=&#34;headerlink&#34; href=&#34;#检查操作系统版本&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;为了确认您已成功迁移到 Rocky Linux，请检查操作系统版本：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;cat&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/etc/redhat-release
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;输出：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Rocky&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Linux&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;release&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;8&lt;/span&gt;.4&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;Green&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Obsidian&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FlNtsYaHWfIDJhP9Vb5x1fq7gtsg.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fp801elk1r_VJpvx1bzvp4L0Q-ks.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;参考资料&#34;&gt;参考资料&lt;a class=&#34;headerlink&#34; href=&#34;#参考资料&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.rockylinux.org/guides/migrate2rocky/&#34;&gt;Migrating To Rocky Linux - Documentation&lt;/a&gt;，官方文档&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.xtuos.com/2819.html&#34;&gt;如何从 CentOS 8 迁移到 Rocky Linux 8&lt;/a&gt; - 统信 UOS 之家&lt;/li&gt;
&lt;/ol&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%85%8D%E7%BD%AE%E4%BD%BF%E7%94%A8/2021-09-30-cvm-migrate2rocky/</link>
      <pubDate>Thu, 30 Sep 2021 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%85%8D%E7%BD%AE%E4%BD%BF%E7%94%A8/2021-09-30-cvm-migrate2rocky/</guid>
      
    </item>
    
    <item>
      <title>Python 获取 NCBI 基因名 SSL 证书出现异常</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-09-26&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-09-26T00:00:00&#39;&gt;2021-09-26&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-11-06&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-11-06T19:29:44&#39;&gt;2021-11-06&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;源自于前几天对一批转录本的批量化操作的一些记录。&lt;/p&gt;
&lt;p&gt;即想要通过 Python 在线获取某个转录本对应的基因 Symbol 时，发现出现 SSL 无法获取本地证书：&lt;strong&gt;unable to get local issuer certificate (_ssl.c:1056)&lt;/strong&gt;！&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;Bio&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;SeqIO&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;Bio&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Entrez&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Entrez&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;email&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;A.N.Other@example.com&amp;quot;&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;records&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;SeqIO&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;parse&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Entrez&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;efetch&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;NM_001009537.4&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;db&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;nucleotide&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;rettype&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;gb&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;retmode&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;text&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;gb&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Traceback&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;most&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;recent&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;call&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;last&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
  &lt;span class=&#34;n&#34;&gt;File&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;/home/shenweiyan/software/Python-3.7.3/lib/python3.7/urllib/request.py&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;line&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1317&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;do_open&lt;/span&gt;
    &lt;span class=&#34;n&#34;&gt;encode_chunked&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;req&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;has_header&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Transfer-encoding&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
  &lt;span class=&#34;n&#34;&gt;File&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;/home/shenweiyan/software/Python-3.7.3/lib/python3.7/http/client.py&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;line&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1229&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;request&lt;/span&gt;
    &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;_send_request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;method&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;body&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;headers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;encode_chunked&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
  &lt;span class=&#34;n&#34;&gt;File&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;/home/shenweiyan/software/Python-3.7.3/lib/python3.7/http/client.py&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;line&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1275&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;_send_request&lt;/span&gt;
    &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;endheaders&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;body&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;encode_chunked&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;encode_chunked&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
  &lt;span class=&#34;n&#34;&gt;File&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;/home/shenweiyan/software/Python-3.7.3/lib/python3.7/http/client.py&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;line&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1224&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;endheaders&lt;/span&gt;
    &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;_send_output&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;message_body&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;encode_chunked&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;encode_chunked&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
  &lt;span class=&#34;n&#34;&gt;File&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;/home/shenweiyan/software/Python-3.7.3/lib/python3.7/http/client.py&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;line&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1016&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;_send_output&lt;/span&gt;
    &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;send&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;msg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
  &lt;span class=&#34;n&#34;&gt;File&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;/home/shenweiyan/software/Python-3.7.3/lib/python3.7/http/client.py&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;line&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;956&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;send&lt;/span&gt;
    &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;connect&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
  &lt;span class=&#34;n&#34;&gt;File&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;/home/shenweiyan/software/Python-3.7.3/lib/python3.7/http/client.py&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;line&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1392&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;connect&lt;/span&gt;
    &lt;span class=&#34;n&#34;&gt;server_hostname&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;server_hostname&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
  &lt;span class=&#34;n&#34;&gt;File&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;/home/shenweiyan/software/Python-3.7.3/lib/python3.7/ssl.py&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;line&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;412&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;wrap_socket&lt;/span&gt;
    &lt;span class=&#34;n&#34;&gt;session&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;session&lt;/span&gt;
  &lt;span class=&#34;n&#34;&gt;File&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;/home/shenweiyan/software/Python-3.7.3/lib/python3.7/ssl.py&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;line&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;853&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;_create&lt;/span&gt;
    &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;do_handshake&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
  &lt;span class=&#34;n&#34;&gt;File&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;/home/shenweiyan/software/Python-3.7.3/lib/python3.7/ssl.py&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;line&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1117&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;do_handshake&lt;/span&gt;
    &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;_sslobj&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;do_handshake&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;ssl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SSLCertVerificationError&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SSL&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;CERTIFICATE_VERIFY_FAILED&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;certificate&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;verify&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;failed&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;unable&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;to&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;get&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;local&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;issuer&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;certificate&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;_ssl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1056&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;During&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;handling&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;of&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;the&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;above&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;exception&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;another&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;exception&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;occurred&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;Traceback&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;most&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;recent&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;call&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;last&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
  &lt;span class=&#34;n&#34;&gt;File&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;&amp;lt;stdin&amp;gt;&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;line&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;module&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
  &lt;span class=&#34;n&#34;&gt;File&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;/home/shenweiyan/software/Python-3.7.3/lib/python3.7/site-packages/Bio/Entrez/__init__.py&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;line&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;184&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;efetch&lt;/span&gt;
    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;_open&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cgi&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;variables&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;post&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;post&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
  &lt;span class=&#34;n&#34;&gt;File&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;/home/shenweiyan/software/Python-3.7.3/lib/python3.7/site-packages/Bio/Entrez/__init__.py&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;line&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;543&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;_open&lt;/span&gt;
    &lt;span class=&#34;n&#34;&gt;handle&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;_urlopen&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cgi&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
  &lt;span class=&#34;n&#34;&gt;File&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;/home/shenweiyan/software/Python-3.7.3/lib/python3.7/urllib/request.py&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;line&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;222&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;urlopen&lt;/span&gt;
    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;opener&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;open&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;timeout&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
  &lt;span class=&#34;n&#34;&gt;File&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;/home/shenweiyan/software/Python-3.7.3/lib/python3.7/urllib/request.py&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;line&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;525&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;open&lt;/span&gt;
    &lt;span class=&#34;n&#34;&gt;response&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;_open&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;req&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
  &lt;span class=&#34;n&#34;&gt;File&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;/home/shenweiyan/software/Python-3.7.3/lib/python3.7/urllib/request.py&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;line&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;543&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;_open&lt;/span&gt;
    &lt;span class=&#34;s1&#34;&gt;&amp;#39;_open&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;req&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
  &lt;span class=&#34;n&#34;&gt;File&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;/home/shenweiyan/software/Python-3.7.3/lib/python3.7/urllib/request.py&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;line&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;503&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;_call_chain&lt;/span&gt;
    &lt;span class=&#34;n&#34;&gt;result&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;func&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
  &lt;span class=&#34;n&#34;&gt;File&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;/home/shenweiyan/software/Python-3.7.3/lib/python3.7/urllib/request.py&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;line&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1360&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;https_open&lt;/span&gt;
    &lt;span class=&#34;n&#34;&gt;context&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;_context&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;check_hostname&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;_check_hostname&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
  &lt;span class=&#34;n&#34;&gt;File&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;/home/shenweiyan/software/Python-3.7.3/lib/python3.7/urllib/request.py&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;line&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1319&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;do_open&lt;/span&gt;
    &lt;span class=&#34;k&#34;&gt;raise&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;URLError&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;err&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;urllib&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;error&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;URLError&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;urlopen&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;error&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SSL&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;CERTIFICATE_VERIFY_FAILED&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;certificate&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;verify&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;failed&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;unable&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;to&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;get&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;local&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;issuer&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;certificate&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;_ssl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1056&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;根据网络上的解析，当使用 &lt;strong&gt;urllib.urlopen&lt;/strong&gt; 打开一个 https 链接时，会验证一次 SSL 证书。而当目标网站使用的是自签名的证书时就会抛出如下异常：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1056)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;解决方法也很简单，下面是个人简单总结的 3 种常用解决方法。&lt;/p&gt;
&lt;h3 id=&#34;方法一全局取消证书验证&#34;&gt;方法一，全局取消证书验证&lt;a class=&#34;headerlink&#34; href=&#34;#方法一全局取消证书验证&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;ssl&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ssl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;_create_default_https_context&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ssl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;_create_unverified_context&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;方法二指定位置安装证书&#34;&gt;方法二，指定位置安装证书&lt;a class=&#34;headerlink&#34; href=&#34;#方法二指定位置安装证书&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;查看证书默认位置。&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;ssl&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ssl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get_default_verify_paths&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;DefaultVerifyPaths&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cafile&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;capath&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;/home/shenweiyan/software/LibDependence/openssl-1.1.1/ssl/certs&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;openssl_cafile_env&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;SSL_CERT_FILE&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;openssl_cafile&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;/home/shenweiyan/software/LibDependence/openssl-1.1.1/ssl/cert.pem&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;openssl_capath_env&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;SSL_CERT_DIR&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;openssl_capath&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;/home/shenweiyan/software/LibDependence/openssl-1.1.1/ssl/certs&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;由于在 &lt;strong&gt;openssl_cafile&lt;/strong&gt; 中指定的 CA 文件（&lt;strong&gt;cert.pem&lt;/strong&gt;）不存在，所以导致上面的错误。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;下载 CA 文件，将下载的 CA 文件放到 &lt;strong&gt;openssl_cafile&lt;/strong&gt; 指定位置。注意，如果放到 &lt;strong&gt;openssl_capath&lt;/strong&gt; 目录下还会出现类似的问题，一定要放到 &lt;strong&gt;openssl_cafile&lt;/strong&gt; 指定的位置。&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;err&#34;&gt;$&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cd&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;home&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;shenweiyan&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;software&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;LibDependence&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;openssl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;1.1.1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ssl&lt;/span&gt;
&lt;span class=&#34;err&#34;&gt;$&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;wget&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;http&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;//&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;curl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;haxx&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;se&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ca&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cacert&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pem&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;O&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cert&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pem&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;no&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;check&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;certificate&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;方法三设置环境变量&#34;&gt;方法三，设置环境变量&lt;a class=&#34;headerlink&#34; href=&#34;#方法三设置环境变量&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;也可以参考 &lt;a href=&#34;https://stackoverflow.com/questions/55736855/how-to-change-the-cafile-argument-in-the-ssl-module-in-python3&#34;&gt;stackoverflow&lt;/a&gt; 上的做法，通过修改下面环境变量的方式解决（亲测可行）。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;SSL_CERT_FILE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;usr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;local&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;etc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;openssl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cert&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pem&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;REQUESTS_CA_BUNDLE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;usr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;local&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;etc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;openssl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cert&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pem&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;最后，问题解决。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;Bio&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;SeqIO&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;Bio&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Entrez&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Entrez&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;email&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;A.N.Other@example.com&amp;quot;&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;records&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;SeqIO&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;parse&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Entrez&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;efetch&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;NM_001009537.4&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;db&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;nucleotide&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;rettype&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;gb&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;retmode&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;text&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;gb&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;record&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;records&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;...&lt;/span&gt;     &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;feature&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;record&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;features&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;...&lt;/span&gt;         &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;feature&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;type&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;gene&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;...&lt;/span&gt;             &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;feature&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;qualifiers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;gene&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;...&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Zfp799&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
      <link>https://shenwy.com/yuque/%E7%94%9F%E7%89%A9%E4%BF%A1%E6%81%AF/%E6%95%B0%E6%8D%AE/2021-09-26-unable-to-get-local-issuer-certifica/</link>
      <pubDate>Sun, 26 Sep 2021 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E7%94%9F%E7%89%A9%E4%BF%A1%E6%81%AF/%E6%95%B0%E6%8D%AE/2021-09-26-unable-to-get-local-issuer-certifica/</guid>
      
    </item>
    
    <item>
      <title>使用腾讯 CODING 托管并自动部署 Hugo 网站</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-09-10&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-09-10T00:00:00&#39;&gt;2021-09-10&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2022-11-25&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2022-11-25T09:51:15&#39;&gt;2022-11-25&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;一直以来，个人的很多应用站点，包括博客、&lt;a href=&#34;https://mdx.ncbix.com/&#34;&gt;MDX&lt;/a&gt;、&lt;a href=&#34;https://nav.bioitee.com/&#34;&gt;BioIT 网址导航&lt;/a&gt;等，都托管和部署在了 Coding 上，而且用的基本都是网站托管服务中的**&amp;ldquo;静态网站&amp;rdquo;**（coding 新建网站没有 hugo 可以勾选）!
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FjVWtCmj3d3WXbpDpipsRB_DFoyj.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;自己平时懒得去管主机的各种服务之类的，主机（尤其是云主机）在部署 Hugo 用的最多的是：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;使用 hugo 来生成站点的静态网站文件；&lt;/li&gt;
&lt;li&gt;把静态网站文件 push 到 coding，通过 coding 的静态网站服务进行自动部署。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;今天，来解锁 coding 上的一个 &lt;strong&gt;&amp;ldquo;持续集成&amp;rdquo;&lt;/strong&gt; 功能，通过它自动进行托管并部署 Hugo 网站（从此再也不用依赖主机了）。&lt;/p&gt;
&lt;h1 id=&#34;coding-和腾讯云关联&#34;&gt;CODING 和腾讯云关联&lt;a class=&#34;headerlink&#34; href=&#34;#coding-和腾讯云关联&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;这边要打通两边，做一个关联，详细就不多说了，折腾一下都 OK 的。&lt;/p&gt;
&lt;h1 id=&#34;创建项目&#34;&gt;创建项目&lt;a class=&#34;headerlink&#34; href=&#34;#创建项目&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;做了上面的事情后，你应该会有一个团队主体，然后用这个团队主体创建一个项目。
&lt;img alt=&#34;随便选一个都行，我是选的左边那个&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FsF7wQieptdwXWCg8HudF80WMsGU.png&#34; title=&#34;随便选一个都行，我是选的左边那个&#34; /&gt;
&lt;img alt=&#34;填写项目信息&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FrH79T4lvPe5axS6K7RhbTNQfqfw.png&#34; title=&#34;填写项目信息&#34; /&gt;&lt;/p&gt;
&lt;h1 id=&#34;创建两个仓库&#34;&gt;创建两个仓库&lt;a class=&#34;headerlink&#34; href=&#34;#创建两个仓库&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;创建项目成功后进入项目。创建两个仓库，一个是存储源代码的文件，一个是放置生成的静态网站文件。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FvFrvgpIZ1cd7YDIUdNb5YuyoMxa.png&#34; /&gt;&lt;/p&gt;
&lt;h1 id=&#34;流程配置&#34;&gt;流程配置&lt;a class=&#34;headerlink&#34; href=&#34;#流程配置&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;创建完网站后，在左边导航栏选择&amp;rdquo;持续集成&amp;rdquo;→&amp;rdquo;构建计划&amp;rdquo;，选择自定义构建过程。
&lt;img alt=&#34;创建构建计划&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FulUKaBrExOaVESrmSpGYf5fcawl.png&#34; title=&#34;创建构建计划&#34; /&gt;
&lt;img alt=&#34;选择自定义构建过程&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FoBKzV74UZ8QFJX2cvW0XN4nCk_L.png&#34; title=&#34;选择自定义构建过程&#34; /&gt;
&lt;img alt=&#34;设置自定义构建过程的代码源：CODING&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fl-jUXVMs2wZDvZPDbmmlXw0YueS.png&#34; title=&#34;设置自定义构建过程的代码源：CODING&#34; /&gt;&lt;/p&gt;
&lt;p&gt;在自定义构建过程中点击确定后，进入创建构建计划设置——流程配置。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fi0zTbvYw0lj0nTieZtLi08Amush.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;代码检出&#34;&gt;代码检出&lt;a class=&#34;headerlink&#34; href=&#34;#代码检出&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;代码检出保持原有的就可以，不用去设置什么。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FmXxmg5h2KeGV-x_uGxPLS_WX1A2.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;执行-hugo-构建&#34;&gt;执行 Hugo 构建&lt;a class=&#34;headerlink&#34; href=&#34;#执行-hugo-构建&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;定义 2-1 步骤名称（我这里命名为：执行 Hugo 构建）。
&lt;img alt=&#34;定义 2-1 步骤名称&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FsM9PBVjuKDWUHQvSktMouBBq2Ye.png&#34; title=&#34;定义 2-1 步骤名称&#34; /&gt;
&lt;img alt=&#34;设置 2-1 步骤日志消息&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FnJ36cZbpMl4UPwtvKLtvUVnxETi.png&#34; title=&#34;设置 2-1 步骤日志消息&#34; /&gt;
&lt;img alt=&#34;打印消息后，添加执行 Shell 脚本命令&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FpbbjiiKDYj4NTH-krYCmP0xDhun.png&#34; title=&#34;打印消息后，添加执行 Shell 脚本命令&#34; /&gt;
&lt;img alt=&#34;配置具体的 Shell 脚本命令&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FrOx5v_P1CH9f99Jz6pDJdV0TPTs.png&#34; title=&#34;配置具体的 Shell 脚本命令&#34; /&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 这一步是下载 hugo 的执行程序，我是放在了 coding 的制品里面了；&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# 外网下载好像速度有点慢，可以修改成其他版本或下载地址，下面需要对应修改文件名。&lt;/span&gt;
curl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-fL&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;https://shenweiyan-generic.pkg.coding.net/btscl/tools/hugo_Linux-64bit.tar.gz?version=0.91.0&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-o&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;hugo_Linux-64bit-0.91.0.tar.gz

&lt;span class=&#34;c1&#34;&gt;# 解压&lt;/span&gt;
tar&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-zvxf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;hugo_Linux-64bit-0.91.0.tar.gz
&lt;span class=&#34;c1&#34;&gt;# 删除压缩包&lt;/span&gt;
rm&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-rf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;hugo_Linux-64bit-0.91.0.tar.gz

&lt;span class=&#34;c1&#34;&gt;# 列出当前目录的文件&lt;/span&gt;
ls&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-hal

&lt;span class=&#34;c1&#34;&gt;# 移动 hugo 到执行目录&lt;/span&gt;
mv&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;hugo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/bin/hugo

&lt;span class=&#34;c1&#34;&gt;# 由于前一步我们把代码检出了，所以我们目前是处于源代码目录下的；&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# 执行 hugo 命令便可生成静态网站到 public 目录。&lt;/span&gt;
hugo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-D
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;执行代码同步&#34;&gt;执行代码同步&lt;a class=&#34;headerlink&#34; href=&#34;#执行代码同步&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;点击&amp;rdquo;增加阶段&amp;rdquo;，增加一个&amp;rdquo;3-1 执行代码同步阶段&amp;rdquo;。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;执行代码同步，选择命令→执行 Shell 脚本&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FqsOkFAwsFL-ljeLd7YW1xuBd7Ng.png&#34; title=&#34;执行代码同步，选择命令→执行 Shell 脚本&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;执行代码同步，编辑执行的 Shell 脚本&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FjoKwRRqJx9mmKcwnWk5bIjdUwOc.png&#34; title=&#34;执行代码同步，编辑执行的 Shell 脚本&#34; /&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 进入到网站目录&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;./public
&lt;span class=&#34;c1&#34;&gt;# 初始化仓库&lt;/span&gt;
git&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;init
&lt;span class=&#34;c1&#34;&gt;# 绑定public仓库，这边是可以用默认变量token来代替认证&lt;/span&gt;
git&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;remote&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;add&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;origin&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;CODING_USER&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;:&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;CODING_TOKEN&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;@e.coding.net/shenweiyan/webstack/nav.bioitee.pub.git
git&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;add&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--all
git&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;commit&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-m&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;执行自动更新&amp;quot;&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# 强制推送内容&lt;/span&gt;
git&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;push&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--force&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;origin&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;master
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;添加环境变量&#34;&gt;添加环境变量&lt;a class=&#34;headerlink&#34; href=&#34;#添加环境变量&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FsBCf_Z6Uhycl_JKWSHcXuOLC8Sq.png&#34; /&gt;
&lt;strong&gt;CODING_USER&lt;/strong&gt; 和 &lt;strong&gt;CODING_TOKEN&lt;/strong&gt; 的环境变量可以通过下面的方法获取（如下截图），也可以直接使用你个人的用户名和密码。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FlNz1I8HQlJB8ODp0p6-pTdh5Muh.png&#34; /&gt;
勾选以下权限：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;project:depot&lt;/strong&gt;，读/写，完整的仓库控制权限；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;project:file&lt;/strong&gt;，读/写，授权读取与操作文件；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;project:deployment&lt;/strong&gt;，读/写，授权用户持续部署；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;project:ci&lt;/strong&gt;，读/写，持续集成；&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FtoOfFh7A3uHAdb6a-vlVvG2obuK.png&#34; /&gt;
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FsygEpCg4Bkoje3nsl-baLHdQYEL.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;配置完成&#34;&gt;配置完成&lt;a class=&#34;headerlink&#34; href=&#34;#配置完成&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;配置完成后，点击保存。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fn9EjsSoEzCrfaUTT9Vf_pKnxgLa.png&#34; /&gt;&lt;/p&gt;
&lt;h1 id=&#34;立即构建&#34;&gt;立即构建&lt;a class=&#34;headerlink&#34; href=&#34;#立即构建&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;流程配置后立即构建，这个时候就会自动跑一遍这个流程了，基本上就完成了整个自动化构建部署。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fvc1rhb8Iqz2YPdpjfbHUoJZEmb_.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FrYequZ3t2nIur7a3qwC5HROnCVF.png&#34; /&gt;&lt;/p&gt;
&lt;h1 id=&#34;简单总结&#34;&gt;简单总结&lt;a class=&#34;headerlink&#34; href=&#34;#简单总结&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;最后说几句，这边要注意流程计划的触发规则为当代码源触发时自动执行，这样的话当你源代码仓库有更新时就会执行这个流程更新 public 仓库，而当 public 仓库发生改动时，你可以结合腾讯云的云开发 Webify 触发静态网站自动部署，具体的 Webify 操作可以参考《&lt;a href=&#34;https://www.yuque.com/shenweiyan/cookbook/webify-testing?view=doc_embed&#34;&gt;腾讯云云开发 Webify 上手体验&lt;/a&gt;》。&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E9%9D%99%E6%80%81%E7%BD%91%E7%AB%99/2021-09-10-coding-ci-hugo/</link>
      <pubDate>Fri, 10 Sep 2021 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E9%9D%99%E6%80%81%E7%BD%91%E7%AB%99/2021-09-10-coding-ci-hugo/</guid>
      
    </item>
    
    <item>
      <title>服务器崩溃日志之误删 OpenSSL</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-09-02&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-09-02T00:00:00&#39;&gt;2021-09-02&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-10-29&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-10-29T11:39:51&#39;&gt;2021-10-29&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;最开始是想安装 Bioconductor 中的 &lt;strong&gt;minfi&lt;/strong&gt;（&lt;a href=&#34;https://github.com/hansenlab/minfi&#34;&gt;https://github.com/hansenlab/minfi&lt;/a&gt;） 这个 R 包，但是发现不管是 &lt;strong&gt;conda&lt;/strong&gt; 还是 &lt;strong&gt;BiocManager::install(&amp;ldquo;minfi&amp;rdquo;)&lt;/strong&gt; 总不能成功，依赖包贼多不说，有些依赖包还特别坑爹。&lt;/p&gt;
&lt;p&gt;首先要说的是 &lt;strong&gt;sparseMatrixStats&lt;/strong&gt;（&lt;a href=&#34;https://github.com/const-ae/sparseMatrixStats&#34;&gt;https://github.com/const-ae/sparseMatrixStats&lt;/a&gt;），虽然这个包比较坑，但作者起码在 GitHub 上给出了说明和解决方法。&lt;/p&gt;
&lt;p&gt;最坑的应该是一个叫 &lt;strong&gt;rhdf5filters&lt;/strong&gt;（&lt;a href=&#34;https://github.com/grimbough/rhdf5filters&#34;&gt;https://github.com/grimbough/rhdf5filters&lt;/a&gt;）的 R 包，费劲了九牛二虎之力都搞不定，尤其是在 GCC-4.8.5 编译器下有人说 &amp;ldquo;assume it is just obsolete compiler&amp;rdquo;，让我感觉到我的 CentOS-6.5 +gcc-4.8.5 想要安装好它基本是没戏了！
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FoOXwmZROQd1XwDFz-4mtZ1pi1pd.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;几经折腾，虽然最终在 R-3.4 中倒腾成功了，但是对于 R&amp;gt;=3.5 总是耿耿于怀想再尝试一下（不见棺材不落泪 😭😭😭），结合到前几天看到的 &lt;strong&gt;devtoolset&lt;/strong&gt;，于是想着去折腾一下。&lt;/p&gt;
&lt;p&gt;有时候现实就是这么残酷，摩拳擦掌蠢蠢欲试，有时候结果会让你直接吐血——在安装 devtoolset 的时候总发现有这么一条重复出现且让人讨厌的 openssl 错误信息：&lt;/p&gt;
&lt;p&gt;:::warning
**** Found 1 pre-existing rpmdb problem(s), &amp;lsquo;yum check&amp;rsquo; output follows:**
&lt;strong&gt;openssl-1.0.1e-57.el6.x86_64 is a duplicate with openssl-1.0.1e-15.el6.x86_64&lt;/strong&gt;
:::
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fnp6xcyM-ONQ59j7zXvNHfjROnQF.png&#34; /&gt;
初生牛犊不怕虎（其实当时应该先谷歌一下能不能卸载 😳😳😳），也没想太多于是就把重复的 openssl-1.0.1e-57.el6.x86_64 卸载了！！！
:::warning
$ &lt;strong&gt;rpm -e openssl-1.0.1e-57.el6.x86_64&lt;/strong&gt;
:::
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FkiSscAxEaz0nSb3OSipjfFB3PVH.png&#34; /&gt;
接下来，惊魂的酸爽时刻来了：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;yum&lt;/strong&gt; 不能用了，开始提示 libssl.so.10 不存在！&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;:::warning
&lt;strong&gt;libssl.so.10: cannot open shared object file: No such file or directory&lt;/strong&gt;
:::&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;新的 Terminal 想要通过 SSH 再次登陆 log01，提示网络被关闭，登陆不上去了！！&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;开始意识到出问题了，于是去谷歌，搜索完差点一口老血喷出来！但万幸的是 root 还没有退出来！！！&lt;/p&gt;
&lt;p&gt;于是开始自救！&lt;/p&gt;
&lt;p&gt;首先，下载对应版本的 rpm（这时候 wget/scp 都罢工了！），上传到服务器，然后 rpm 安装。&lt;/p&gt;
&lt;p&gt;最先下载的是 openssl-1.0.0-27.el6.src.rpm，但 rpm 安装的时候又出现了新的问题。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@log01&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;lib64&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# rpm -ivh /home/bioadmin/openssl-1.0.0-27.el6.src.rpm&lt;/span&gt;
warning:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/home/bioadmin/openssl-1.0.0-27.el6.src.rpm:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Header&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;V3&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;RSA/SHA256&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Signature,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;key&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ID&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;fd431d51:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;NOKEY
&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;:openssl&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;warning:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;user&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mockbuild&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;does&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;exist&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;using&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;root
warning:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;group&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mockbuild&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;does&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;exist&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;using&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;root
warning:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;user&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mockbuild&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;does&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;exist&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;using&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;root
warning:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;group&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mockbuild&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;does&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;exist&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;using&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;root
......
warning:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;group&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mockbuild&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;does&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;exist&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;using&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;root
&lt;span class=&#34;c1&#34;&gt;########################################### [100%]&lt;/span&gt;
warning:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;user&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mockbuild&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;does&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;exist&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;using&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;root
warning:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;group&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mockbuild&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;does&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;exist&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;using&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;root
warning:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;user&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mockbuild&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;does&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;exist&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;using&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;root
warning:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;group&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mockbuild&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;does&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;exist&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;using&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;root

&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@log01&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;lib64&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# sudo useradd -s /sbin/nologin mockbuild&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@log01&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;lib64&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# rpm -ivh /RiboBio/home/bi.chengnan/R/openssl-1.0.0-27.el6.src.rpm&lt;/span&gt;
warning:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/RiboBio/home/bi.chengnan/R/openssl-1.0.0-27.el6.src.rpm:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Header&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;V3&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;RSA/SHA256&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Signature,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;key&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ID&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;fd431d51:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;NOKEY
&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;:openssl&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;########################################### [100%]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;安装完，发现不起作用，/usr/lib64 下面缺失的 &lt;strong&gt;libssl.so.10&lt;/strong&gt; 和 &lt;strong&gt;libcrypto.so.10&lt;/strong&gt; 没有回来，SSH 依然无法登陆。&lt;/p&gt;
&lt;p&gt;接着，下载卸载的 openssl-1.0.1e-57.el6.x86_64.rpm，不出意外 rpm 安装又遇到新的问题（心底一万个草泥马飘过）！&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@log01&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;usr&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# rpm -ivh /home/bioadmin/openssl-1.0.1e-57.el6.x86_64.rpm&lt;/span&gt;
warning:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/home/bioadmin/openssl-1.0.1e-57.el6.x86_64.rpm:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Header&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;V3&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;RSA/SHA1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Signature,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;key&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ID&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;c105b9de:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;NOKEY
Preparing...&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;########################################### [100%]&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/bin/openssl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-57.el6.x86_64&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conflicts&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/lib64/.libcrypto.so.1.0.1e.hmac&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-57.el6.x86_64&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conflicts&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/lib64/.libssl.so.1.0.1e.hmac&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-57.el6.x86_64&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conflicts&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/lib64/libcrypto.so.1.0.1e&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-57.el6.x86_64&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conflicts&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/lib64/libssl.so.1.0.1e&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-57.el6.x86_64&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conflicts&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/lib64/openssl/engines/lib4758cca.so&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-57.el6.x86_64&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conflicts&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/lib64/openssl/engines/libaep.so&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-57.el6.x86_64&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conflicts&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/lib64/openssl/engines/libatalla.so&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-57.el6.x86_64&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conflicts&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/lib64/openssl/engines/libcapi.so&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-57.el6.x86_64&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conflicts&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/lib64/openssl/engines/libchil.so&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-57.el6.x86_64&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conflicts&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/lib64/openssl/engines/libcswift.so&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-57.el6.x86_64&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conflicts&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/lib64/openssl/engines/libgmp.so&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-57.el6.x86_64&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conflicts&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/lib64/openssl/engines/libnuron.so&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-57.el6.x86_64&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conflicts&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/lib64/openssl/engines/libpadlock.so&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-57.el6.x86_64&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conflicts&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/lib64/openssl/engines/libsureware.so&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-57.el6.x86_64&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conflicts&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/lib64/openssl/engines/libubsec.so&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-57.el6.x86_64&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conflicts&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/share/doc/openssl-1.0.1e/README.FIPS&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-57.el6.x86_64&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conflicts&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/share/man/man1/ca.1ssl.gz&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-57.el6.x86_64&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conflicts&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/share/man/man1/ciphers.1ssl.gz&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-57.el6.x86_64&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conflicts&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/share/man/man1/cms.1ssl.gz&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-57.el6.x86_64&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conflicts&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/share/man/man1/ec.1ssl.gz&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-57.el6.x86_64&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conflicts&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/share/man/man1/ocsp.1ssl.gz&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-57.el6.x86_64&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conflicts&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/share/man/man1/openssl.1ssl.gz&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-57.el6.x86_64&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conflicts&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/share/man/man1/req.1ssl.gz&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-57.el6.x86_64&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conflicts&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/share/man/man1/s_client.1ssl.gz&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-57.el6.x86_64&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conflicts&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/share/man/man1/s_server.1ssl.gz&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-57.el6.x86_64&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conflicts&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/share/man/man1/s_time.1ssl.gz&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-57.el6.x86_64&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conflicts&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/share/man/man1/smime.1ssl.gz&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-57.el6.x86_64&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conflicts&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/share/man/man1/speed.1ssl.gz&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-57.el6.x86_64&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conflicts&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/share/man/man1/ts.1ssl.gz&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-57.el6.x86_64&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conflicts&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/share/man/man1/verify.1ssl.gz&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-57.el6.x86_64&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conflicts&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/share/man/man1/x509.1ssl.gz&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-57.el6.x86_64&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conflicts&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;第三，尝试 openssl-1.0.1e-15.el6.x86_64.rpm，居然还是这个问题（。。。。。）！&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@log01&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;usr&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# rpm -ivh /home/bioadmin/openssl-1.0.1e-15.el6.x86_64.rpm&lt;/span&gt;
warning:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/home/bioadmin/R/openssl-1.0.1e-15.el6.x86_64.rpm:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Header&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;V3&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;RSA/SHA1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Signature,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;key&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ID&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;c105b9de:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;NOKEY
Preparing...&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;########################################### [100%]&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;is&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;already&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;installed
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/bin/openssl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conflicts&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/lib64/.libcrypto.so.1.0.1e.hmac&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conflicts&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/lib64/.libssl.so.1.0.1e.hmac&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conflicts&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/lib64/libcrypto.so.1.0.1e&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conflicts&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/lib64/libssl.so.1.0.1e&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conflicts&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/lib64/openssl/engines/lib4758cca.so&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conflicts&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/lib64/openssl/engines/libaep.so&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conflicts&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/lib64/openssl/engines/libatalla.so&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conflicts&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/lib64/openssl/engines/libcapi.so&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conflicts&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/lib64/openssl/engines/libchil.so&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conflicts&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/lib64/openssl/engines/libcswift.so&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conflicts&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/lib64/openssl/engines/libgmp.so&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conflicts&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/lib64/openssl/engines/libnuron.so&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conflicts&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/lib64/openssl/engines/libpadlock.so&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conflicts&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/lib64/openssl/engines/libsureware.so&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conflicts&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/lib64/openssl/engines/libubsec.so&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conflicts&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/share/man/man1/ca.1ssl.gz&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conflicts&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/share/man/man1/cms.1ssl.gz&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conflicts&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/share/man/man1/ec.1ssl.gz&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conflicts&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/share/man/man1/ocsp.1ssl.gz&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conflicts&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/share/man/man1/openssl.1ssl.gz&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conflicts&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/share/man/man1/req.1ssl.gz&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conflicts&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/share/man/man1/s_client.1ssl.gz&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conflicts&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/share/man/man1/s_server.1ssl.gz&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conflicts&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/share/man/man1/s_time.1ssl.gz&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conflicts&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/share/man/man1/smime.1ssl.gz&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conflicts&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/share/man/man1/ts.1ssl.gz&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conflicts&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/share/man/man1/verify.1ssl.gz&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conflicts&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/share/man/man1/x509.1ssl.gz&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conflicts&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-15.el6.x86_64
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;第四，尝试下载 openssl-1.0.1e.tar.gz 源码包安装，但是 make 的时候却出现了 Perl 有关的 Error（注意这里是一个很关键的步骤），最开始也以为要凉凉了！！&lt;/p&gt;
&lt;p&gt;虽然在《&lt;a href=&#34;https://www.cxyzjd.com/article/baidu_33864675/93332571&#34;&gt;Centos6 卸载 OpenSSL 后重装提示 libssl.so.10: cannot open shared object file: No such file or directory&lt;/a&gt;》这篇文章中提到：&amp;rdquo;&lt;strong&gt;Make：通过 make 来生成生成 libssl.so.1.0.0 和 libcrypto.so.1.0.0&lt;/strong&gt;&amp;ldquo;，对这句话一直不理解以为是要安装完成后，在目标目录才会生成 &lt;strong&gt;libssl.so.1.0.0 &lt;/strong&gt;和&lt;strong&gt; libcrypto.so.1.0.0&lt;/strong&gt;！其实并非如此！&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tar&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;zvxf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e.tar.gz
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;./config&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;shared&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;zlib-dynamic
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make
......
installing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;man1/asn1parse.1
installing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;man1/CA.pl.1
installing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;man1/ca.1
installing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;man1/ciphers.1
installing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;man1/cms.1
cms.pod&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;around&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;line&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;457&lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Expected&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;text&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;after&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;item,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;a&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;number
cms.pod&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;around&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;line&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;461&lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Expected&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;text&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;after&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;item,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;a&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;number
cms.pod&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;around&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;line&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;465&lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Expected&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;text&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;after&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;item,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;a&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;number
cms.pod&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;around&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;line&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;470&lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Expected&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;text&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;after&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;item,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;a&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;number
cms.pod&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;around&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;line&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;474&lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Expected&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;text&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;after&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;item,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;a&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;number
POD&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;document&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;had&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;syntax&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;errors&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;at&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/RiboBio/Bioinfo/APPS/perl/bin/pod2man&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;line&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;71&lt;/span&gt;.
make:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;***&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;install_docs&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Error&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;其实，&lt;strong&gt;make 这一步已经在当前目录（注意是当前执行编译的目录）生成我们想要的 libssl.so.1.0.0 和 libcrypto.so.1.0.0 了&lt;/strong&gt;！！！
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fj77r67kKv8Saz7Y-KkWlJjoJPXH.png&#34; /&gt;
第五，把这两个文件 &lt;strong&gt;ln -s&lt;/strong&gt; 到 &lt;strong&gt;/usr/lib64&lt;/strong&gt;，神奇的发现 yum 居然恢复正常了，虽然 SSH 还是不能登录。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@log01&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;lib64&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# ln -s /home/bioadmin/src/openssl-1.0.1e/libssl.so.1.0.0 /usr/lib64/libssl.so.10&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@log01&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;lib64&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# ln -s /home/bioadmin/src/openssl-1.0.1e/libcrypto.so.1.0.0 /usr/lib64/libcrypto.so.10&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fls9aK8rtEOM2EMkiuKRWgcRN_aj.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;最后，尝试着使用 &lt;strong&gt;yum&lt;/strong&gt; 把 &lt;strong&gt;openssl&lt;/strong&gt; 重新安装一下。这一次发现，一切都恢复正常了！
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FlR7XtilMiDQqHBm5laTX7qrvGj9.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;参考资料：&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;程序员宅基地，《&lt;a href=&#34;https://www.cxyzjd.com/article/baidu_33864675/93332571&#34;&gt;Centos6 卸载 OpenSSL 后重装提示 libssl.so.10: cannot open shared object file: No such file or directory&lt;/a&gt;》，&lt;a href=&#34;https://www.cxybb.com/&#34;&gt;程序员宝宝&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://home.cnblogs.com/u/augusite/&#34;&gt;augusite&lt;/a&gt;，《&lt;a href=&#34;https://www.cnblogs.com/augusite/p/10593222.html&#34;&gt;libssl.so.10: cannot open shared object file: No such file or directory - augusite - 博客园&lt;/a&gt;》&lt;/li&gt;
&lt;li&gt;OpenSSL tar.gz 源码包下载地址：&lt;a href=&#34;https://ftp.openssl.org/source/old/1.0.1/&#34;&gt;Index of /source/old/1.0.1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;OpenSSL rpm 源码下载地址：&lt;a href=&#34;https://mirrors.aliyun.com/centos-vault/6.5/updates/x86_64/Packages/&#34;&gt;https://mirrors.aliyun.com/centos-vault/6.5/updates/x86_64/Packages/&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E7%B3%BB%E7%BB%9F%E4%B8%8E%E7%BC%96%E8%AF%91/2021-09-02-rpm-e-openssl/</link>
      <pubDate>Thu, 02 Sep 2021 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E7%B3%BB%E7%BB%9F%E4%B8%8E%E7%BC%96%E8%AF%91/2021-09-02-rpm-e-openssl/</guid>
      
    </item>
    
    <item>
      <title>SCL 笔记之 Devtoolset 安装与使用</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-09-02&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-09-02T00:00:00&#39;&gt;2021-09-02&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2024-05-29&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2024-05-29T00:00:00&#39;&gt;2024-05-29&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id=&#34;1-背景&#34;&gt;1. 背景&lt;a class=&#34;headerlink&#34; href=&#34;#1-背景&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;CentOS/RHEL Linux 发行版以稳定性著称，所有的软件都要尽可能 stable，导致的一个结果就是基础软件的版本非常的低，比如 CentOS 6.7（15 年发布） 中 gcc 版本还是 4.4.7（12 年的版本）。这对开发来说就不是很友好，比如我们想用 C++ 11 中的某个特性，就必须自己编译一个高版本的 gcc 出来，但是这会有另外一个问题，开发环境不好维护，如果自己有多台电脑或者多个人合作的项目，每台机器上都要自己编一份，维护起来就比较麻烦。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;scl&#34;&gt;SCL&lt;a class=&#34;headerlink&#34; href=&#34;#scl&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;SCL(Software Collections)是一个 CentOS/RHEL Linux 平台的软件多版本共存解决方案，为 RHEL/CentOS Linux 用户提供一种方便、安全地安装和使用应用程序和运行时环境的多个版本的方式，同时避免把系统搞乱。&lt;/p&gt;
&lt;p&gt;SCL 项目主页：&lt;a href=&#34;https://www.softwarecollections.org/&#34;&gt;https://www.softwarecollections.org&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;devtoolset&#34;&gt;Devtoolset&lt;a class=&#34;headerlink&#34; href=&#34;#devtoolset&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;不同平台的编译环境不一样，所以 RedHat 就推出了 scl (Software Collections) ，它可以根据 devtoolset 一起配合来快速统一开发环境，不用一个个的去找各个官网再去编译源码安装。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;使用 scl 可以暂时的改变当前用户的编译工具，例如你的系统版本 gcc 4.4.7 但是你可以使用 scl 工具它可以临时的把你的 gcc 版本提升到 4.8。&lt;/p&gt;
&lt;p&gt;其实，简单的来说，devtoolset 就是 SCL 提供的一套专门用于 CentOS 或 Red Hat Enterprise Linux 平台编译开发的一套工具集。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Developer Toolset is designed for developers working on CentOS or Red Hat Enterprise Linux platform. It provides current versions of the GNU Compiler Collection, GNU Debugger, and other development, debugging, and performance monitoring tools.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fqk1Hsa24eTzvUESvThxmNvHCnUJ.png&#34; /&gt;
当然，除了 devtoolset 这些专门用于编译开发的工具集，SCL 上还有其他的很多工具集，如 &lt;a href=&#34;https://www.softwarecollections.org/en/scls/rhscl/rh-ruby26/&#34;&gt;Ruby&lt;/a&gt;，&lt;a href=&#34;https://www.softwarecollections.org/en/scls/rhscl/rh-redis5/&#34;&gt;Redis&lt;/a&gt;，&lt;a href=&#34;https://www.softwarecollections.org/en/scls/rhscl/rh-nginx114/&#34;&gt;nginx&lt;/a&gt; 等等。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FvAWwL60Wum2uXQtQxggO4CKtCeP.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;2-安装&#34;&gt;2. 安装&lt;a class=&#34;headerlink&#34; href=&#34;#2-安装&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&#34;安装配置-scl-yum-源&#34;&gt;安装配置 SCL YUM 源&lt;a class=&#34;headerlink&#34; href=&#34;#安装配置-scl-yum-源&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;首先，要解决的第一个问题就是 yum 源的问题。尤其是在 CentOS 6 已经停止了维护（2020 年 11 月 30 日）的前提下，yum 源如果失效/错误，一切都将免谈。&lt;/p&gt;
&lt;h4 id=&#34;cenos-7&#34;&gt;CenOS 7&lt;a class=&#34;headerlink&#34; href=&#34;#cenos-7&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;CentOS 7 最晚在 2024 年 6 月 30 后停止更新维护，在此之前在 CentOS 7 可以通过 yum 直接安装 SCL 源基本都是可以正常使用的。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;yum&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;centos-release-scl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;centos-release-scl-rh
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fso4zYBja1F9aezOQHOOt8-k8BDd.png&#34; /&gt;
安装完成后，会默认在 &lt;strong&gt;/etc/yum.repos.d&lt;/strong&gt; 下生成 2 个 repo 源文件：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;CentOS-SCLo-scl.repo&lt;/strong&gt;
  &lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;# CentOS-SCLo-sclo.repo
#
# Please see http://wiki.centos.org/SpecialInterestGroup/SCLo for more
# information

[centos-sclo-sclo]
name=CentOS-7 - SCLo sclo
# baseurl=http://mirror.centos.org/centos/7/sclo/$basearch/sclo/
mirrorlist=http://mirrorlist.centos.org?arch=$basearch&amp;amp;release=7&amp;amp;repo=sclo-sclo
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo

[centos-sclo-sclo-testing]
name=CentOS-7 - SCLo sclo Testing
baseurl=http://buildlogs.centos.org/centos/7/sclo/$basearch/sclo/
gpgcheck=0
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo

[centos-sclo-sclo-source]
name=CentOS-7 - SCLo sclo Sources
baseurl=http://vault.centos.org/centos/7/sclo/Source/sclo/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo

[centos-sclo-sclo-debuginfo]
name=CentOS-7 - SCLo sclo Debuginfo
baseurl=http://debuginfo.centos.org/centos/7/sclo/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;CentOS-SCLo-scl-rh.repo&lt;/strong&gt;
   &lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;# CentOS-SCLo-rh.repo
#
# Please see http://wiki.centos.org/SpecialInterestGroup/SCLo for more
# information

[centos-sclo-rh]
name=CentOS-7 - SCLo rh
#baseurl=http://mirror.centos.org/centos/7/sclo/$basearch/rh/
mirrorlist=http://mirrorlist.centos.org?arch=$basearch&amp;amp;release=7&amp;amp;repo=sclo-rh
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo

[centos-sclo-rh-testing]
name=CentOS-7 - SCLo rh Testing
baseurl=http://buildlogs.centos.org/centos/7/sclo/$basearch/rh/
gpgcheck=0
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo

[centos-sclo-rh-source]
name=CentOS-7 - SCLo rh Sources
baseurl=http://vault.centos.org/centos/7/sclo/Source/rh/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo

[centos-sclo-rh-debuginfo]
name=CentOS-7 - SCLo rh Debuginfo
baseurl=http://debuginfo.centos.org/centos/7/sclo/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;centos-6&#34;&gt;CentOS 6&lt;a class=&#34;headerlink&#34; href=&#34;#centos-6&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;如果您使用 yum 安装 centos-release-SCL/centos-release-scl 时遇到 Error: Nothing to do 异常（尤其是在已经停止维护的 CentOS 6 的系统中）：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@log01&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# yum install centos-release-SCL&lt;/span&gt;
Loaded&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;plugins:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;product-id,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;refresh-packagekit,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;security,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;subscription-manager
This&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;system&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;is&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;registered&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Red&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Hat&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Subscription&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Management.&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;You&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;can&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;use&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;subscription-manager&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;register.
Setting&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;up&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Process
No&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;centos-release-SCL&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;available.
Error:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Nothing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;do&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;这种情况下，您可以参考 &lt;a href=&#34;https://github.com/sclorg/centos-release-scl&#34;&gt;https://github.com/sclorg/centos-release-scl&lt;/a&gt; 提供的方法进行安装（或者参考本文下面提到的手动创建 CentOS-SCLo-scl.repo 和 CentOS-SCLo-scl-rh.repo 的方式进行安装）：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# CentOS 6&lt;/span&gt;
sudo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;yum-config-manager&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--add-repo&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;https://copr.fedoraproject.org/coprs/rhscl/centos-release-scl/repo/epel-6/rhscl-centos-release-scl-epel-6.repo
sudo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;yum&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;centos-release-scl

&lt;span class=&#34;c1&#34;&gt;# CentOS 7&lt;/span&gt;
sudo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;yum-config-manager&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--add-repo&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;https://copr.fedoraproject.org/coprs/rhscl/centos-release-scl/repo/epel-7/rhscl-centos-release-scl-epel-7.repo
sudo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;yum&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;centos-release-scl
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;**Important: **Please, mind, that packages build by SCLo SIG are not supported and are not part of the supported Red Hat portfolio. For installing supported Software Collections packages, install packages from official RHSCL repository only.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4 id=&#34;手动调整-scl-yum-源&#34;&gt;手动调整 SCL YUM 源&lt;a class=&#34;headerlink&#34; href=&#34;#手动调整-scl-yum-源&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;如果您通过 rpm（或者其他的方式）成功安装了 centos-release-scl，但是安装 devtoolset（或者其他工具集时）提示 404 异常。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@log01&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# yum install devtoolset-3&lt;/span&gt;
Loaded&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;plugins:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;product-id,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;refresh-packagekit,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;security,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;subscription-manager
This&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;system&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;is&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;registered&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Red&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Hat&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Subscription&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Management.&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;You&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;can&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;use&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;subscription-manager&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;register.
http://mirror.centos.org/centos/6/sclo/x86_64/sclo/repodata/repomd.xml:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;Errno&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;PYCURL&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ERROR&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;7&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;Failed to connect to mirror.centos.org port 80: Connection refused&amp;quot;&lt;/span&gt;
Trying&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;other&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mirror.
Error:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Cannot&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;retrieve&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;repository&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;metadata&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;repomd.xml&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;repository:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;centos-sclo-sclo.&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Please&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;verify&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;its&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;path&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;and&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;try&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;again

&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@log01&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# yum install devtoolset-7-gcc*&lt;/span&gt;
Loaded&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;plugins:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;product-id,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;refresh-packagekit,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;security,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;subscription-manager
This&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;system&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;is&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;registered&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Red&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Hat&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Subscription&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Management.&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;You&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;can&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;use&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;subscription-manager&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;register.
http://mirror.centos.org/centos/6/sclo/x86_64/sclo/repodata/repomd.xml:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;Errno&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;PYCURL&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ERROR&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;22&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;The requested URL returned error: 404 Not Found&amp;quot;&lt;/span&gt;
Trying&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;other&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mirror.
Error:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Cannot&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;retrieve&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;repository&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;metadata&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;repomd.xml&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;repository:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;centos-sclo-sclo.&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Please&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;verify&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;its&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;path&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;and&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;try&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;again
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;主要原因可能在于：
&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fn5oaKELIUKI21mN4tRN_P5bydtI.png&#34; /&gt;
由于 CentOS 6 已经停止了维护，但 CentOS 6 对应的 centos-release-scl repo 中 baseurl 指向的链接可能已经弃用失效（&lt;strong&gt;deprecated&lt;/strong&gt;），尤其是 baseur 指向 &lt;a href=&#34;http://mirror.centos.org/centos/6/&#34;&gt;http://mirror.centos.org/centos/6/&lt;/a&gt; 的链接。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FhYYKt5E7Ez_bzqlhVBYUtPS8486.png&#34; /&gt;
针对以上的情况，可以按照以下步骤，手动进行处理（本文章中使用的阿里云的 YUM 源）。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;提示：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;通过 &lt;a href=&#34;https://github.com/sclorg/centos-release-scl&#34;&gt;https://github.com/sclorg/centos-release-scl&lt;/a&gt;（或者其他方式）安装了 centos-release-scl 的童鞋，如果想要获取更好的下载体验，也可以根据需要手动调整对应 repo 的 baseurl 地址。&lt;/p&gt;
&lt;p&gt;目前，可以的 CentOS 6 源地址（CentOS 7 还在维护周期内，大部分源均可用）：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://mirrors.aliyun.com/centos-vault/&#34;&gt;https://mirrors.aliyun.com/centos-vault/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://vault.centos.org/centos/&#34;&gt;http://vault.centos.org/centos/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://download.copr.fedorainfracloud.org/results/rhscl/centos-release-scl/&#34;&gt;https://download.copr.fedorainfracloud.org/results/rhscl/centos-release-scl/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;第一，在 /etc/yum.repos.d 手动创建 CentOS-SCLo-scl.repo 和 CentOS-SCLo-scl-rh.repo 文件。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;CentOS-SCLo-scl.repo&lt;/strong&gt;
   &lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;# CentOS-SCLo-sclo.repo
#
# Please see http://wiki.centos.org/SpecialInterestGroup/SCLo for more
# information

[centos-sclo-sclo]
name=CentOS-6 - SCLo sclo
#baseurl=http://vault.centos.org/centos/6/sclo/$basearch/sclo/
baseurl=https://mirrors.aliyun.com/centos-vault/6.9/sclo/x86_64/sclo/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo

[centos-sclo-sclo-testing]
name=CentOS-6 - SCLo sclo Testing
baseurl=http://buildlogs.centos.org/centos/6/sclo/$basearch/sclo/
gpgcheck=0
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo

[centos-sclo-sclo-source]
name=CentOS-6 - SCLo sclo Sources
baseurl=http://vault.centos.org/centos/6/sclo/Source/sclo/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo

[centos-sclo-sclo-debuginfo]
name=CentOS-6 - SCLo sclo Debuginfo
baseurl=http://debuginfo.centos.org/centos/6/sclo/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;CentOS-SCLo-scl-rh.repo&lt;/strong&gt;
   &lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;# CentOS-SCLo-rh.repo
#
# Please see http://wiki.centos.org/SpecialInterestGroup/SCLo for more
# information

[centos-sclo-rh]
name=CentOS-6 - SCLo rh
#baseurl=http://vault.centos.org/centos/6/sclo/$basearch/rh/
baseurl=https://mirrors.aliyun.com/centos-vault/6.9/sclo/x86_64/rh/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo

[centos-sclo-rh-testing]
name=CentOS-6 - SCLo rh Testing
baseurl=http://buildlogs.centos.org/centos/6/sclo/$basearch/rh/
gpgcheck=0
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo

[centos-sclo-rh-source]
name=CentOS-6 - SCLo rh Sources
baseurl=http://vault.centos.org/centos/6/sclo/Source/rh/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo

[centos-sclo-rh-debuginfo]
name=CentOS-6 - SCLo rh Debuginfo
baseurl=http://debuginfo.centos.org/centos/6/sclo/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;第二，更新 yum 源的缓存。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/etc/yum.repos.d
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;yum&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;clean&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;all
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;yum&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;makecache
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;第三，yum 源更新完后，就可以使用以下的命令查看对应源的软件包信息。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 查看 centos-sclo-rh 源所有可用的软件包&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;yum&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;list&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;all&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--enablerepo&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;entos-sclo-rh&amp;#39;&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# 查看 centos-sclo-rh 源中名为 scl-utils 的软件包&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;yum&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;search&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;scl-utils&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--enablerepo&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;centos-sclo-rh&amp;#39;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;安装-scl-utils&#34;&gt;安装 scl-utils&lt;a class=&#34;headerlink&#34; href=&#34;#安装-scl-utils&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;scl-utils 是管理 SCL (Software Collection) 环境设置和运行软件的一套软件工具。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;yum&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;scl-utils
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;个人在 CentOS 6.5 中安装 devtoolset-4 就遇到 scl-utils 版本太低，要求 scl-utils &amp;gt;= 20120927-11 的报错。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fj4OcOV-ueddVNr9vGGpxWGcDOA6.png&#34; /&gt;
解决方法如下：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# centos-scl 参考 Devtoolset 一节中的 /etc/yum.repos.d/centos-scl.repo 文件&lt;/span&gt;
yum&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;scl-utils&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--enablerepo&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;centos-scl
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fok5q0BGjSkmvxSFFcTuxaXBoVnI.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;安装-devtoolset&#34;&gt;安装 Devtoolset&lt;a class=&#34;headerlink&#34; href=&#34;#安装-devtoolset&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;不同的 devtoolset 对应了不同的 gcc 版本，如：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;devtoolset-1 是 gcc 4.7&lt;/li&gt;
&lt;li&gt;devtoolset-2 是 gcc 4.8&lt;/li&gt;
&lt;li&gt;devtoolset-3 是 gcc 4.9&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://access.redhat.com/documentation/en-us/red_hat_developer_toolset/4/html-single/user_guide/index&#34;&gt;devtoolset-4 &lt;/a&gt;是 gcc 5.2/5.3&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://access.redhat.com/documentation/en-us/red_hat_developer_toolset/6&#34;&gt;devtoolset-6&lt;/a&gt; 是 gcc 6.2/6.3&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://access.redhat.com/documentation/en-us/red_hat_developer_toolset/7&#34;&gt;devtoolset-7&lt;/a&gt; 是 gcc 7.2/7.3&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FqndSUnRCVy4b_UtbBOiUeFAeVM9.png&#34; /&gt;
CentOS 7 的 centos-sclo-rh/centos-sclo 默认支持 devtoolset-7 及以上，如果想要使用 devtoolset-3 到 7 之间的版本，可以参考下面的做法：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;创建一个 /etc/yum.repos.d/centos-scl.repo 文件，内容如下：&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;centos-scl&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;

&lt;span class=&#34;nv&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;centos-scl
&lt;span class=&#34;nv&#34;&gt;baseurl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;http://vault.centos.org/6.5/SCL/&lt;span class=&#34;nv&#34;&gt;$basearch&lt;/span&gt;/
&lt;span class=&#34;nv&#34;&gt;gpgcheck&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;enabled&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;创建完了以后，安装 scl-utils，如果你前面已经安装这一步可以跳过：&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;yum&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;scl-utils&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--enablerepo&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;centos-scl
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;创建一个 /etc/yum.repos.d/centos-devtools.repo，内容如下：&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;centos-devtools&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;centos-devtools
&lt;span class=&#34;c1&#34;&gt;#baseurl=http://vault.centos.org/centos/6/sclo/$basearch/rh/&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;baseurl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;https://mirrors.aliyun.com/centos-vault/6.9/sclo/x86_64/rh/
&lt;span class=&#34;nv&#34;&gt;gpgcheck&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;enabled&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;安装 devtools：&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;yum&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;devtoolset-4&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--enablerepo&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;centos-devtools&amp;#39;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;3-使用&#34;&gt;3. 使用&lt;a class=&#34;headerlink&#34; href=&#34;#3-使用&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&#34;激活与切换&#34;&gt;激活与切换&lt;a class=&#34;headerlink&#34; href=&#34;#激活与切换&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;可以使用下面的命令查看通过 scl 安装了哪些软件：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;scl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-l
devtoolset-3
devtoolset-4
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;激活 scl 安装的软件：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;scl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;enable&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;devtoolset-4&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bash

&lt;span class=&#34;c1&#34;&gt;# 如果 scl enable 不起作用，可使用 source 激活&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/opt/rh/devtoolset-4/enable

$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;gcc&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--version
gcc&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;GCC&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;5&lt;/span&gt;.3.1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;20160406&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;Red&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Hat&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;5&lt;/span&gt;.3.1-6&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
Copyright&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;C&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2015&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Free&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Software&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Foundation,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Inc.
This&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;is&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;free&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;software&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;see&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;copying&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conditions.&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;There&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;is&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;NO
warranty&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;even&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;MERCHANTABILITY&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;or&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FITNESS&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FOR&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;A&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;PARTICULAR&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;PURPOSE.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FgsRX8bDdqMjLPQDL7U3YIIMZQV3.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;卸载&#34;&gt;卸载&lt;a class=&#34;headerlink&#34; href=&#34;#卸载&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;可能大家用完开发工具集后就会想要删除它，其实很简单，输入以下命令：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;yum&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;remove&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;devtoolset-3&lt;span class=&#34;se&#34;&gt;\*&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;然后也可以删除 SCL 管理工具：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;yum&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;remove&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;scl-utils&lt;span class=&#34;se&#34;&gt;\*&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;3-参考资料&#34;&gt;3. 参考资料&lt;a class=&#34;headerlink&#34; href=&#34;#3-参考资料&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&#34;https://kakts-tec.hatenablog.com/entry/2018/04/11/000613&#34;&gt;Installing node.js v8.11.1 to centos 6.5 server. - kakts-log&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://segmentfault.com/a/1190000004193587&#34;&gt;RedHat6 系列 Devtool-Set - SegmentFault 思否&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.softwarecollections.org/en/&#34;&gt;Software Collections — Software Collections&lt;/a&gt;，SCL 官网&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://access.redhat.com/documentation/en-us/red_hat_developer_toolset/4&#34;&gt;Product Documentation for Red Hat Developer Toolset 4 | Red Hat Customer Portal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://copr.fedorainfracloud.org/coprs/rhscl/&#34;&gt;Fedora copr Rhscl&amp;rsquo;s Projects Project List&lt;/a&gt;，Fedora copr Rhscl&amp;rsquo;s Projects 官网&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://linux.web.cern.ch/devtoolset/&#34;&gt;Index - Developer Toolset&lt;/a&gt;，devtoolset1-3，Linux @ CERN&lt;/li&gt;
&lt;/ol&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E7%B3%BB%E7%BB%9F%E4%B8%8E%E7%BC%96%E8%AF%91/2021-09-02-scl-devtoolset-note/</link>
      <pubDate>Thu, 02 Sep 2021 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E7%B3%BB%E7%BB%9F%E4%B8%8E%E7%BC%96%E8%AF%91/2021-09-02-scl-devtoolset-note/</guid>
      
    </item>
    
    <item>
      <title>GLIBC 笔记 | 安装与使用</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-08-31&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-08-31T00:00:00&#39;&gt;2021-08-31&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2022-04-13&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2022-04-13T11:06:47&#39;&gt;2022-04-13&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;1200px-Linux_API.svg.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FuZxpXjNWRsdlO7LmeQ5Zj9CxDMi.png&#34; /&gt;&lt;/p&gt;
&lt;h1 id=&#34;前言&#34;&gt;前言&lt;a class=&#34;headerlink&#34; href=&#34;#前言&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;如果你不太了解 glibc，请不要随便升级，请不要随便升级，请不要随便升级！重要的事情说三遍！！！&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Glibc 是 GNU 发布的 libc 库，即 c 运行库。glibc 是 linux 系统中最底层的 api，几乎其它任何运行库都会依赖于 glibc。glibc 除了封装 linux 操作系统所提供的系统服务外，它本身也提供了许多其它一些必要功能服务的实现。由于 glibc 囊括了几乎所有的 UNIX 通行的标准，可以想见其内容包罗万象。而就像其他的 UNIX 系统一样，其内含的档案群分散于系统的树状目录结构中，像一个支架一般撑起整个作业系统。在 GNU/Linux 系统中，其 C 函式库发展史点出了 GNU/Linux   演进的几个重要里程碑，用 glibc 作为系统的 C 函式库，是 GNU/Linux 演进的一个重要里程碑。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;由于 Glibc 是一个比较底层的依赖库，为了 CentOS 6 安全，你可能不太想冒着风险直接升级，特别是对于一些运行这其他业务的服务器。前车之鉴就在这里！&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.yuque.com/shenweiyan/cookbook/hpc-experience-glibc?view=doc_embed&#34;&gt;一次&amp;rdquo;胆战心惊&amp;rdquo;的真实集群运维经历&lt;/a&gt;&lt;/p&gt;
&lt;h1 id=&#34;安装&#34;&gt;安装&lt;a class=&#34;headerlink&#34; href=&#34;#安装&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;CentOS 6.5，最高支持 glibc 的版本为 2.12，而有些程序要 2.14 或者更高版本，所以需要升级或者额外安装。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$ strings /lib64/libc.so.6 |grep GLIBC_
GLIBC_2.2.5
GLIBC_2.2.6
GLIBC_2.3
GLIBC_2.3.2
GLIBC_2.3.3
GLIBC_2.3.4
GLIBC_2.4
GLIBC_2.5
GLIBC_2.6
GLIBC_2.7
GLIBC_2.8
GLIBC_2.9
GLIBC_2.10
GLIBC_2.11
GLIBC_2.12
GLIBC_2.13
GLIBC_2.14
GLIBC_PRIVATE
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;常规的安装方法如下：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mkdir&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~/glibc_install&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~/glibc_install
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;wget&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;http://ftp.gnu.org/gnu/glibc/glibc-2.14.tar.gz
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tar&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;zxvf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;glibc-2.14.tar.gz
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;glibc-2.14
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mkdir&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;build
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;build
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;../configure&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/opt/glibc-2.14
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-j4
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sudo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;LD_LIBRARY_PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;/opt/glibc-2.14/lib:&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$LD_LIBRARY_PATH&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;安装过程中如果出现以下 &lt;strong&gt;LD_LIBRARY_PATH shouldn&amp;rsquo;t contain the current directory when building glibc&lt;/strong&gt; 提示，可以按照下面的方法处理：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;configure:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;WARNING:
***&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;These&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;auxiliary&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;programs&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;are&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;missing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;or&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;incompatible&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;versions:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;makeinfo
***&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;some&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;features&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;will&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;be&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;disabled.
***&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Check&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;INSTALL&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;required&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;versions.
checking&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;LD_LIBRARY_PATH&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;variable...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;contains&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;current&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;directory
configure:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;error:
***&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;LD_LIBRARY_PATH&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;shouldn&lt;span class=&#34;err&#34;&gt;&amp;#39;&lt;/span&gt;t&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;contain&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;current&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;directory&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;when
***&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;building&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;glibc.&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Please&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;change&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;environment&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;variable
***&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;and&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;run&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;configure&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;again.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;先 echo $LD_LIBRARY_PATH 先看一下结果；&lt;/li&gt;
&lt;li&gt;确保结果中不包含了 &amp;ldquo;:&amp;rdquo; 的结尾！&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nb&#34;&gt;unset&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;LD_LIBRARY_PATH
&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;LD_LIBRARY_PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/path/to/prefix/dir/lib
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h1 id=&#34;使用&#34;&gt;使用&lt;a class=&#34;headerlink&#34; href=&#34;#使用&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id=&#34;segmentation-fault&#34;&gt;&lt;strong&gt;Segmentation fault&lt;/strong&gt;&lt;a class=&#34;headerlink&#34; href=&#34;#segmentation-fault&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;很多人喜欢在手动安装完以后，通过设置 LD_LIBRARY_PATH 环境，然后进行使用，但是这样的用法很容易会导致 **Segmentation fault (core dumped) **的异常。折中的解决方法如下：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;/path/to/newglibc/lib/ld-linux-x86-64.so.2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/path/to/your_app

如：
/path/to/newglibc/lib/ld-linux-x86-64.so.2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/bin/ls
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FhDaNq2dK0q5qz2bEyz7BKmRuP0y.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;patchelf&#34;&gt;PatchELF&lt;a class=&#34;headerlink&#34; href=&#34;#patchelf&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;在同一台服务器上安装并使用多个版本的 GLIBC，StackOverflow 上很多人都在推荐使用 PatchELF 这个工具，PatchELF 是一个用于修改现有 ELF 可执行文件和库的简单实用程序。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;ELF: 可执行与可链接格式（Executable and Linkable Format），常被称为 ELF 格式。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;StackOverflow 上关于在同一台服务器上安装并使用多个版本的 GLIBC 的讨论可以参考：&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://stackoverflow.com/questions/847179/multiple-glibc-libraries-on-a-single-host/44710599&#34;&gt;Multiple glibc libraries on a single host&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;PatchELF 是一个开源的工具，GitHub 链接：&lt;a href=&#34;https://github.com/NixOS/patchelf&#34;&gt;https://github.com/NixOS/patchelf&lt;/a&gt;，用法可以参考：&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://zhuanlan.zhihu.com/p/344100889&#34;&gt;找不到动态链接库？&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.baeldung.com/linux/multiple-glibc&#34;&gt;Please Wait&amp;hellip; | Cloudflare&lt;/a&gt;&lt;/p&gt;
&lt;h1 id=&#34;参考资料&#34;&gt;参考资料&lt;a class=&#34;headerlink&#34; href=&#34;#参考资料&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&#34;https://www.baeldung.com/linux/author/haidarali&#34;&gt;Haidar Ali&lt;/a&gt;，《&lt;a href=&#34;https://www.baeldung.com/linux/multiple-glibc&#34;&gt;Multiple glibc on a Single Linux Machine&lt;/a&gt;》，Baeldung on Linux&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.zhihu.com/people/shou-hu-tian-xin-67&#34;&gt;名本无名&lt;/a&gt;，《&lt;a href=&#34;https://zhuanlan.zhihu.com/p/344100889&#34;&gt;找不到动态链接库？&lt;/a&gt;》，知乎专栏&lt;/li&gt;
&lt;li&gt;Unix &amp;amp; Linux，《&lt;a href=&#34;https://qastack.cn/unix/176489/how-to-update-glibc-to-2-14-in-centos-6-5&#34;&gt;如何在 CentOS 6.5 中将 glibc 更新到 2.14&lt;/a&gt;》，&lt;a href=&#34;https://qastack.cn/&#34;&gt;QA Stack&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;試毅-思伟，《&lt;a href=&#34;https://cloud.tencent.com/developer/article/1453839?from=14588&#34;&gt;Linux 下安装 GLIBC_2.15&lt;/a&gt;》，&lt;a href=&#34;https://cloud.tencent.com/developer&#34;&gt;云+社区 - 腾讯云&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://caosiyang.github.io/about/&#34;&gt;caosiyang&lt;/a&gt;，《&lt;a href=&#34;https://caosiyang.github.io/posts/2020/02/06/scl/&#34;&gt;SCL 基本用法&lt;/a&gt;》，&lt;a href=&#34;https://caosiyang.github.io/&#34;&gt;一个单板滑雪爱好者的编程笔记&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.csdn.net/yangyangye&#34;&gt;zzhongcy&lt;/a&gt;，《&lt;a href=&#34;https://blog.csdn.net/zzhongcy/article/details/89950976&#34;&gt;CentOS/RHEL 开发环境之 devtoolset&lt;/a&gt;》，&lt;a href=&#34;https://blog.csdn.net/?spm=1000.2115.3001.4477&#34;&gt;CSDN 博客 - 专业 IT 技术发表平台&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E7%B3%BB%E7%BB%9F%E4%B8%8E%E7%BC%96%E8%AF%91/2021-08-31-glibc/</link>
      <pubDate>Tue, 31 Aug 2021 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E7%B3%BB%E7%BB%9F%E4%B8%8E%E7%BC%96%E8%AF%91/2021-08-31-glibc/</guid>
      
    </item>
    
    <item>
      <title>Perl 程序编写101</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-08-27&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-08-27T00:00:00&#39;&gt;2021-08-27&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-10-02&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-10-02T09:15:16&#39;&gt;2021-10-02&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id=&#34;参数传递&#34;&gt;参数传递&lt;a class=&#34;headerlink&#34; href=&#34;#参数传递&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;#!/usr/bin/perl
use strict;
use Getopt::Long;
use Smart::Comments;

my @libs    = ();
my %flags   = ();
my ( $verbose, $all, $more, $diam, $debug, $test, $step);

GetOptions(
        &amp;#39;verbose+&amp;#39;  =&amp;gt; \$verbose,
        &amp;#39;more!&amp;#39;     =&amp;gt; \$more,
        &amp;#39;debug:i&amp;#39;   =&amp;gt; \$debug,
        &amp;#39;lib=s&amp;#39;     =&amp;gt; \@libs,
        &amp;#39;flag=s&amp;#39;    =&amp;gt; \%flags,
        &amp;#39;test|t&amp;#39;    =&amp;gt; \$test,
        &amp;#39;all|everything|universe&amp;#39; =&amp;gt; $all,
);

### $verbose
### $more
### $debug
### $test
### @libs;
### %flags
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;这就是使用的方法,下面是详细解释,注意看 GetOptions 中的 =&amp;gt; 前面的部分.下面是详解&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&amp;lsquo;verbose+&amp;rsquo; 接有 + 的选项不接收变量,后面不需要加内容.直接使用就行了,会在每次出现时增加一次变量,就是讲命行时在参数中 -verbose -verbose 出现二次时 verbose 的值就会变成 2。&lt;/li&gt;
&lt;li&gt;&amp;lsquo;more!&amp;rsquo;&amp;rsquo; 接有 ! 的选项不接收变量(也就是讲后面不需要加参数 –more 来使用就行了),只要命令行中出现了这个参数,就会默认是 1 ,是用来设置打开和关掉一个功能的&amp;gt;.可以在参数前加 no 变成负的例如-nomore.&lt;/li&gt;
&lt;li&gt;&amp;lsquo;flag=s&amp;rsquo; 接有 = 的字符串要求接字符串（s）、整数（i）,或者浮点（f）等类型的变量.&lt;/li&gt;
&lt;li&gt;&amp;lsquo;debug:i&amp;rsquo; 接有 : 的选项会接受缺省为 0 或者为空字符串的可选变量&lt;/li&gt;
&lt;li&gt;&amp;lsquo;test|t&amp;rsquo; 接有 | 的选项表示可以给 –test 简写为 -t.&lt;/li&gt;
&lt;li&gt;&amp;lsquo;lib=s&amp;rsquo; =&amp;gt; @libs 如果相关联的变量是个数组, 如这个地方的 @libs, 那么选项可以多次出现, 值可以被推到数组里.&lt;/li&gt;
&lt;li&gt;&amp;lsquo;flag=s&amp;rsquo; =&amp;gt; %flags 如果相关联的变量是个散列, 那么就要求一个键=值（key=value）对, 并被插入到散列里.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;备注:
在匹配参数名的时候,GetOptions 在缺省设置下会忽略大小写,默认参数被简写为唯一的最短字符串(首字母)（例如,-m 代表 -more. 相同的首字母时,会加上第二个字母来区分)&lt;/p&gt;
&lt;p&gt;未完待续。。。。&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E7%BC%96%E7%A8%8B%E6%8A%80%E6%9C%AF/Perl/2021-08-27-ec2340/</link>
      <pubDate>Fri, 27 Aug 2021 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E7%BC%96%E7%A8%8B%E6%8A%80%E6%9C%AF/Perl/2021-08-27-ec2340/</guid>
      
    </item>
    
    <item>
      <title>Microsoft Edge 的那些事</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-08-25&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-08-25T00:00:00&#39;&gt;2021-08-25&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-10-31&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-10-31T10:39:34&#39;&gt;2021-10-31&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;2021 年 8 月 24 日，&lt;a href=&#34;https://www.zhihu.com/question/374362886&#34;&gt;新版 edge 浏览器新标签页出现“中国特供”且无法关闭的广告&lt;/a&gt;登上知乎热搜，在 &lt;a href=&#34;https://www.v2ex.com/t/797669&#34;&gt;V2EX&lt;/a&gt; 上也被广泛吐槽！&lt;/p&gt;
&lt;h2 id=&#34;关于下载&#34;&gt;关于下载&lt;a class=&#34;headerlink&#34; href=&#34;#关于下载&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;常规下载（&lt;a href=&#34;https://www.microsoft.com/zh-cn/edge&#34;&gt;https://www.microsoft.com/zh-cn/edge&lt;/a&gt;），下载的是 MicrosoftEdgeSetup.exe 文件，大小约 10MB 以内，在安装过程中会执行 edge 实际文件的下载和后续安装。&lt;/p&gt;
&lt;p&gt;商业版本下载（&lt;a href=&#34;https://www.microsoft.com/zh-cn/edge/business/download&#34;&gt;https://www.microsoft.com/zh-cn/edge/business/download&lt;/a&gt;），下载的是 MicrosoftEdgeEnterpriseX64.msi 文件，大小超过 100MB，安装过程中不会执行其他下载，等同于源码包。&lt;/p&gt;
&lt;h2 id=&#34;新标签页设置&#34;&gt;新标签页设置&lt;a class=&#34;headerlink&#34; href=&#34;#新标签页设置&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fqla_qrIKZEWdDPNKirN7Uub0_dh.png&#34; /&gt;
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FvT8VF2KAuhLKF0OMSvDxLk2_MIK.png&#34; /&gt;&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/Windows/2021-08-25-tebxwh/</link>
      <pubDate>Wed, 25 Aug 2021 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/Windows/2021-08-25-tebxwh/</guid>
      
    </item>
    
    <item>
      <title>Python 包安装和 postgresql 的一些问题</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-08-18&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-08-18T00:00:00&#39;&gt;2021-08-18&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2022-09-29&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2022-09-29T08:24:46&#39;&gt;2022-09-29&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;今天安装 &lt;a href=&#34;https://github.com/biocommons/hgvs&#34;&gt;hgvs&lt;/a&gt; 这个 python 包的时候，遇到几个比较有代表性的问题，记录分享一下。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;hgvs is a Python package to parse, format, validate, normalize, and map biological sequence variants according to recommendations of the Human Genome Variation Society.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;怎么查看-python-未安装包的依赖&#34;&gt;怎么查看 python 未安装包的依赖&lt;a class=&#34;headerlink&#34; href=&#34;#怎么查看-python-未安装包的依赖&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;我们知道的 &lt;strong&gt;pip show hgvs&lt;/strong&gt; 和 &lt;strong&gt;pipdeptree -p hgvs&lt;/strong&gt; 都只能看到&lt;strong&gt;已安装&lt;/strong&gt; Python 包的依赖，但是&lt;strong&gt;未安装&lt;/strong&gt;的 Python 包依赖目前通过 pip 应该是暂时没法看的。&lt;a href=&#34;https://stackoverflow.com/questions/41816693/how-to-list-dependencies-for-a-python-library-without-installing&#34;&gt;stackoverflow&lt;/a&gt; 上看到一个折中的方法，比较繁琐。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;In&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;requests&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;In&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;url&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;https://pypi.org/pypi/&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{}&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;/json&amp;#39;&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;In&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;json&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;requests&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;format&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;hgvs&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;json&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;In&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;json&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;info&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;][&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;requires_dist&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Out&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;attrs (&amp;gt;=17.4.0)&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
 &lt;span class=&#34;s1&#34;&gt;&amp;#39;biocommons.seqrepo (&amp;lt;1.0)&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
 &lt;span class=&#34;s1&#34;&gt;&amp;#39;bioutils (&amp;lt;1.0,&amp;gt;=0.4.0)&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
 &lt;span class=&#34;s1&#34;&gt;&amp;#39;configparser (&amp;gt;=3.3.0)&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
 &lt;span class=&#34;s1&#34;&gt;&amp;#39;ipython&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
 &lt;span class=&#34;s1&#34;&gt;&amp;#39;parsley&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
 &lt;span class=&#34;s1&#34;&gt;&amp;#39;psycopg2-binary&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
 &lt;span class=&#34;s1&#34;&gt;&amp;#39;six&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;In&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;json&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;info&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;][&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;requires_python&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Out&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;除此之外，可以通过 conda 的方式查看（&lt;strong&gt;conda search hgvs &amp;ndash;info&lt;/strong&gt;）。
&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Flw6SnwGbNRSvoRHx_41pZSFo1Pe.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;psycopg-requires-libpq--91&#34;&gt;Psycopg requires libpq &amp;gt;= 9.1&lt;a class=&#34;headerlink&#34; href=&#34;#psycopg-requires-libpq--91&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;hgvs 的安装依赖于 psycopg2-binary，而 psycopg2-binary 又依赖于 psycopg2。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FnNQMS7enSQOEFDZswwvcNDGCFZ0.png&#34; /&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;err&#34;&gt;$&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pip&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;install&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;psycopg2&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Collecting&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;psycopg2&lt;/span&gt;
  &lt;span class=&#34;n&#34;&gt;Downloading&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;psycopg2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;2.9.1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tar&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;gz&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;379&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
     &lt;span class=&#34;o&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;████████████████████████████████&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;379&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kB&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;133&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kB&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Using&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;legacy&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;setup.py install&amp;#39;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;psycopg2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;since&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;package&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;wheel&amp;#39;&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;is&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;installed&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Installing&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;collected&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;packages&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;psycopg2&lt;/span&gt;
    &lt;span class=&#34;n&#34;&gt;Running&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;setup&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;py&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;install&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;psycopg2&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;...&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;error&lt;/span&gt;
    &lt;span class=&#34;n&#34;&gt;ERROR&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Command&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;errored&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;out&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;with&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;exit&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;status&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
    &lt;span class=&#34;o&#34;&gt;......&lt;/span&gt;
    &lt;span class=&#34;n&#34;&gt;In&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;file&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;included&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;psycopg&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;psycopgmodule&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;28&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
    &lt;span class=&#34;o&#34;&gt;./&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;psycopg&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;psycopg&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;h&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;31&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;error&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;#error &amp;quot;Psycopg requires PostgreSQL client library (libpq) &amp;gt;= 9.1&amp;quot;&lt;/span&gt;
     &lt;span class=&#34;c1&#34;&gt;#error &amp;quot;Psycopg requires PostgreSQL client library (libpq) &amp;gt;= 9.1&amp;quot;&lt;/span&gt;
     &lt;span class=&#34;o&#34;&gt;......&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;CentOS 6 默认的 PostgreSQL 最高版本为 8.4.18，需要安装 9.1 以上版本的 postgresql 才可以解决以上出现的 &amp;ldquo;&lt;strong&gt;Psycopg requires PostgreSQL client library (libpq) &amp;gt;= 9.1&lt;/strong&gt;&amp;rdquo; 问题。&lt;/p&gt;
&lt;h2 id=&#34;centosred-hat-安装-postgresql&#34;&gt;CentOS/Red Hat 安装 PostgreSQL&lt;a class=&#34;headerlink&#34; href=&#34;#centosred-hat-安装-postgresql&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;使用 &lt;strong&gt;yum list postgresql&lt;/strong&gt;* 命令可以看到：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CentOS 6 默认的 PostgreSQL 最高版本为 8.4.18；&lt;/li&gt;
&lt;li&gt;CentOS 7 默认的 PostgreSQL 最高版本为 9.2.24。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果需要在 CentOS/Red Hat Enterprise Linux 中安装 PostgreSQL 9/10 以上版本，需要：&lt;/p&gt;
&lt;h3 id=&#34;1-配置-yum-源&#34;&gt;1. 配置 yum 源&lt;a class=&#34;headerlink&#34; href=&#34;#1-配置-yum-源&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;该步骤安装完成后，会在 /etc/yum.repos.d 目录下生成一个 pgdg-redhat-all.repo，里面为 PostgreSQL 各个版本的源信息。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# Red Hat Enterprise Linux 7 - x86_64&lt;/span&gt;
yum&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-y&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm

&lt;span class=&#34;c1&#34;&gt;# CentOS 7 - x86_64&lt;/span&gt;
yum&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-y&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm

&lt;span class=&#34;c1&#34;&gt;# Red Hat Enterprise Linux 6 - x86_64&lt;/span&gt;
yum&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-y&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://download.postgresql.org/pub/repos/yum/reporpms/EL-6-x86_64/pgdg-redhat-repo-latest.noarch.rpm

&lt;span class=&#34;c1&#34;&gt;# CentOS 6 - x86_64&lt;/span&gt;
yum&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-y&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://download.postgresql.org/pub/repos/yum/reporpms/EL-6-x86_64/pgdg-redhat-repo-latest.noarch.rpm
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;最新的 yum 源 rpm 包可以在这里找到：&lt;a href=&#34;https://yum.postgresql.org/repopackages/&#34;&gt;https://yum.postgresql.org/repopackages/&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;2-安装&#34;&gt;2. 安装&lt;a class=&#34;headerlink&#34; href=&#34;#2-安装&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;yum 源安装完成后，再次执行 yum list postgresql* 命令可以看到 postgresql*、postgresql10*、postgresql11*、.... 各个版本的 PostgreSQL 列表，选择需要的版本安装。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;yum&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-y&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;postgresql10&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;postgresql10-devel
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;yum 的方式安装的 PostgreSQL 默认保存在 /usr/pgsql-10（/usr/pgsql-9.6）下面。&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id=&#34;3-初始化与启动&#34;&gt;3. 初始化与启动&lt;a class=&#34;headerlink&#34; href=&#34;#3-初始化与启动&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;具体自己去谷歌，或者参考：《&lt;a href=&#34;https://www.yuque.com/bioitee/mp/linux-postgresql-install?view=doc_embed&#34;&gt;Linux 下 PostgreSQL 源码编译安装&lt;/a&gt;》。&lt;/p&gt;
&lt;h2 id=&#34;undefined-symbol-pqescapeidentifier&#34;&gt;undefined symbol: PQescapeIdentifier&lt;a class=&#34;headerlink&#34; href=&#34;#undefined-symbol-pqescapeidentifier&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;安装完 psycopg2 和 hgvs 后，如果 import 过程中出现类似于 &lt;strong&gt;_psycopg.cpython-37m-x86_64-linux-gnu.so: undefined symbol: PQescapeIdentifier&lt;/strong&gt; 的异常，可以查看一下 &lt;strong&gt;_psycopg.cpython-37m-x86_64-linux-gnu.so&lt;/strong&gt; 的对应的动态库链接 &lt;strong&gt;libpq.so&lt;/strong&gt; 是否正确。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ldd&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/SoftWare/Python-3.7.3/lib/python3.7/site-packages/psycopg2/_psycopg.cpython-37m-x86_64-linux-gnu.so
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;linux-vdso.so.1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007fff65bff000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libpq.so.5&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/lib64/libpq.so.5&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007fbe7bb03000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libpthread.so.0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/lib64/libpthread.so.0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007fbe7b8e6000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libc.so.6&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/lib64/libc.so.6&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007fbe7b551000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libssl.so.10&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/lib64/libssl.so.10&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007fbe7b2e5000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libcrypto.so.10&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/lib64/libcrypto.so.10&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007fbe7af00000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libgssapi_krb5.so.2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/lib64/libgssapi_krb5.so.2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007fbe7acbb000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libldap_r-2.4.so.2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/lib64/libldap_r-2.4.so.2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007fbe7aa67000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;/lib64/ld-linux-x86-64.so.2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x0000003636a00000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libkrb5.so.3&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/lib64/libkrb5.so.3&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007fbe7a781000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libcom_err.so.2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/lib64/libcom_err.so.2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007fbe7a57c000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libk5crypto.so.3&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/lib64/libk5crypto.so.3&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007fbe7a350000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libdl.so.2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/lib64/libdl.so.2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007fbe7a14c000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libz.so.1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/RiboBio/Bioinfo/APPS/R-3.3.2/lib/libz.so.1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007fbe79f34000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libkrb5support.so.0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/lib64/libkrb5support.so.0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007fbe79d29000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libkeyutils.so.1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/lib64/libkeyutils.so.1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007fbe79b26000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libresolv.so.2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/lib64/libresolv.so.2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007fbe7990b000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;liblber-2.4.so.2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/lib64/liblber-2.4.so.2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007fbe796fc000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libssl3.so&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/lib64/libssl3.so&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007fbe794bf000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libsmime3.so&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/lib64/libsmime3.so&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007fbe79292000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libnss3.so&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/lib64/libnss3.so&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007fbe78f54000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libnssutil3.so&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/lib64/libnssutil3.so&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007fbe78d28000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libplds4.so&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/lib64/libplds4.so&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007fbe78b23000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libplc4.so&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/lib64/libplc4.so&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007fbe7891e000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libnspr4.so&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/lib64/libnspr4.so&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007fbe786e1000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libsasl2.so.2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/lib64/libsasl2.so.2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007fbe784c6000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libselinux.so.1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/lib64/libselinux.so.1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007fbe782a7000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;librt.so.1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/lib64/librt.so.1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007fbe7809e000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libcrypt.so.1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/lib64/libcrypt.so.1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007fbe77e67000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libfreebl3.so&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/lib64/libfreebl3.so&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007fbe77bf0000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;正常情况下，/usr/lib64/libpq.so.5 应该对应于 /usr/pgsql-10/lib/libpq.so.5，如果不是，可以参考下面两种方法：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;通过设置 &lt;strong&gt;LD_LIBRARY_PATH&lt;/strong&gt;，使其链接正确的动态库。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;export LD_LIBRARY_PATH=/usr/pgsql-10/lib:$LD_LIBRARY_PAT&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;先备份重命名 /usr/lib64/libpq.so.5，再把正确的 libpq.so.5 软连接过去。&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mv&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/lib64/libpq.so.5&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/lib64/libpq.so.5.old
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ln&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-s&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/pgsql-10/lib/libpq.so.5&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/lib64/libpq.so.5
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E6%95%B0%E6%8D%AE%E5%BA%93/2021-08-18-hgvs-pgsql/</link>
      <pubDate>Wed, 18 Aug 2021 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E6%95%B0%E6%8D%AE%E5%BA%93/2021-08-18-hgvs-pgsql/</guid>
      
    </item>
    
    <item>
      <title>服务器又中毒了，得治一治！</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-08-03&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-08-03T00:00:00&#39;&gt;2021-08-03&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-08-03&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-08-03T14:21:02&#39;&gt;2021-08-03&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;今年 5 月 20 日左右，第一次从 kswapd0 占用这系统的资源，I/O 持续过高且极其内存中发现服务器被植入了挖矿病毒。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FowwD6jmOtrz11qXl27wiNj8GpCh.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;直到今天，crontab -l 再次发现另外一个账号出现类似异常。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FnZEIdm-EOSht6l-SdrlRiIz8kbh.png&#34; /&gt;
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fpi-jiOvT-MWZ4hRG_kz8TIEx8kP.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;outlaw-攻击&#34;&gt;Outlaw 攻击&lt;a class=&#34;headerlink&#34; href=&#34;#outlaw-攻击&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;其实，我们只要把 kswapd0、.X25-unix 直接谷歌，不难发现其实这就是一个挖矿的病毒，认真看一下它植入的一些代码，基本就可以确定它就是腾讯安全威胁情报中心曾经提到的国内大量企业遭遇亡命徒（Outlaw）僵尸网络攻击。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;腾讯安全威胁情报中心检测到国内大量企业遭遇亡命徒（Outlaw）僵尸网络攻击。亡命徒（Outlaw）僵尸网络最早于 2018 年被发现，其主要特征为通过 SSH 爆破攻击目标系统，同时传播基于 Perl 的 Shellbot 和门罗币挖矿木马。腾讯安全威胁情报中心安全大数据显示，亡命徒（Outlaw）僵尸网络已造成国内约 2 万台 Linux 服务器感染，影响上万家企业。&lt;/p&gt;
&lt;p&gt;此次攻击传播的母体文件为 dota3.tar.gz，可能为亡命徒（Outlaw）僵尸网络的第 3 个版本，母体文件释放 shell 脚本启动对应二进制程序，kswapd0 负责进行门罗币挖矿，tsm32、tsm64 负责继续 SSH 爆破攻击传播病毒。&lt;/p&gt;
&lt;p&gt;亡命徒（Outlaw）僵尸网络之前通过利用 Shellshock 漏洞进行分发，因此被命名为 &amp;ldquo;Shellbot&amp;rdquo;。Shellbot 利用物联网（IoT）设备和 Linux 服务器上的常见命令注入漏洞进行感染。Shellshock 漏洞 (CVE-2014-7169) 是 2014 年在 Bash command shell 中发现的一个严重的漏洞，大多数 Linux 发行版通常会使用到该功能，攻击者可以在这些受影响的 Linux 服务器上远程执行代码。&lt;/p&gt;
&lt;p&gt;来源：《&lt;a href=&#34;https://s.tencent.com/research/report/1021.html&#34;&gt;亡命徒（Outlaw）僵尸网络感染约 2 万台 Linux 服务器，腾讯安全提醒企业及时清除&lt;/a&gt;》&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FgRBphDP_1oMvRwXWw6xcg85u3x-.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;安全建议&#34;&gt;安全建议&lt;a class=&#34;headerlink&#34; href=&#34;#安全建议&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;建议企业 Linux 服务器管理员检查服务器资源占用情况，及时修改弱密码，避免被暴力破解。若发现服务器已被入侵安装挖矿木马，可参考以下步骤手动检查、清除：&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;删除以下文件，杀死对应进程（杀死 kswapd0 进程，如果 tsm32、tsm64 进程也存在的话也杀死）：&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;/tmp/*-unix/.rsync/a/kswapd0
*/.configrc/a/kswapd0
md5:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;84945e9ea1950be3e870b798bd7c7559
/tmp/*-unix/.rsync/c/tsm64
md5:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;4adb78770e06f8b257f77f555bf28065
/tmp/*-unix/.rsync/c/tsm32
md5:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;10ea65f54f719bffcc0ae2cde450cb7a
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;检查 cron.d 中是否存在包含以下内容的定时任务，如有进行删除：&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;/a/upd
/b/sync
/c/aptitude
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;通过 crontab -e 命令删除相关的定时任务。&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;*/2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/RiboBio/home/lsfadmin/.configrc/a/upd&amp;gt;/dev/null&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&amp;gt;&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
@reboot&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/RiboBio/home/lsfadmin/.configrc/a/upd&amp;gt;/dev/null&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&amp;gt;&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
&lt;span class=&#34;m&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;8&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/RiboBio/home/lsfadmin/.configrc/b/sync&amp;gt;/dev/null&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&amp;gt;&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
@reboot&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/RiboBio/home/lsfadmin/.configrc/b/sync&amp;gt;/dev/null&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&amp;gt;&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;*/3&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/tmp/.X25-unix/.rsync/c/aptitude&amp;gt;/dev/null&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&amp;gt;&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;如果发现存在通过在授权的 ssh 密钥文件中安装 ssh 指纹来设置 ssh 后门，请删除：&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;cat&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~/.ssh/authorized_keys
ssh-rsa&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;AAAAB3NzaC1yc2EAAAABJQAAAQEArDp4cun2lhr4KUhBGE7VvAcwdli2a8dbnrTOrbMz1+5O73fcBOx8NVbUT0bUanUV9tJ2/9p7+vD0EpZ3Tz/+0kX34uAx1RV/75GVOmNx+9EuWOnvNoaJe0QXxziIg9eLBHpgLMuakb5+BgTFB+rKJAw9u9FSTDengvS8hX1kNFS4Mjux0hJOK8rvcEmPecjdySYMb66nylAKGwCEE6WEQHmd1mUPgHwGQ0hWCwsQk13yCGPK5w6hYp5zYkFnvlC8hGmd4Ww+u97k6pfTGTUbJk14ujvcD9iUKQTTWYYjIIu5PmUux5bsZ0R4WFwdIe6+i6rBLAsPKgAySVKPRK+oRw&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mdrfckr
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;rm&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-rf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~/.ssh/authorized_keys
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;更新 ssh 的账号密码，因为该木马就是通过爆破 ssh 账号进来的。&lt;/li&gt;
&lt;/ol&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%AE%89%E5%85%A8%E7%AE%A1%E7%90%86/2021-08-03-kswapd0/</link>
      <pubDate>Tue, 03 Aug 2021 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%AE%89%E5%85%A8%E7%AE%A1%E7%90%86/2021-08-03-kswapd0/</guid>
      
    </item>
    
    <item>
      <title>常用物种拉丁名</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-08-03&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-08-03T00:00:00&#39;&gt;2021-08-03&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-09-15&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-09-15T13:37:02&#39;&gt;2021-09-15&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;1&lt;/th&gt;
&lt;th&gt;Homo sapiens&lt;/th&gt;
&lt;th&gt;human&lt;/th&gt;
&lt;th&gt;人&lt;/th&gt;
&lt;th&gt;&lt;a href=&#34;https://www.ncbi.nlm.nih.gov/Taxonomy/Browser/wwwtax.cgi?id=9606&#34;&gt;9606&lt;/a&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;Mus musculus&lt;/td&gt;
&lt;td&gt;mouse&lt;/td&gt;
&lt;td&gt;小鼠&lt;/td&gt;
&lt;td&gt;&lt;a href=&#34;https://www.ncbi.nlm.nih.gov/Taxonomy/Browser/wwwtax.cgi?id=10090&#34;&gt;10090&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;Rattus norvegicus&lt;/td&gt;
&lt;td&gt;rat&lt;/td&gt;
&lt;td&gt;大鼠&lt;/td&gt;
&lt;td&gt;&lt;a href=&#34;https://www.ncbi.nlm.nih.gov/Taxonomy/Browser/wwwtax.cgi?id=10116&#34;&gt;10116&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;Xenopus laevis&lt;/td&gt;
&lt;td&gt;frog&lt;/td&gt;
&lt;td&gt;爪蟾&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;Drosophila melanogaster&lt;/td&gt;
&lt;td&gt;fruit fly&lt;/td&gt;
&lt;td&gt;果蝇&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;Caenorhabditis elegans&lt;/td&gt;
&lt;td&gt;nematode&lt;/td&gt;
&lt;td&gt;线虫&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;Arabidopsis thaliana&lt;/td&gt;
&lt;td&gt;thale cress&lt;/td&gt;
&lt;td&gt;拟南芥&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;Escherichia coli&lt;/td&gt;
&lt;td&gt;colibacillus&lt;/td&gt;
&lt;td&gt;大肠杆菌&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;Saccharomyces cerevisiae&lt;/td&gt;
&lt;td&gt;yeast&lt;/td&gt;
&lt;td&gt;酵母&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;Sus scrofa&lt;/td&gt;
&lt;td&gt;pig&lt;/td&gt;
&lt;td&gt;猪&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;Bos taurus&lt;/td&gt;
&lt;td&gt;cow&lt;/td&gt;
&lt;td&gt;牛&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;Gallus gallus&lt;/td&gt;
&lt;td&gt;chicken&lt;/td&gt;
&lt;td&gt;鸡&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;13&lt;/td&gt;
&lt;td&gt;Danio rerio&lt;/td&gt;
&lt;td&gt;zebrafish&lt;/td&gt;
&lt;td&gt;斑马鱼&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;14&lt;/td&gt;
&lt;td&gt;Hordeum vulgare&lt;/td&gt;
&lt;td&gt;barley&lt;/td&gt;
&lt;td&gt;大麦&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;td&gt;Triticum aestivum&lt;/td&gt;
&lt;td&gt;wheat&lt;/td&gt;
&lt;td&gt;小麦&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;td&gt;Oryza sativa&lt;/td&gt;
&lt;td&gt;rice&lt;/td&gt;
&lt;td&gt;水稻&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;17&lt;/td&gt;
&lt;td&gt;Zea mays&lt;/td&gt;
&lt;td&gt;maize&lt;/td&gt;
&lt;td&gt;玉米&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;18&lt;/td&gt;
&lt;td&gt;Oryctolagus cuniculus&lt;/td&gt;
&lt;td&gt;rabbit&lt;/td&gt;
&lt;td&gt;家兔&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;19&lt;/td&gt;
&lt;td&gt;Ciona intestinalis&lt;/td&gt;
&lt;td&gt;sea squirt&lt;/td&gt;
&lt;td&gt;海胆&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;20&lt;/td&gt;
&lt;td&gt;Anopheles gambiae&lt;/td&gt;
&lt;td&gt;malaria mosquito&lt;/td&gt;
&lt;td&gt;按蚊&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;21&lt;/td&gt;
&lt;td&gt;Glycine max&lt;/td&gt;
&lt;td&gt;soybean&lt;/td&gt;
&lt;td&gt;大豆&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;22&lt;/td&gt;
&lt;td&gt;Lycopersicon esculentum&lt;/td&gt;
&lt;td&gt;tomato&lt;/td&gt;
&lt;td&gt;番茄&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;23&lt;/td&gt;
&lt;td&gt;Medicago truncatula&lt;/td&gt;
&lt;td&gt;barrel medic&lt;/td&gt;
&lt;td&gt;蒺藜状苜蓿&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;24&lt;/td&gt;
&lt;td&gt;Chlamydomonas reinhardtii&lt;/td&gt;
&lt;td&gt;Chlorophyta&lt;/td&gt;
&lt;td&gt;莱因哈德衣藻&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;25&lt;/td&gt;
&lt;td&gt;Takifugu rubripes&lt;/td&gt;
&lt;td&gt;pufferfish&lt;/td&gt;
&lt;td&gt;河豚&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;26&lt;/td&gt;
&lt;td&gt;Macaca mulatta&lt;/td&gt;
&lt;td&gt;monkey&lt;/td&gt;
&lt;td&gt;恒河猴&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;27&lt;/td&gt;
&lt;td&gt;Mesocricetus auratus&lt;/td&gt;
&lt;td&gt;hamster&lt;/td&gt;
&lt;td&gt;仓鼠&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;Ciona intestinalis&lt;/td&gt;
&lt;td&gt;sea squirt&lt;/td&gt;
&lt;td&gt;海鞘&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;29&lt;/td&gt;
&lt;td&gt;Sorghum bicolor&lt;/td&gt;
&lt;td&gt;sorghum&lt;/td&gt;
&lt;td&gt;高粱&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;30&lt;/td&gt;
&lt;td&gt;Ovis aries&lt;/td&gt;
&lt;td&gt;sheep&lt;/td&gt;
&lt;td&gt;绵羊&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;31&lt;/td&gt;
&lt;td&gt;Capra hircus&lt;/td&gt;
&lt;td&gt;goat&lt;/td&gt;
&lt;td&gt;山羊&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description>
      <link>https://shenwy.com/yuque/%E7%94%9F%E7%89%A9%E4%BF%A1%E6%81%AF/%E8%B5%84%E6%BA%90/2021-08-03-xn57o7/</link>
      <pubDate>Tue, 03 Aug 2021 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E7%94%9F%E7%89%A9%E4%BF%A1%E6%81%AF/%E8%B5%84%E6%BA%90/2021-08-03-xn57o7/</guid>
      
    </item>
    
    <item>
      <title>生信服务器基础配置：启动服务</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-07-19&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-07-19T00:00:00&#39;&gt;2021-07-19&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-07-19&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-07-19T16:18:44&#39;&gt;2021-07-19&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;关于开机启动服务，CentOS 6 的命令是 chkconfig，CentOS 7 是 systemctl。&lt;/p&gt;
&lt;p&gt;CentOS 6 中的 chkconfig 命令主要用来更新（启动或停止）和查询系统服务的运行级信息。谨记 chkconfig 不是立即自动禁止或激活一个服务，它只是简单的改变了符号连接。&lt;/p&gt;
&lt;p&gt;CentOS 7 中如果要让任务开机自启动，需将对应的 Unit 文件存放于 /etc/systemd/system 下。即 systemctl 将服务加入开机自启动的操作，实际上是在 /etc/systemd/system 某个 target.wants 目录下创建服务配置文件的软链接文件。而显然的，禁用服务开机自启动的操作是移除软链接。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;systemctl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;enable&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;rsyncd.service
Created&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;symlink&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/etc/systemd/system/multi-user.target.wants/rsyncd.service&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/lib/systemd/system/rsyncd.service.

$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;systemctl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;disable&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;rsyncd.service
Removed&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;symlink&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/etc/systemd/system/multi-user.target.wants/rsyncd.service.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Linux OS 将操作环境分为以下 7 个等级，即：
0：关机
1：单用户模式（单用户、无网络）
2：无网络支持的多用户模式（多用户、无网络）
3：有网络支持的多用户模式（多用户、有网络）
4：保留，未使用
5：有网络支持有 X-Window 支持的多用户模式（多用户、有网络、X-Window 界面）
6：重新引导系统，即重启&lt;/p&gt;
&lt;h2 id=&#34;查看自启动服务&#34;&gt;查看自启动服务&lt;a class=&#34;headerlink&#34; href=&#34;#查看自启动服务&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# CentOS 6&lt;/span&gt;
chkconfig&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--list&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 显示开机启动服务列表&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# CentOS 7&lt;/span&gt;
systemctl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;list-unit-files&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--type&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;service&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;grep&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;enabled
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;查看某服务的开机启动状态&#34;&gt;查看某服务的开机启动状态&lt;a class=&#34;headerlink&#34; href=&#34;#查看某服务的开机启动状态&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# CentOS 6&lt;/span&gt;
chkconfig&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--list&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;servicename
&lt;span class=&#34;c1&#34;&gt;# 例如&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# chkconfig --list httpd&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# 输出：httpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# 说明：默认情况下，on 和 off 开关只对运行级 2，3，4，5 有效。&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# 说明：上面的输出 0-6 都为 off，表示没有自动启动。&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# CentOS 7&lt;/span&gt;
systemctl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;list-unit-files&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--type&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;service&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;grep&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;service_name
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;启动关闭重启查看某个服务&#34;&gt;启动（关闭，重启，查看）某个服务&lt;a class=&#34;headerlink&#34; href=&#34;#启动关闭重启查看某个服务&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# CentOS 6&lt;/span&gt;
service&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;service_name&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;start&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;stop&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;restart&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;status&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# CentOS 7&lt;/span&gt;
systemctl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;start&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;stop&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;restart&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;status&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;service_name
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;设置开机启动或者关闭某个服务&#34;&gt;设置开机启动或者关闭某个服务&lt;a class=&#34;headerlink&#34; href=&#34;#设置开机启动或者关闭某个服务&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# CentOS 6&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# 1. 服务脚本必须存放在 /etc/ini.d/ 目录下&lt;/span&gt;
cp&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;xxx&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/etc/ini.d/
&lt;span class=&#34;c1&#34;&gt;# 2. 增加/删除所指定的系统服务，让 chkconfig 指令得以管理它&lt;/span&gt;
chkconfig&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--add/--del&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;service_name
&lt;span class=&#34;c1&#34;&gt;# 3. 开启/关闭服务，不指定任何运行级别的 chkconfig on 将启用运行级别 2、3、4 和 5上 的服务。&lt;/span&gt;
chkconfig&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;service_name&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;on/off

&lt;span class=&#34;c1&#34;&gt;# CentOS 7&lt;/span&gt;
systemctl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;enable&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;service_name&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 开机启动&lt;/span&gt;
systemctl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;disable&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;service_name&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 开机关闭&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;hr /&gt;
&lt;p&gt;以下内容节选自《&lt;a href=&#34;https://www.junmajinlong.com/linux/systemd/auto_tasks_on_boot/&#34;&gt;systemd 时代的开机自启动任务 | 骏马金龙&lt;/a&gt;》，供参考。&lt;/p&gt;
&lt;h2 id=&#34;systemd-中自定义开机自启动命令脚本&#34;&gt;systemd 中自定义开机自启动命令/脚本&lt;a class=&#34;headerlink&#34; href=&#34;#systemd-中自定义开机自启动命令脚本&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;在 SysV 系统中，要让某个命令或者某个脚本开机自启动，可以将命令或者脚本的命令行写入 /etc/rc.d/rc.local 文件中。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在 systemd 中，要让命令或者某个脚本开机自启动，要么将其编写成一个开机自启动服务，要么通过兼容的 /etc/rc.d/rc.local。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;但更建议的方案是编写开机自启动服务，后面会专门介绍服务管理配置文件如何编写。&lt;/p&gt;
&lt;p&gt;下面是一个简单的让命令(脚本)开机自启动的配置文件：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;cat&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/lib/systemd/system/mycmd.service
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;Unit&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;Description&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;some&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;shell&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;script
&lt;span class=&#34;c1&#34;&gt;# 要求脚本具有可执行权限&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;ConditionFileIsExecutable&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/bin/some.sh

&lt;span class=&#34;c1&#34;&gt;# 指定要运行的命令、脚本&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;Service&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;ExecStart&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/bin/some.sh

&lt;span class=&#34;c1&#34;&gt;# 下面这段不能少&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;Install&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;WantedBy&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;multi-user.target

$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;systemctl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;daemon-reload
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;systemctl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;enable&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mycmd.service
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;如果要使用 /etc/rc.local 的方式呢？systemd 提供了 rc-local.service 服务来加载 /etc/rc.d/rc.local 文件中的命令。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;cat&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/lib/systemd/system/rc-local.service
&lt;span class=&#34;c1&#34;&gt;# This unit gets pulled automatically into multi-user.target by&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# systemd-rc-local-generator if /etc/rc.d/rc.local is executable.&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;Unit&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;Description&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/etc/rc.d/rc.local&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Compatibility
&lt;span class=&#34;nv&#34;&gt;ConditionFileIsExecutable&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/etc/rc.d/rc.local
&lt;span class=&#34;nv&#34;&gt;After&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;network.target

&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;Service&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;Type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;forking
&lt;span class=&#34;nv&#34;&gt;ExecStart&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/etc/rc.d/rc.local&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;start
&lt;span class=&#34;nv&#34;&gt;TimeoutSec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;RemainAfterExit&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;yes
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;这个文件缺少了 [Install] 段且没有 WantedBy，后面将会解释 Install 中的 WantedBy 表示设置该服务开机自启动时，该服务加入到哪个『运行级别』中启动。&lt;/p&gt;
&lt;p&gt;但这个文件的注释中说明了，如果 /etc/rc.d/rc.local 文件存在且具有可执行权限，则 systemd-rc-local-generator 将会自动添加到 multi-user.target 中，所以，即使没有 Install 和 WantedBy 也无关紧要。&lt;/p&gt;
&lt;p&gt;另一方面需要注意，和 SysV 系统在系统启动的最后阶段运行 rc.local 不太一样，systemd 兼容的 rc.local 是在 network.target 即网络相关服务启动完成之后就启动的，这意味着 rc.local 可能在开机启动过程中较早的阶段就开始运行。&lt;/p&gt;
&lt;p&gt;如果想要将命令加入到 /etc/rc.local 中实现开机自启动，直接写入该文件，并设置该文件可执行权限即可。&lt;/p&gt;
&lt;p&gt;例如：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-e&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;#!/bin/bash\ndate +&amp;quot;%F %T&amp;quot; &amp;gt;/tmp/a.log&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;gt;&amp;gt;/etc/rc.d/rc.local
chmod&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;+x&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/etc/rc.d/rc.local
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%85%8D%E7%BD%AE%E4%BD%BF%E7%94%A8/2021-07-19-kaxskc/</link>
      <pubDate>Mon, 19 Jul 2021 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%85%8D%E7%BD%AE%E4%BD%BF%E7%94%A8/2021-07-19-kaxskc/</guid>
      
    </item>
    
    <item>
      <title>挂载对象存储到 Linux 当本地磁盘</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-07-07&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-07-07T00:00:00&#39;&gt;2021-07-07&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-07-14&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-07-14T17:19:09&#39;&gt;2021-07-14&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;最近在使用云筏的服务器倒腾一个用于方便自己日常工作的导航网站，免得经常在公司、家之间切换电脑时找不到一些常用的网站（虽然可以保存为书签进行同步，但在同步前也要账号登陆，甚至如果用的是某台临时 PC，浏览器登陆同步也是极为麻烦）。&lt;/p&gt;
&lt;p&gt;遇到一个问题，就是想把国外服务器的一些文件拷贝到阿里云 OSS（腾讯云 COS） 上，又不想使用国外服务器 → 本地电脑 →OSS 的拷贝路线，于是把之前用过的 ossfs（cosfs） 挂载在云筏服务器上又折腾了一次。&lt;/p&gt;
&lt;h2 id=&#34;阿里云&#34;&gt;阿里云&lt;a class=&#34;headerlink&#34; href=&#34;#阿里云&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;关于 OSS，阿里云 OSS 是对象存储服务，价格也比较便宜，算得上是一个免费的 CDN，我们可以利用 OSSFS 这个工具，将 OSS 挂载到阿里云 ECS 服务器上，可以达到存储、备份的目的。当然，最主要的是可以减轻服务器的压力。&lt;/p&gt;
&lt;p&gt;使用此工具之前，如果你手里没有阿里云的 ECS（或者你想经常从 OSS 拷贝数据到其他服务器） 那么我觉得没啥看下去的必要，因为目前阿里云 OSS 下行流量没有免费额度，都需要收费。这样进行数据传输的时候就会产生流量费用，而且速度可能也不是特别理想。如果有 ECS 那么可以进行内网数据传输，既保证了速度又省去了流量费用，岂不是美滋滋。
&lt;a href=&#34;https://www.aliyun.com/price/product?spm=a2c4g.11186623.2.5.5b7710f0N0ptLY#/oss/detail/ossbag&#34;&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FsH7BsgN0OEmYTw4rtcC-nrXA01u.png&#34; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;ossfs&#34;&gt;ossfs&lt;a class=&#34;headerlink&#34; href=&#34;#ossfs&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;其实 ossfs 这个工具就是将你的 oss 存储桶 (bucket) 挂载成一个 linux 可以识别的分区，从而可以看成像系统上的一块本地磁盘。&lt;/p&gt;
&lt;h3 id=&#34;安装&#34;&gt;安装&lt;a class=&#34;headerlink&#34; href=&#34;#安装&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;第一步，解决依赖。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ubuntu 14.04&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;sudo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;apt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;install&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;automake&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;autotools&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dev&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;git&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;libcurl4&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;gnutls&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dev&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;\
&lt;span class=&#34;w&#34;&gt;                     &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;libfuse&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dev&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;libssl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dev&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;libxml2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dev&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;make&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pkg&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;config&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;CentOS 7.0&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;sudo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;yum&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;install&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;automake&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;gcc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;git&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;libcurl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devel&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;libxml2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devel&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;\
&lt;span class=&#34;w&#34;&gt;                 &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fuse&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devel&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;make&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;openssl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devel&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;第二步，到&lt;a href=&#34;https://github.com/aliyun/ossfs/releases&#34;&gt;官方仓库&lt;/a&gt;下载最新的压缩包就成。本地比如我下载的为 &lt;a href=&#34;https://github.com/aliyun/ossfs/releases/download/v1.80.5/ossfs_1.80.5_centos7.0_x86_64.rpm&#34;&gt;ossfs_1.80.5_centos7.0_x86_64.rpm&lt;/a&gt;，尽量选择和你系统相匹配的包，这样可以直接用包管理工具进行安装。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;yum&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;localinstall&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ossfs_1.80.5_centos7.0_x86_64.rpm&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;或者，直接通过下载源码的方式安装：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;git&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;clone&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;https&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;://&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;github.com&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;aliyun&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ossfs.git&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ossfs&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;autogen.sh&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;configure&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;make&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sudo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;make&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;不出意外，ossfs 就这样被安装成功了，是不是非常的简单。接下来就是要配置的部分了。&lt;/p&gt;
&lt;h3 id=&#34;配置&#34;&gt;配置&lt;a class=&#34;headerlink&#34; href=&#34;#配置&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;在配置之前我们首先需要拿到阿里云的 AccesskeyID 和 Accesskeysecret。登录阿里云账号，然后打开&lt;a href=&#34;https://usercenter.console.aliyun.com/#/manage/ak&#34;&gt;密钥管理&lt;/a&gt;页面，然后在列表里随便选择一个并记录下来。然后还需要去 oss 控制台创建一个 bucket，我这里 bucket 的名称叫做 disk-db。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fr4CiOstajRhQ76t-xevfD-ArJAB.png&#34; /&gt;
为了演示假如我的 AccessKey ID 为 key123， Access Key Secret 为 secret456，接下来继续执行。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;disk&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;db&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;key123&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;secret456&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;etc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;passwd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ossfs&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;#修改文件权限&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;chmod&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;640&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;etc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;passwd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ossfs&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;在系统上创建一个系统目录比如为 /mnt/disk-db , 将此目录作为 ossfs 的挂载目录：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 如果你的服务器不是阿里云的 ECS 服务器，使用外网访问的 Endpoint&lt;/span&gt;
ossfs&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;disk-db&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/mnt/disk-db&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-ourl&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;oss-cn-shenzhen.aliyuncs.com&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-o&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;allow_other

&lt;span class=&#34;c1&#34;&gt;# 如果你的服务器是阿里云的 ECS 服务器，使用内网访问的 Endpoint&lt;/span&gt;
ossfs&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;vmfs&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/mnt/disk-db&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-ourl&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;oss-cn-shenzhen-internal.aliyuncs.com&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-o&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;allow_other
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;-ourl 表示的是 oss 的 EndPoint 地址，这个地址如果你手持 ECS 那么强烈建议你使用和你 ECS 同区域的内网地址。&lt;/li&gt;
&lt;li&gt;-o 表示运行非 root 用户使用此目录。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FiZgsHgCtKXBnwgdx3il9XJ9I7wB.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;设置开机自动挂载&#34;&gt;设置开机自动挂载&lt;a class=&#34;headerlink&#34; href=&#34;#设置开机自动挂载&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;通过 fstab 的方式自动 mount，在 /etc/fstab 中加入下面的类似的命令：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;ossfs#your_bucket_name&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;your_mount_point&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;fuse_netdev,url&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;your_url,allow_other&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;上面的根据提示替换成你自己的配置，比如我的为：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;ossfs#disk-db&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/mnt/disk-db&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;fuse_netdev,url&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;oss-cn-shenshen.aliyuncs.com,allow_other&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;效果&#34;&gt;效果&lt;a class=&#34;headerlink&#34; href=&#34;#效果&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;到此，所有的操作就基本上结束了。想要看一下效果可以到 /mnt/disk-db 目录下新创建一个文件比如叫 ossfs_test.txt，然后我们再去阿里云的 oss 控制台就可以看到 ossfs_test.txt 已经创建成功的效果。&lt;/p&gt;
&lt;h2 id=&#34;腾讯云&#34;&gt;腾讯云&lt;a class=&#34;headerlink&#34; href=&#34;#腾讯云&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;COSFS 工具支持将腾讯云的对象存储（Cloud Object Storage，COS）存储桶挂载到本地，像使用本地文件系统一样直接操作腾讯云对象存储中的对象， COSFS 提供的主要功能包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;支持 POSIX 文件系统的大部分功能，如：文件读写、目录操作、链接操作、权限管理、uid/gid 管理等功能。&lt;/li&gt;
&lt;li&gt;大文件分块传输功能。&lt;/li&gt;
&lt;li&gt;MD5 数据校验功能。&lt;/li&gt;
&lt;li&gt;将本机数据上传至 COS，建议使用 &lt;a href=&#34;https://cloud.tencent.com/document/product/436/15392&#34;&gt;COS Migration 工具&lt;/a&gt; 或 &lt;a href=&#34;https://cloud.tencent.com/document/product/436/10976&#34;&gt;COSCMD 工具&lt;/a&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;腾讯云完整 COSFS 挂载文档，参考：&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://cloud.tencent.com/document/product/436/6883&#34;&gt;对象存储 COSFS 工具 - 工具指南 - 文档中心 - 腾讯云&lt;/a&gt;&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%85%8D%E7%BD%AE%E4%BD%BF%E7%94%A8/2021-07-07-hydwuq/</link>
      <pubDate>Wed, 07 Jul 2021 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%85%8D%E7%BD%AE%E4%BD%BF%E7%94%A8/2021-07-07-hydwuq/</guid>
      
    </item>
    
    <item>
      <title>个人网址导航折腾备忘</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-07-06&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-07-06T00:00:00&#39;&gt;2021-07-06&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-07-06&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-07-06T17:28:45&#39;&gt;2021-07-06&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;闲来无事，折腾一下。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/WebStackPage/WebStackPage.github.io&#34;&gt;WebStack&lt;/a&gt; 是一个开源的网址导航，非常不错的项目。一为倒腾的付费 WordPress 版本（&lt;a href=&#34;https://nav.iowen.cn/&#34;&gt;One Nav 正版主题&lt;/a&gt;）功能相当完善和强悍。除此以外，还有增加了搜索功能的 &lt;a href=&#34;https://github.com/HCLonely/hexo-theme-webstack&#34;&gt;Hexo 版本&lt;/a&gt;，以及不带搜索功能的 &lt;a href=&#34;https://github.com/0xl2oot/webstack-jekyll&#34;&gt;Jekyll 版本&lt;/a&gt;和 &lt;a href=&#34;https://github.com/iplaycode/webstack-hugo&#34;&gt;Hugo 版本&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;个人比较喜欢 Hugo，记录一下折腾的记录。&lt;/p&gt;
&lt;h2 id=&#34;去除-tooltip-效果&#34;&gt;去除 tooltip 效果&lt;a class=&#34;headerlink&#34; href=&#34;#去除-tooltip-效果&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;把 layouts/index.html 的 data-toggle=&amp;rdquo;tooltip&amp;rdquo; data-placement=&amp;rdquo;bottom&amp;rdquo; 内容直接去掉。&lt;/p&gt;
&lt;h2 id=&#34;增加搜索功能&#34;&gt;增加搜索功能&lt;a class=&#34;headerlink&#34; href=&#34;#增加搜索功能&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;借鉴 &lt;a href=&#34;https://github.com/HCLonely/hexo-theme-webstack&#34;&gt;Hexo 版本&lt;/a&gt;的以下几个文件：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;source/js/header.js——&amp;gt;assets/js/search.js&lt;/li&gt;
&lt;li&gt;source/css/hclonely.css——&amp;gt;assets/css/search.css&lt;/li&gt;
&lt;li&gt;layout/index.ejs&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;第一步，把 layout/index.ejs 关于搜索部分 html 代码直接拷贝至 layouts/index.html 的 &lt;nav class=&#34;navbar user-info-navbar&#34; role=&#34;navigation&#34;&gt; 一节内容之后。&lt;/p&gt;
&lt;p&gt;第二步，把 &lt;script src=&#34;./assets/js/search.js&#34;&gt;&lt;/script&gt; 添加到 layouts/index.html 的 header 中。&lt;/p&gt;
&lt;h2 id=&#34;简化-logo-链接&#34;&gt;简化 logo 链接&lt;a class=&#34;headerlink&#34; href=&#34;#简化-logo-链接&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;在 layouts/index.html 中判断 logo 是否以 http 开头，如果是，src 直接使用 data-src=&amp;rdquo;{{ .logo }}&amp;rdquo;；如果不是，src 设置为：data-src=&amp;rdquo;assets/images/logos/{{ .logo }}&amp;rdquo;。&lt;/p&gt;
&lt;h2 id=&#34;默认折叠左侧栏&#34;&gt;默认折叠左侧栏&lt;a class=&#34;headerlink&#34; href=&#34;#默认折叠左侧栏&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;在 layouts/index.html 中的 &lt;div class=&#34;sidebar-menu toggle-others fixed&#34;&gt; 直接增加一个 collapsed 样式。&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E5%89%8D%E7%AB%AF/2021-07-06-tmbu15/</link>
      <pubDate>Tue, 06 Jul 2021 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E5%89%8D%E7%AB%AF/2021-07-06-tmbu15/</guid>
      
    </item>
    
    <item>
      <title>使用 Docker 分析高通量测序数据</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-06-10&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-06-10T00:00:00&#39;&gt;2021-06-10&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-06-25&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-06-25T10:48:55&#39;&gt;2021-06-25&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;做生信的童鞋想要学习 Docker，或者使用 Docker+Pipeline 封装自己的一套数据分析流程，相信一定不能错过胡博强老师在 2017 年写这篇《&lt;a href=&#34;http://huboqiang.cn/2016/07/08/AnalysisNGSonAliYun&#34;&gt;[Docker]使用阿里云 + Docker 分析高通量测序数据——RNA-Seq 与 ChIP-Seq. - Boqiang Hu&lt;/a&gt;》教程，这个教程同时也以推文的方式发布在了 &lt;a href=&#34;https://mp.weixin.qq.com/s/w4jZhmM4Zgkv_HJxe4CAvg&#34;&gt;2017-03-21&lt;/a&gt; 生信技能树公众号上，感兴趣的同学可以自己去翻一下。&lt;/p&gt;
&lt;p&gt;根据教程+&lt;a href=&#34;https://github.com/shenweiyan/tangEpiNGSInstall&#34;&gt;tangEpiNGSInstall&lt;/a&gt; 仓库提供的原始测试数据，本人这两天测试跑了一下，发现了一点点小问题。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$ git clone https://github.com/shenweiyan/tangEpiNGSInstall.git
$ tree
.
└── tangEpiNGSInstall
    ├── Dockerfile
    ├── README.md
    ├── settings
    │   ├── run_chipseq.py
    │   ├── run_chipseq.sh
    │   ├── run_mRNA.py
    │   ├── run_mRNA.sh
    │   ├── scripts_chipseq.py
    │   └── scripts_mRNA.py
    ├── src
    │   └── run_sample.sh
    ├── test_fq
    │   ├── H3K4me3
    │   │   ├── test.1.fq.gz
    │   │   └── test.2.fq.gz
    │   ├── Input
    │   │   ├── test.1.fq.gz
    │   │   └── test.2.fq.gz
    │   └── sample.tab.xls
    └── test_fq_RNA
        ├── SampleA1
        │   ├── test.1.fastq.gz
        │   └── test.2.fastq.gz
        └── sample.tab.xls

8 directories, 17 files

$ mkdir -p results database_ChIP/mm10
$ chmod 777 results database_ChIP/mm10    # avoiding Permission issue
$ tree
.
├── database_ChIP
│   └── mm10
├── results
└── tangEpiNGSInstall
    ├── Dockerfile
    ├── README.md
    ├── settings
    │   ├── run_chipseq.py
    │   ├── run_chipseq.sh
    │   ├── run_mRNA.py
    │   ├── run_mRNA.sh
    │   ├── scripts_chipseq.py
    │   └── scripts_mRNA.py
    ├── src
    │   └── run_sample.sh
    ├── test_fq
    │   ├── H3K4me3
    │   │   ├── test.1.fq.gz
    │   │   └── test.2.fq.gz
    │   ├── Input
    │   │   ├── test.1.fq.gz
    │   │   └── test.2.fq.gz
    │   └── sample.tab.xls
    └── test_fq_RNA
        ├── SampleA1
        │   ├── test.1.fastq.gz
        │   └── test.2.fastq.gz
        └── sample.tab.xls

11 directories, 17 files

$ docker pull hubq/tanginstall:latest

$ docker run -v /data/docker/train/tangEpiNGSInstall/test_fq:/fastq -v /data/docker/train/results:/home/analyzer/project -v /data/docker/train/database_ChIP/mm10:/home/analyzer/database_ChIP/mm10 -v /data/docker/train/tangEpiNGSInstall/settings/:/settings/ --env ref=mm10 --env type=ChIP hubq/tanginstall:latest
INFO  @ 2021-06-10 03:29:48,154: Begin checking input files.
INFO  @ 2021-06-10 03:29:48,154: Input database files were all put in /home/analyzer/database_ChIP/mm10.
INFO  @ 2021-06-10 03:29:48,154: Input fasta /home/analyzer/database_ChIP/mm10/mm10.fa not find. Now download from UCSC
INFO  @ 2021-06-10 03:45:01,604: /home/analyzer/database_ChIP/mm10/mm10.fa generation done!
INFO  @ 2021-06-10 03:45:01,605: Fasta were not indexed.
INFO  @ 2021-06-10 03:45:02,105: Now build index using bwa.
INFO  @ 2021-06-10 03:48:20,683: Building index done!
INFO  @ 2021-06-10 03:48:20,683: Genome GTF file were not found.
INFO  @ 2021-06-10 03:48:21,184: Now download refGene file from UCSC.
INFO  @ 2021-06-10 05:03:38,768: Generate refGene done!
INFO  @ 2021-06-10 05:03:38,768: RepeatMask file were not found.
INFO  @ 2021-06-10 05:03:39,269: Now download rmsk file from UCSC.
INFO  @ 2021-06-10 05:06:03,592: Generate RepeatMask done!
Traceback (most recent call last):
  File &amp;quot;/home/analyzer/module/ChIP/run_chipseq.py&amp;quot;, line 148, in &amp;lt;module&amp;gt;
    main()
  File &amp;quot;/home/analyzer/module/ChIP/run_chipseq.py&amp;quot;, line 126, in main
    samp_peak.get_idr_stat()
  File &amp;quot;/home/analyzer/module/ChIP/frame/module02_call_peaks.py&amp;quot;, line 244, in get_idr_stat
    mod_Stat.IDR_Stat()
  File &amp;quot;/home/analyzer/module/ChIP/frame/module00_StatInfo.py&amp;quot;, line 113, in IDR_Stat
    f_idr_out   = open(file_idr_out,&amp;quot;w&amp;quot;)
IOError: [Errno 2] No such file or directory: &amp;#39;/home/analyzer/project/ChIP_test/StatInfo/IDR_result./home/analyzer/project/ChIP_test/sample.tab.xls&amp;#39;
cp: cannot stat `03.2.Peak_mrg/*/*_treat_minus_control.sort.norm.bw&amp;#39;: No such file or directory
cp: cannot stat `03.3.Peak_idr/*/*.conservative.regionPeak.gz*&amp;#39;: No such file or directory
cp: cannot stat `StatInfo/*&amp;#39;: No such file or directory
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;docker-error.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FirC_PY6pW40EQs1hqCu1MTHyX2I.jpeg&#34; /&gt;&lt;/p&gt;
&lt;p&gt;出于学习和折腾，针对这个问题，个人在 &lt;strong&gt;hubq/tanginstall:latest&lt;/strong&gt; 的镜像基础上做了一点小调整，并重新打包成一个名为 &lt;strong&gt;shenweiyan/tanginstall:latest&lt;/strong&gt; 的新镜像 push 到了 Docker Hub，抛砖引玉，供大家学习参考。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;docker-chip.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FgSRFBvzOjGE7lr9xgQZ-TesY5oP.jpeg&#34; /&gt;&lt;/p&gt;
&lt;p&gt;简单说一下这个镜像的几点细节。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;整个镜像体积比较大，总共约 7.37GB，pull 下来可能比较慢。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;docker-images.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fu0orywtHuCSuf_-s0aSQ56KK_VN.jpeg&#34; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;如果没有 ref（hg19/hg38 or mm9/mm10），镜像执行过程中会首先执行下载，然后拆分合并，建立 index。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;db01.DownloadRef.sh&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;!----&gt;

&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$ cat db01.DownloadRef.sh
ref=$1
dir_database=/home/analyzer/database_ChIP/$ref
dir_path=/home/analyzer/module/ChIP

cd $dir_database

wget http://hgdownload.soe.ucsc.edu/goldenPath/${ref}/bigZips/chromFa.tar.gz

tar -zxvf $dir_database/chromFa.tar.gz

for i in {1..22} X Y M
do
    cat $dir_database/chr$i.fa
done  &amp;gt;$dir_database/${ref}.fa &amp;amp;&amp;amp; rm $dir_database/chr*fa
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;db02.RefIndex.sh&lt;/li&gt;
&lt;/ul&gt;
&lt;!----&gt;

&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$ cat db02.RefIndex.sh
ref=$1
dir_database=/home/analyzer/database_ChIP/$ref
bwa_exe=/software/install_packages/bwa-0.7.5a/bwa
samtools_exe=/software/install_packages/samtools-0.1.18/samtools
div_bins_exe=/home/analyzer/module/ChIP/bin/div_bins/bed_read

$samtools_exe faidx $dir_database/${ref}.fa

$bwa_exe index $dir_database/${ref}.fa

$dix_bins_exe -b 100  $dir_database/${ref}.fa.fai $dir_database/columns.100.bed
$dix_bins_exe -b 1000 $dir_database/${ref}.fa.fai $dir_database/columns.1kb.bed

cut -f 1-2 $dir_database/${ref}.fa.fai &amp;gt;$dir_database/${ref}.fa.len
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;db03.RefGene.sh&lt;/li&gt;
&lt;/ul&gt;
&lt;!----&gt;

&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$ cat db03.RefGene.sh
ref=$1
dir_database=/home/analyzer/database_ChIP/$ref
bedtools_exe=/software/install_packages/bedtools2/bin/bedtools
ucsc_dir=/software/install_packages/UCSC
bin=/home/analyzer/module/ChIP/bin
dir_path=/home/analyzer/module/ChIP

cd $dir_database
wget http://hgdownload.soe.ucsc.edu/goldenPath/${ref}/database/refGene.txt.gz

### remove chromosome fragments(unassembled).
for i in {1..22} X Y M
do
    zcat $dir_database/refGene.txt.gz | grep -w chr$i
done &amp;gt;$dir_database/tmp
mv $dir_database/tmp    $dir_database/refGene.txt

# refGene.bed
cat $dir_database/refGene.txt                                              |\
awk &amp;#39;{
    tag=&amp;quot;noncoding&amp;quot;;
    if($4~/^NM/){tag=&amp;quot;protein_coding&amp;quot;};
    OFS=&amp;quot;\t&amp;quot;;
    print $3,$5,$6,$2,$4,$10,$11,tag,$13
}&amp;#39; /dev/stdin                                                              |\
python $bin/s03_genePred2bed.py /dev/stdin                                 |\
$bedtools_exe sort -i /dev/stdin &amp;gt;$dir_database/refGene.bed               &amp;amp;&amp;amp;\

# region.Intragenic.bed
# For novo lncRNA detection
$bin/find_ExonIntronIntergenic/find_ExonIntronIntergenic                    \
    $dir_database/refGene.bed                                               \
    $dir_database/${ref}.fa.fai &amp;gt;$dir_database/pos.bed                    &amp;amp;&amp;amp;\

grep -v &amp;quot;Intergenic&amp;quot; $dir_database/pos.bed                                 |\
    awk &amp;#39;{OFS=&amp;quot; &amp;quot;;print $1,$2,$3,&amp;quot;Intragenic&amp;quot;}&amp;#39; /dev/stdin                 \
    &amp;gt;$dir_database/region.Intragenic.bed                                  &amp;amp;&amp;amp;\

# refGene.gtf
# For mapping
zcat $dir_database/refGene.txt.gz                                          |\
cut -f 2-                                                                  |\
$ucsc_dir/genePredToGtf file stdin /dev/stdout                             |\
grep -w exon                                                               |\
$bedtools_exe sort -i /dev/stdin &amp;gt;$dir_database/refGene.gtf               &amp;amp;&amp;amp;\
cat $dir_path/database/ERCC.gtf &amp;gt;&amp;gt;$dir_database/refGene.gtf
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;db04.rmsk.sh&lt;/li&gt;
&lt;/ul&gt;
&lt;!----&gt;

&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$ cat db04.rmsk.sh
ref=$1
dir_database=/home/analyzer/database_ChIP/$ref
bedtools_exe=/software/install_packages/bedtools2/bin/bedtools
ucsc_dir=/software/install_packages/UCSC
bin=/home/analyzer/module/ChIP/bin
dir_path=/home/analyzer/module/ChIP

cd $dir_database
wget http://hgdownload.soe.ucsc.edu/goldenPath/${ref}/database/rmsk.txt.gz

zcat $dir_database/rmsk.txt.gz                                             |\
awk &amp;#39;{
    OFS=&amp;quot;\t&amp;quot;;
    print $6,$7,$8,$2,&amp;quot;.&amp;quot;,&amp;quot;.&amp;quot;,&amp;quot;.&amp;quot;,&amp;quot;(&amp;quot;$9&amp;quot;)&amp;quot;,$10,$11,$12 &amp;quot;/&amp;quot; $13,$14,$15,$16,$17
}&amp;#39; /dev/stdin                                                              |\
tail -n +2  /dev/stdin &amp;gt;$dir_database/chrom.bed

for i in {1..22} X Y M
do
    grep -w chr$i $dir_database/chrom.bed
done &amp;gt;$dir_database/tmp
mv $dir_database/tmp $dir_database/chrom.bed

$bedtools_exe sort -i   $dir_database/chrom.bed &amp;gt;$dir_database/chrom.sort.bed
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;为节省下载时间，建议事先准备好 ${ref}.fa，如果没有，也可以先下载好以下文件。&lt;/li&gt;
&lt;/ol&gt;
&lt;!----&gt;

&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;# db01.DownloadRef.sh:
wget http://hgdownload.soe.ucsc.edu/goldenPath/${ref}/bigZips/chromFa.tar.gz

# db03.RefGene.sh:
wget http://hgdownload.soe.ucsc.edu/goldenPath/${ref}/database/refGene.txt.gz

#db04.rmsk.sh:
wget http://hgdownload.soe.ucsc.edu/goldenPath/${ref}/database/rmsk.txt.gz
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;bwa index（db02.RefIndex.sh）非常耗时，个人一个 4 核 16G 配置的服务器也跑了大约 2.5 小时。&lt;/li&gt;
&lt;/ol&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/Docker/2021-06-10-docker-ngs/</link>
      <pubDate>Thu, 10 Jun 2021 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/Docker/2021-06-10-docker-ngs/</guid>
      
    </item>
    
    <item>
      <title>终于把 7 年前的 Docker Hub 账号恢复了</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-06-03&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-06-03T00:00:00&#39;&gt;2021-06-03&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-06-25&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-06-25T10:49:05&#39;&gt;2021-06-25&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;折腾 docker，向 Docker Hub 提交镜像的时候发现原来自己在 2014 年就已经注册过 Docker Hub 的账号了，而且在 &lt;a href=&#34;https://hub.docker.com/u/shenweiyan&#34;&gt;https://hub.docker.com/u/shenweiyan&lt;/a&gt; 也看到了自己在 Docker Hub 的一些镜像信息。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fj5eN7DggLqaamb8WHWAqZq7Emf3.png&#34; /&gt;
悲催的是，自己把密码给忘记了，找回密码甚至发现连注册邮箱都忘记了！！！&lt;/p&gt;
&lt;p&gt;于是回去翻历史邮件（个人一直以来都喜欢把所有的邮箱 163、outlook、gmail ...... 都是设置自动转发到 QQ 邮箱，或者通过 QQ 邮箱代收代发！）感谢这个好习惯！！终于让我找到了线索！！！
&lt;img alt=&#34;docker-passwd-reset.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FjxsY8xHqiVgb7st9NFSYZtvDqcM.png&#34; /&gt;
由于注册的 gmail 账号很早前就已经被自己注销删除了，于是想着去恢复（或者重新注册）！
&lt;img alt=&#34;gmail.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FvIjl3qYhSYRvuG99JosxIPC5M2p.png&#34; /&gt;
自己操作恢复不了，于是参考了 YouTube 的 《&lt;a href=&#34;https://www.youtube.com/watch?v=QDy9voxTHW4&#34;&gt;Couldn&amp;rsquo;t find your google account But username is taken | How to resolve?&lt;/a&gt;》的视频教程给 Google Team 求助。
&lt;img alt=&#34;restore_gmail.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FgHdrASQAFuW6tYcLSea0vcQm7it.png&#34; /&gt;
Gmail 恢复无望！&lt;/p&gt;
&lt;p&gt;接着，通过 Email 和 &lt;a href=&#34;https://docs.docker.com/docker-hub/2fa/recover-hub-account/&#34;&gt;Recover your Docker Hub account | Docker Documentation&lt;/a&gt; 中的 &lt;a href=&#34;https://hub.docker.com/support/contact/?category=2fa-lockout&#34;&gt;Contact Support form&lt;/a&gt; 给 Docker Hub 发送求助！
&lt;img alt=&#34;help-dockerhub.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FkWUqznpeyNAjQQW-miDUQXXmH34.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;等待了 1 到 2 天，终于收到 Docker Hub 的答复，根据链接，重置密码成功！
&lt;img alt=&#34;dockerhub-reset-passwd.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fs9OwyN_x4afH-QEH5XPNGf9upbj.png&#34; /&gt;
最后，简单总结一下。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;找回来 Docker Hub 的账号，本来没抱多大希望，但试试也无妨，努力一下或许就会有好结果。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;有些人可能有多个邮箱账号在使用，如 QQ/163/gmail/outlook 等等，可以把这些邮箱的邮件通过转发（或设置代收/代发）的方式，在一个常用的主邮箱里面进行统一管理，一来省心省力，二来方便检索。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;个人比较喜欢 QQ 邮箱（可以设置成 foxmail 作为你的 QQ 主显邮箱），配合日历、记事本、在线文档使用，简直不要太爽！&lt;img alt=&#34;qq-mail.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fmw7fPzKTXdtV6bgQtIBfZ1XUdoU.png&#34; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/Docker/2021-06-03-recover-hub-account/</link>
      <pubDate>Thu, 03 Jun 2021 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/Docker/2021-06-03-recover-hub-account/</guid>
      
    </item>
    
    <item>
      <title>更改 RHEL 6/7 中的时区</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-05-27&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-05-27T00:00:00&#39;&gt;2021-05-27&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-06-25&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-06-25T10:53:50&#39;&gt;2021-06-25&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;这几天在学习折腾 docker 的时候遇到一个很常见的问题，就是 run container 的时候发现大部分 image 默认使用的时间都是 UTC  (Universal Time Coordinated,UTC）世界协调时间，跟平时中使用的 CST  (China Standard Time UTC+8:00) 中国沿海时间(北京时间) 差别有点大，很不适应。&lt;/p&gt;
&lt;p&gt;每次去修改的时候又有点不太记得 &lt;code&gt;timedatectl&lt;/code&gt; 的具体命令，甚至跑一些基于 CentOS/RHEL 6 镜像的流程时发现根本没有 &lt;code&gt;timedatectl&lt;/code&gt; 这个命令！&lt;/p&gt;
&lt;p&gt;虽然之前在《&lt;a href=&#34;https://www.yuque.com/bioitee/mp/linux-timestamp-date&#34;&gt;【原】生信服务器 | Linux 时间戳和标准时间 · 语雀&lt;/a&gt;》这个推文专门写了一些 &lt;code&gt;timedatectl&lt;/code&gt; 命令的具体用法，基本都是针对 CentOS/RHEL 7 的系统，不适用于已经停止维护的 CentOS/RHEL 6。&lt;/p&gt;
&lt;p&gt;所以，后来专门谷歌了一下，发现除了 &lt;code&gt;timedatectl&lt;/code&gt;，还有更加简便的一些修改方法，记录一下。&lt;/p&gt;
&lt;h2 id=&#34;在-centosrhel-6-中改变时区&#34;&gt;在 CentOS/RHEL 6 中改变时区&lt;a class=&#34;headerlink&#34; href=&#34;#在-centosrhel-6-中改变时区&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;在 CentOS 6 中，时区文件位于 &lt;strong&gt;/usr/share/zoneinfo&lt;/strong&gt; 下。所以，如果你的区域是美国/芝加哥(UTC-6) ，它应该是 &lt;strong&gt;/usr/share/zoneinfo/America/Chicago&lt;/strong&gt; 等等。&lt;/p&gt;
&lt;p&gt;CentOS 6 使用位于 &lt;code&gt;/etc&lt;/code&gt; 下的一个名为 &amp;ldquo;localtime&amp;rdquo; 的文件来确定当前设置的时区。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$ ls -la /etc/localtime
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;这个文件，要么是移动到这个位置的实际时区文件，要么是 zoneinfo 目录下时区的符号链接（即软链接文件）。因此，如果您想要更改时区，首先需要确定使用哪个时区，然后将其符号链接到本地时间。你可以使用以下方法：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;rm&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-f&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/etc/localtime
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ln&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-s&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/share/zoneinfo/Asia/Shanghai&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/etc/localtime
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;date
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;这将把当前时区设置为 CST 亚洲/上海时区，我所属的时区。&lt;/p&gt;
&lt;h2 id=&#34;在-centosrhel-7-中改变时区&#34;&gt;在 CentOS/RHEL 7 中改变时区&lt;a class=&#34;headerlink&#34; href=&#34;#在-centosrhel-7-中改变时区&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;CentOS 7 附带了一个叫做 timedatectl 的命令工具。这可以用来为您查找和设置符号链接，而不是完成 CentOS 6 中要求的工作。&lt;/p&gt;
&lt;p&gt;若要列出可用的时区，请运行：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;timedatectl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;list-timezones
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;你可以找到你想要的时区，如下：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;timedatectl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;list-timezones&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;grep&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Shanghai
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;现在，要设置一个时区，使用命令&lt;code&gt;set-timezone&lt;/code&gt;和&lt;code&gt;timedatectl&lt;/code&gt;命令。例如，如果我想将时区设置为 Asia/Shanghai，我会运行以下命令：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;timedatectl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;set-timezone&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Asia/Shanghai
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;date
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;上面的这个操作跟上面提到的 CentOS 6 修改时区一样，会创建一个链接到 zoneinfo 目录的 locatime 文件符号链接：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ls&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-l&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/etc/localtime
lrwxrwxrwx&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;root&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;root&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;35&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Apr&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;15&lt;/span&gt;:10&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/etc/localtime&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;../usr/share/zoneinfo/Asia/Shanghai
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%85%8D%E7%BD%AE%E4%BD%BF%E7%94%A8/2021-05-27-centos-rhel-6-7-timezone/</link>
      <pubDate>Thu, 27 May 2021 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%85%8D%E7%BD%AE%E4%BD%BF%E7%94%A8/2021-05-27-centos-rhel-6-7-timezone/</guid>
      
    </item>
    
    <item>
      <title>又爱又恨的 Microsoft Edge！</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-04-21&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-04-21T00:00:00&#39;&gt;2021-04-21&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-06-25&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-06-25T10:46:47&#39;&gt;2021-06-25&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;早在《&lt;a href=&#34;https://www.yuque.com/shenweiyan/cookbook/chrome-bookmark-sync&#34;&gt;使用码云同步谷歌 Chrome 浏览器书签 · 语雀&lt;/a&gt;》中就吐槽过 win7 下安装 Microsoft Edge 一大堆错误代码的问题，一直都折腾不出个所以然。然而公司的 PC 一直都是 Windowns 7，又不想重装 Windows 10。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FgOzpaaBeNVDx6t5iibxFZ33IdOo.png&#34; /&gt;
既然和 Google Chrome 一样基于 Chroumium 内核，Google Chrome 可以有便携版本，Microsoft Edge 应该也可以有。于是，开始各种谷歌+百度搜索，终于发现 &lt;a href=&#34;https://shuax.com/project/edge/&#34;&gt;https://shuax.com/project/edge/&lt;/a&gt; 这个可爱曲线救国的项目。&lt;/p&gt;
&lt;h1 id=&#34;使用&#34;&gt;使用&lt;a class=&#34;headerlink&#34; href=&#34;#使用&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;把下载下来的 MicrosoftEdge_X64_90.0.818.39_shuax.com.7z 解压后运行 App/msedge.exe 即可。&lt;/li&gt;
&lt;li&gt;由于是便携版，不会和其它版本冲突，不想用了可以直接删掉整个文件夹。&lt;/li&gt;
&lt;/ol&gt;
&lt;h1 id=&#34;更新&#34;&gt;更新&lt;a class=&#34;headerlink&#34; href=&#34;#更新&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;升级先把老版本 App 重命名为 App2。（程序放在 App 目录，数据放在 Data 目录）&lt;/li&gt;
&lt;li&gt;然后把新下载/安装的所有文件覆盖到老文件夹内。&lt;ol&gt;
&lt;li&gt;如果在 win7 中安装最新的 Microsoft Edge，如 90.818.42，安装后在更新中提示错误代码。&lt;/li&gt;
&lt;li&gt;把最新安装的 Microsoft Edge 的 Application 整个目录拷贝到当前目录，重命名为 App。&lt;/li&gt;
&lt;li&gt;把 App2 旧目录内的 version.dll 拷贝到 App 内。&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fkiv5jhaClVSKo72vrGS-JgrL_xe.png&#34; /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;运行测试正常后可以安全删除 App2 老版本。&lt;/li&gt;
&lt;li&gt;建议保留上个版本压缩包以便出问题时还原。&lt;/li&gt;
&lt;li&gt;最后，双击 mesedge.exe，发现已经移除更新错误警告（因为是绿色版没有自动更新功能）。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FqTj3JRSbg5N-06rJG_5YqWvUkNN.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;最后说一下，Microsoft Edge 虽然比较符合国人使用习惯，也不需要搭梯子，要是折腾成本太高，Google Chrome 也是很香的。&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/Windows/2021-04-21-microsoft-edge/</link>
      <pubDate>Wed, 21 Apr 2021 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/Windows/2021-04-21-microsoft-edge/</guid>
      
    </item>
    
    <item>
      <title>使用码云同步谷歌 Chrome 浏览器书签</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-03-16&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-03-16T00:00:00&#39;&gt;2021-03-16&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-10-31&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-10-31T10:40:20&#39;&gt;2021-10-31&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;由于东方的神秘力量，国内正常情况下是连不上 Google 账号的，所以平时使用 Chrome 经常会头疼书签同步问题。  由于魔法力量的不稳定，有时候不同步，有时还会同步错乱导致书签丢失。&lt;/p&gt;
&lt;p&gt;针对这个问题，这两天尝试了一下微软最新版本的 Edge，不得不说 Edge 很多地方的确很符合国人的使用习惯，尤其无需梯子即可进行书签同步，真心香！但唯一有点坑的地方是对 Windows 7 的支持还不够友好。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fq-j4BEB4RvNG-9M6KhQwbrader1.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;虽然现在的 Edge 提供了 Windows 7 版本，但是安装过程中需要把 IE 升级到最新的 IE11，就算你好不容易把 IE11 升级好的，Edge 在获取更新说不定还会遇到其他更加难搞的事情。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FutF2Q-w_xQA6Rgqrg9l_8pOx5_l.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;回到 Chrome，介绍一下这个偶然发现的插件：书签同步码云。这个工具可以把谷歌浏览器书签同步至码云
在国内码云平台是访问速度比较快的，平时用着也比较方便。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FlGw7B1ONgoPE5Am-6qGduoZwf6H.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;1-安装插件&#34;&gt;1. 安装插件&lt;a class=&#34;headerlink&#34; href=&#34;#1-安装插件&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;如果有条件用谷歌商店的可以直接去谷歌商店中搜索安装，当然也有同步在 Github 中的插件，也是类似，应用商店也可以找到。&lt;/p&gt;
&lt;p&gt;如果无法使用谷歌商店，我上传到天翼云盘，有需要的可以关注** &amp;ldquo;BioIT 爱好者**&amp;rdquo; 公众号后台回复  &lt;strong&gt;&amp;ldquo;码云书签&amp;rdquo;&lt;/strong&gt;  关键字，即可获取下载链接。
&lt;img alt=&#34;BioIT爱好者-关注我们.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fv-cZ0ZzOktyc4yEFX5ZbF4bmuDu.png&#34; /&gt;
下载解压后，把里面 .crx 文件直接拖到浏览器，应该就可以加载，如果提示无效或者错误的话，可以把后缀名改成 .zip 或者 .rar，然后找个目录解压了，在打开开发者模式：
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fhc01HNHYd1St5Pa9ygXSl33MZTe.png&#34; /&gt;
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fjnuzft4rv7qokjehW_Wki4tRSIn.png&#34; /&gt;
然后点击加载已解压的扩展程序，选择你解压的目录，注意是目录，不是具体的文件，点击确定就可以，应该就可以见扩展程序页面的插件了，如下：&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FvMmi6jN9_d4lUV-YNNiv7PsD1Tt.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;插件打开长这样子：
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fqx7H53yyGiOi4owahG3Jw5uDRuG.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;2-添加码云仓库使用&#34;&gt;2. 添加码云仓库使用&lt;a class=&#34;headerlink&#34; href=&#34;#2-添加码云仓库使用&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&#34;21-新建仓库&#34;&gt;2.1 新建仓库&lt;a class=&#34;headerlink&#34; href=&#34;#21-新建仓库&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;打开码云，新建仓库。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fq_E6L7ye55ATBRaibFJxMKF-vbG.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;22-填写插件信息&#34;&gt;2.2 填写插件信息&lt;a class=&#34;headerlink&#34; href=&#34;#22-填写插件信息&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;h4 id=&#34;access_token&#34;&gt;access_token&lt;a class=&#34;headerlink&#34; href=&#34;#access_token&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;首先，在码云中点击设置：
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FvbKxQ7_fIo6JEGMqtZ5cdj92ntr.png&#34; /&gt;
第二，进去之后，点击  **私人令牌 -&amp;gt; 生成新令牌  **：&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FjNLbebmjWmefwwMVJ4vJwfOn21b.png&#34; /&gt;
点击生成令牌之后，在页面中填写 &lt;strong&gt;私人令牌描述&lt;/strong&gt;，下面权限要全选：
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FtDWM8LIZmn_yvxXuDreFPAUKR1v.png&#34; /&gt;
然后点击提交，会验证当前账户密码，验证之后会弹出令牌页面。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FrZgi5FNlY2kLVAexyCTmcvSFUbx.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意：这个令牌只显示一次，建议复制保存到本地记事本或者其他地方之后再确认关闭！！！&lt;/strong&gt;
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FrfA3dC9fhmWqUOCSXepC4ddRrom.png&#34; /&gt;
然后再将该该令牌复制到 插件的 access_token 位置就好。&lt;/p&gt;
&lt;h4 id=&#34;owner&#34;&gt;owner&lt;a class=&#34;headerlink&#34; href=&#34;#owner&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;回到我们刚才创建的仓库，例如 &lt;a href=&#34;https://gitee.com/shenweiyan/bookmarks&#34;&gt;https://gitee.com/shenweiyan/bookmarks&lt;/a&gt;，owner 就是 &lt;strong&gt;shenweiyan&lt;/strong&gt;，把这个信息复制到插件的 owner 位置就好。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FhEosdSBIm7aHJ6pGDWRoA6g_04C.png&#34; /&gt;&lt;/p&gt;
&lt;h4 id=&#34;repo&#34;&gt;repo&lt;a class=&#34;headerlink&#34; href=&#34;#repo&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;以我们刚才创建的 &lt;a href=&#34;https://gitee.com/shenweiyan/bookmarks&#34;&gt;https://gitee.com/shenweiyan/bookmarks&lt;/a&gt; 仓库为例，repo 就是 &lt;strong&gt;bookmarks&lt;/strong&gt;，把这个信息复制到插件的 repo 位置就好。&lt;/p&gt;
&lt;h4 id=&#34;path&#34;&gt;path&lt;a class=&#34;headerlink&#34; href=&#34;#path&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;注意，这里写的是相对 repo 仓库的 path 信息，如果你想直接把文件保存的仓库根目录，path 就可以写 chrome.html 或者 chrome.json，名称可以随便写，以 html/json 作为格式后缀即可。&lt;/p&gt;
&lt;h4 id=&#34;branch&#34;&gt;branch&lt;a class=&#34;headerlink&#34; href=&#34;#branch&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;分支(通常是写 master)。&lt;/p&gt;
&lt;p&gt;以 &lt;a href=&#34;https://gitee.com/shenweiyan/bookmarks&#34;&gt;https://gitee.com/shenweiyan/bookmarks&lt;/a&gt; 仓库为例的最终插件信息如下：
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FpJgSdZUuC3VnMcn_LP1_gKgyghs.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;3-使用事项&#34;&gt;3. 使用事项&lt;a class=&#34;headerlink&#34; href=&#34;#3-使用事项&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;注意，如果是第一次添加使用，在填写完信息之后，需要先在仓库中创建一个 path 的文件（例如，这里的 chrome.json，需要先创建）。&lt;/p&gt;
&lt;p&gt;然后，直接点 Upload 把当前浏览器的书签上传到 gitee 仓库中。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FjVMibJM6oV3_jjVc17oldMdwchp.png&#34; /&gt;
最后，就可以通过点击 Download 把云端（即仓库）的书签信息同步到其他电脑的当前浏览器。&lt;/p&gt;
&lt;p&gt;:::success
&lt;strong&gt;注意，注意，注意！！！&lt;/strong&gt;
如果是两个电脑用这个同步，建议先把当前浏览器的书签线导出到本地，因为这个 Download 会用云端（即仓库）的书签把当前浏览器（即本地）的书签&lt;strong&gt;覆盖。如果直接把当前浏览器（即本地）的书签 Upload，则会把云端（即仓库）的书签覆盖。&lt;/strong&gt;
:::&lt;/p&gt;
&lt;p&gt;我就是这么操作之后才知道，不过还好本地覆盖云端还有救，因为码云可以看历史版本，恢复一下就好了。&lt;/p&gt;
&lt;p&gt;正常操作应该是：&lt;/p&gt;
&lt;p&gt;1）先将当前浏览器书签导出到本地电脑。
2）然后点击 Download 把云端仓库的书签信息同步到当前浏览器。
3）然后再将本地书签导入到当前浏览器，再自己将书签整理下，把当前浏览器的书签和云端仓库的书签整合。
4）整理完毕再上传（Upload）就 OK。&lt;/p&gt;
&lt;h2 id=&#34;3-参考资料&#34;&gt;3. 参考资料&lt;a class=&#34;headerlink&#34; href=&#34;#3-参考资料&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&#34;https://zhuanlan.zhihu.com/p/158026344&#34;&gt;谷歌浏览器书签同步工具 - 知乎&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/Windows/2021-03-16-chrome-bookmark-sync/</link>
      <pubDate>Tue, 16 Mar 2021 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/Windows/2021-03-16-chrome-bookmark-sync/</guid>
      
    </item>
    
    <item>
      <title>Windows/Linux 下功能强大的桌面截图软件</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-02-26&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-02-26T00:00:00&#39;&gt;2021-02-26&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-06-25&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-06-25T10:47:00&#39;&gt;2021-06-25&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;SeventeenSolstice_ZH-CN4901756341_1920x1080.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FoeC6XEfbiPhkCNcLhbfNxxTH1Sq.jpeg&#34; /&gt;
说到桌面截图软件，很多人首先想到的是 QQ 自带的截图，或者更高级功能更强大的 &lt;a href=&#34;https://zh.snipaste.com/index.html&#34;&gt;Snipaste&lt;/a&gt; 截图工具。&lt;/p&gt;
&lt;p&gt;独立版本的 QQ 截图至少我目前没找到官方正式的下载链接，默认需要安装和打开 QQ 才能使用，而且貌似只能在 windows 下使用。功能强悍的 &lt;a href=&#34;https://zh.snipaste.com/index.html&#34;&gt;Snipaste&lt;/a&gt; 目前主要支持 windows，Mac 版本的正在公测中，不支持其他 Linux 平台的使用。&lt;/p&gt;
&lt;p&gt;今天给大家推荐一款开源的功能很强的桌面截图软件：&lt;a href=&#34;https://flameshot.org/&#34;&gt;Flameshot&lt;/a&gt;，它可以同时支持 Windows 和 Linux 平台。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;官网：&lt;a href=&#34;https://flameshot.org/&#34;&gt;https://flameshot.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GitHub：&lt;a href=&#34;https://github.com/flameshot-org/flameshot&#34;&gt;https://github.com/flameshot-org/flameshot&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&#34;flameshot.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fgt4g16Y5EfpRv7yeDJG9f_XyZxB.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;介绍&#34;&gt;介绍&lt;a class=&#34;headerlink&#34; href=&#34;#介绍&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Flameshot 是一个 Linux 发行版中完全免费且开源的截图工具。Flameshot 简单易用并有一个 CLI 版本，所以你也可以从命令行来进行截图。&lt;/p&gt;
&lt;p&gt;通常 Linux 发行版中会默认自带一个截图工具，但功能有限，往往只能单纯的截图截屏，无法完成对截图的编辑、涂画、标记文本等功能。Flameshot 强大之处在于它不仅能截图，更能对截图进行充分的编辑、涂画、标记、具备的功能更强于 QQ 截图。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Flameshot 自带一系列非常好的功能，例如：&lt;/strong&gt;
**&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;可自定义各个功能对应的键盘快捷方式；&lt;/li&gt;
&lt;li&gt;可以进行手写；&lt;/li&gt;
&lt;li&gt;可以划直线；&lt;/li&gt;
&lt;li&gt;可以画长方形或者圆形框；&lt;/li&gt;
&lt;li&gt;可以进行长方形区域选择；&lt;/li&gt;
&lt;li&gt;可以画箭头；&lt;/li&gt;
&lt;li&gt;可以对要点进行标注；&lt;/li&gt;
&lt;li&gt;可以添加文本；&lt;/li&gt;
&lt;li&gt;可以对图片或者文字进行模糊处理；&lt;/li&gt;
&lt;li&gt;可以展示图片的尺寸大小；&lt;/li&gt;
&lt;li&gt;在编辑图片是可以进行撤销和重做操作；&lt;/li&gt;
&lt;li&gt;可以将选择的东西复制到剪贴板；&lt;/li&gt;
&lt;li&gt;可以保存选区；&lt;/li&gt;
&lt;li&gt;可以离开截屏；&lt;/li&gt;
&lt;li&gt;可以选择另一个 app 来打开图片；&lt;/li&gt;
&lt;li&gt;可以上传图片到 imgur 网站；&lt;/li&gt;
&lt;li&gt;可以将图片固定到桌面上；&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;看一下操作的的 GIF 动画效果：
&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Foic6dCPtIAi9EPi4HAqz8t3RL5a.gif&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;安装与使用&#34;&gt;安装与使用&lt;a class=&#34;headerlink&#34; href=&#34;#安装与使用&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://flameshot.org/&#34;&gt;Flameshot&lt;/a&gt; 的官网提供了各个平台下详细的安装说明，感兴趣的可以去看一下。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FlexH89LMt__CyXH6CXHN9Sh6stW.png&#34; /&gt;
对于 Windows 用户，只要把安装包下载下来，解压，即可免安装直接使用。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fq8Iu77GUYvXOenLJTbnJkv72_sw.png&#34; /&gt;
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fii_zW_FFeCAwxbRGwdy93DoYYom.png&#34; /&gt;
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FrV8O0TUjxSY5pSt02clItBwP2qb.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;快捷键&#34;&gt;快捷键&lt;a class=&#34;headerlink&#34; href=&#34;#快捷键&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Frameshot 支持快捷键。在 Flameshot 的托盘图标上右击并点击 “配置” 窗口便可以看到在 GUI 模式下所有可用的设置。配置 →Shortcuts，即可看到所有快捷键的设置页面。下面是在 GUI 模式下可用的快捷键清单。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FsrS8xsEgOk8h5_ez5bpqjYr9wMh.png&#34; /&gt;
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FpXUjZk1GAlTR-gwUGtzp790WGeh.png&#34; /&gt;
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fn-AAK8ffo1BsM3F25XU1lLctNwq.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;高级用法&#34;&gt;高级用法&lt;a class=&#34;headerlink&#34; href=&#34;#高级用法&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Flameshot 还有一些命令行选项，如通过一系列的命令行选项来延时截图和保存图片到自定义的路径；CLI configuration；Linux 对应发行版本高级使用配置，等等。这不一一列举，感兴趣的童鞋可以去官网或者 GitHub 研究折腾一下。&lt;/p&gt;
&lt;h2 id=&#34;一句话&#34;&gt;一句话&lt;a class=&#34;headerlink&#34; href=&#34;#一句话&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Flameshot 几乎拥有截屏的所有功能：添加注释、编辑图片、模糊处理，或者对要点做高亮等等功能。可以尝试一下它，相信你不会失望的。&lt;/p&gt;
&lt;h2 id=&#34;获取软件&#34;&gt;获取软件&lt;a class=&#34;headerlink&#34; href=&#34;#获取软件&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;文章最后，小编把截止 2021-02-26（元宵节）前 flameshot 在 Windows 32/64、AppImage 的最新版本免安装包都打包好放在了云盘上，喜欢的童鞋欢迎关注 &lt;strong&gt;&amp;ldquo;BioIT 爱好者&amp;rdquo;&lt;/strong&gt; 公众号，后台回复** &amp;ldquo;截图&amp;rdquo;** 关键字，即可获取。
&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fmv1rwSShbT0qC6EAXj_ImLTuQrz.png&#34; /&gt;&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/Windows/2021-02-26-flameshot/</link>
      <pubDate>Fri, 26 Feb 2021 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/Windows/2021-02-26-flameshot/</guid>
      
    </item>
    
    <item>
      <title>R 语言 download.file 的几点知识</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-02-20&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-02-20T00:00:00&#39;&gt;2021-02-20&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-12-07&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-12-07T10:22:00&#39;&gt;2021-12-07&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;R 语言中，不管是安装包，还是下载数据，很多时候都会用到 download.file 这个函数。如果你在安装包或者下载数据过程中出现中断，或者异常，想要判断是远程源服务器的问题，还是自身服务器的问题，还是网络故障，甚至于你想要换一种方法去继续你的下载，了解一下 download.file 还是很有帮助的。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://rdrr.io/r/utils/download.file.html&#34;&gt;download.file: Download File from the Internet&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;上面的链接是关于 &lt;strong&gt;download.file&lt;/strong&gt; 函数非常详细的一个文档，个人非常关注就是它关于 **method **参数设置和理解。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;If &lt;code&gt;method = &#34;auto&#34;&lt;/code&gt; is chosen (the default), the behavior depends on the platform:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;On a Unix-alike method &lt;code&gt;&#34;libcurl&#34;&lt;/code&gt; is used except &lt;code&gt;&#34;internal&#34;&lt;/code&gt; for file:// URLs, where &lt;code&gt;&#34;libcurl&#34;&lt;/code&gt; uses the library of that name (&lt;a href=&#34;https://curl.se/libcurl/&#34;&gt;https://curl.se/libcurl/&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;On Windows the &lt;code&gt;&#34;wininet&#34;&lt;/code&gt; method is used apart from for ftps\:// URLs where &lt;code&gt;&#34;libcurl&#34;&lt;/code&gt; is tried. The &lt;code&gt;&#34;wininet&#34;&lt;/code&gt; method uses the WinINet functions (part of the OS).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Support for method &lt;code&gt;&#34;libcurl&#34;&lt;/code&gt; is optional on Windows: use &lt;code&gt;capabilities(&#34;libcurl&#34;)&lt;/code&gt; to see if it is supported on your build. It uses an external library of that name (&lt;a href=&#34;https://curl.se/libcurl/&#34;&gt;https://curl.se/libcurl/&lt;/a&gt;) against which R can be compiled.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;关于 download.file 的几点理解和值得注意的地方：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;download.file&lt;/strong&gt; 是来源于 R 自带的 &lt;code&gt;utils&lt;/code&gt;  包的一个函数，使用 &lt;code&gt;packageVersion(&#34;utils&#34;)&lt;/code&gt; 可以查看该包的版本。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在类 Unix 系统中，默认使用 &lt;code&gt;&#34;libcurl&#34;&lt;/code&gt; 的方法，而对 file:// 的链接会使用 &lt;code&gt;&#34;internal&#34;&lt;/code&gt; 的下载方法。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在 windows 中，默认使用 &lt;code&gt;&#34;wininet&#34;&lt;/code&gt; 的方法，对于 ftps\:// 的资源会尝试使用 &lt;code&gt;&#34;libcurl&#34;&lt;/code&gt; 的下载方法。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Method to be used for downloading files. Current download methods are  &lt;code&gt;&#34;internal&#34;&lt;/code&gt;， &lt;code&gt;&#34;wininet&#34;&lt;/code&gt; (Windows only) &lt;code&gt;&#34;libcurl&#34;&lt;/code&gt;, &lt;code&gt;&#34;wget&#34;&lt;/code&gt; and &lt;code&gt;&#34;curl&#34;&lt;/code&gt;, and there is a value &lt;code&gt;&#34;auto&#34;&lt;/code&gt; .&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;注意 &lt;code&gt;&#34;libcurl&#34;&lt;/code&gt; 和  &lt;code&gt;&#34;curl&#34;&lt;/code&gt; 的区别，严格意义上，两者不是同一个东西。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;相同点：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;curl 和 libcurl 都可以利用多种多样的协议来传输文件，包括 HTTP, HTTPS, FTP, FTPS, GOPHER, LDAP, DICT, TELNET and FILE 等。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;不同点&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;curl 是命令行工具，可以通过 shell 或脚本来运行 curl。curl 底层所使用的库是 libcurl。&lt;/li&gt;
&lt;li&gt;libcurl 是一个库，通常与别的程序绑定在一起使用，如命令行工具 curl 就是封装了 libcurl 库。所以我们也可以在你自己的程序或项目中使用 libcurl 以获得类似 CURL 的强大功能。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The method can also be set through the option &lt;code&gt;&#34;download.file.method&#34;&lt;/code&gt;: see &lt;code&gt;options()&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;可以使用 **options(download.file.method = &amp;ldquo;libcurl&amp;rdquo;) **的方式指定全局下载的方法。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;参考：&lt;a href=&#34;https://stackoverflow.com/a/63104633&#34;&gt;https://stackoverflow.com/a/63104633&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nf&#34;&gt;install.packages&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;devtools&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;method&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;libcurl&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;extra&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot; --insecure --user&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;libcurl_opts&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;list&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;download.file.method&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;libcurl&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;download.file.extra&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot; --insecure --user&amp;quot;&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;old_opt&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;options&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;libcurl_opts&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;nf&#34;&gt;getOption&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;download.file.method&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;nf&#34;&gt;options&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;old_opt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;getOption&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;download.file.method&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FpMVz5NAdqvK7DdK8zMMIkKZIbhd.png&#34; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;使用 curl 方法时，通常需要加上 -L 参数。这时候 R 会自动调用系统的 curl 命令在后台执行对应包的下载。&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# For method &amp;quot;curl&amp;quot; use argument extra = &amp;quot;-L&amp;quot;.&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;options&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;download.file.method&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;curl&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;extra&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;-L&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FuApwtzylYe69akxEZhm0C1phg5h.png&#34; /&gt;&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/R/2021-02-20-r-download-file/</link>
      <pubDate>Sat, 20 Feb 2021 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/R/2021-02-20-r-download-file/</guid>
      
    </item>
    
    <item>
      <title>服务器关于 OpenSSL/SSL 的异常处理备忘</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-02-20&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-02-20T00:00:00&#39;&gt;2021-02-20&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-06-25&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-06-25T10:54:01&#39;&gt;2021-06-25&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id=&#34;1-openssl-error100ae081&#34;&gt;1. OpenSSL: error:100AE081&lt;a class=&#34;headerlink&#34; href=&#34;#1-openssl-error100ae081&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;这个问题其实是我在 CentOS 6.5 中安装 “packagefinder” R 包的时候遇到的一个问题（其实 wget 下载 https 资源的时候也出现了这个问题）。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install.packages&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;packagefinder&amp;quot;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
---&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Please&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;select&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;a&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;CRAN&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mirror&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;use&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;this&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;session&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;---
Warning:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;failed&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;download&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mirrors&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;cannot&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;open&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;URL&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;https://cran.r-project.org/CRAN_mirrors.csv&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;using&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;local&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;/RiboBio/home/shenweiyan/software/R/R-4.0.3/lib64/R/doc/CRAN_mirrors.csv&amp;#39;&lt;/span&gt;
trying&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;URL&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;https://mirrors.ustc.edu.cn/CRAN/src/contrib/packagefinder_0.3.2.tar.gz&amp;#39;&lt;/span&gt;
Content&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;application/octet-stream&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;length&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;433718&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bytes&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;423&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;KB&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;==================================================&lt;/span&gt;
downloaded&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;423&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;KB

*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;installing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;*source*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;‘packagefinder’&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;...
**&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;‘packagefinder’&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;successfully&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;unpacked&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;and&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;MD5&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sums&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;checked
**&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;using&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;staged&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;installation
**&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;R
**&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;inst
**&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;byte-compile&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;and&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;prepare&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;lazy&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;loading
**&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;help&lt;/span&gt;
***&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;installing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;help&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;indices
***&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;copying&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;figures
**&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;building&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;indices
**&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;testing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;installed&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;can&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;be&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;loaded&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;temporary&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;location
Warning&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;url&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;sprintf&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;%s/%s&amp;quot;&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;cran,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;path&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;open&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;rb&amp;quot;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;:
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;URL&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;https://CRAN.R-project.org/web/packages/packages.rds&amp;#39;&lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;status&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;was&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;SSL connect error&amp;#39;&lt;/span&gt;
Error:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;or&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;namespace&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;load&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;failed&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;‘packagefinder’:
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;.onAttach&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;failed&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;attachNamespace&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;packagefinder&amp;#39;&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;details:
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;call:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;url&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;sprintf&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;%s/%s&amp;quot;&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;cran,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;path&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;open&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;rb&amp;quot;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;error:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;cannot&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;open&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;connection&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;https://CRAN.R-project.org/web/packages/packages.rds&amp;#39;&lt;/span&gt;
Error:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;loading&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;failed
Execution&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;halted
ERROR:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;loading&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;failed
*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;removing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;‘/Bioinfo/SoftWare/R/R-4.0.3/lib64/R/library/packagefinder’

The&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;downloaded&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;packages&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;are&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;‘/tmp/RtmpTjsgn2/downloaded_packages’
Updating&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;HTML&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;index&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;packages&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;.Library&amp;#39;&lt;/span&gt;
Making&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;packages.html&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;
Warning&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;messages:
&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;In&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;download.file&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;url,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;destfile&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;f,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;quiet&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;TRUE&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;:
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;URL&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;https://cran.r-project.org/CRAN_mirrors.csv&amp;#39;&lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;status&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;was&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;SSL connect error&amp;#39;&lt;/span&gt;
&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;In&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install.packages&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;packagefinder&amp;quot;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;:
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;installation&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;‘packagefinder’&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;had&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;non-zero&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;exit&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;status
&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@log01&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# wget https://cran.r-project.org/src/contrib/packagefinder_0.3.2.tar.gz --no-check-certificate&lt;/span&gt;
--2021-02-20&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;11&lt;/span&gt;:50:14--&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;https://cran.r-project.org/src/contrib/packagefinder_0.3.2.tar.gz
Resolving&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;cran.r-project.org...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;137&lt;/span&gt;.208.57.37
Connecting&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;cran.r-project.org&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;137&lt;/span&gt;.208.57.37&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;:443...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;connected.
OpenSSL:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;error:100AE081:elliptic&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;curve&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;routines:EC_GROUP_new_by_curve_name:unknown&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;group
OpenSSL:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;error:1408D010:SSL&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;routines:SSL3_GET_KEY_EXCHANGE:EC&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;lib
Unable&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;establish&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;SSL&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;connection.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;拿着这个问题，谷歌了一下，发现有些人说需要升级 wget（configure 的时候增加一个 &amp;ndash;with-ssl=openssl 选项），个人尝试了一下，其实解决不了问题。&lt;/p&gt;
&lt;p&gt;个人比较信服的一个解析：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;参考 &lt;a href=&#34;https://www.centos.org/forums/viewtopic.php?f=14&amp;amp;t=43803&#34;&gt;https://www.centos.org/forums/viewtopic.php?f=14&amp;amp;t=43803&lt;/a&gt; 这个连接的解释，说这是 CentOS 6.5 的一个 bug，不过已经修复了。如果是使用在线的 yum 源的话，应该是不会出现这个问题的。不过我使用的是本地源，所以就出现了这个问题，这个应该是版本兼容性不行导致的。&lt;/p&gt;
&lt;p&gt;由于 CentOS 6.5 自带的 OpenSSL 最高版本是 openssl-1.0.1e-15.el6.x86_64，因此我们可以通过升级 openssl 到 openssl-1.0.1e-16 及以上，比如：openssl-1.0.1e-16.el6_5.x86_64.rpm，或者 openssl-1.0.1e-57.el6.x86_64.rpm。&lt;/p&gt;
&lt;p&gt;由于 CentOS 已经含有 openssl-1.0.1e-15.el6_5.x86_64 这个软件，所以需要使用命令：&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;rpm&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-ivh&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--replacefiles&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-*.rpm
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;:::tips
&lt;strong&gt;温馨提示：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;谷歌搜索 openssl-1.0.1e-16 及以上的 rpm 时，在 &lt;a href=&#34;https://centos.pkgs.org/6/centos-x86_64/&#34;&gt;https://centos.pkgs.org/6/centos-x86_64/&lt;/a&gt; 中找到的 rpm 下载包下载链接基本都会指向 404 错误，无法下载！！！&lt;/p&gt;
&lt;p&gt;最后在 &lt;a href=&#34;http://ftp.iij.ad.jp/pub/linux/centos-vault/6.8/cr/x86_64/Packages/&#34;&gt;http://ftp.iij.ad.jp/pub/linux/centos-vault/6.8/cr/x86_64/Packages/&lt;/a&gt; 才找到 &lt;a href=&#34;http://ftp.iij.ad.jp/pub/linux/centos-vault/6.8/cr/x86_64/Packages/openssl-1.0.1e-57.el6.x86_64.rpm&#34;&gt;openssl-1.0.1e-57.el6.x86_64.rpm&lt;/a&gt; 的一个可用下载链接。
:::&lt;/p&gt;
&lt;p&gt;最终解决方法：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@log01&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pkgs&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# wget http://ftp.iij.ad.jp/pub/linux/centos-vault/6.8/cr/x86_64/Packages/openssl-1.0.1e-57.el6.x86_64.rpm&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@log01&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pkgs&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# rpm -ivh --replacefiles openssl-1.0.1e-57.el6.x86_64.rpm&lt;/span&gt;
warning:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-1.0.1e-57.el6.x86_64.rpm:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Header&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;V3&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;RSA/SHA1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Signature,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;key&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ID&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;c105b9de:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;NOKEY
Preparing...&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;########################################### [100%]&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;:openssl&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;########################################### [100%]&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@log01&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pkgs&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# rpm -qa|grep openssl&lt;/span&gt;
openssl-1.0.1e-15.el6.x86_64
openssl-1.0.1e-57.el6.x86_64
openssl-devel-1.0.1e-15.el6.x86_64
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;安装完成后，通过 wget 再次下载 https 资源，重新安装 “packagefinder” R 包都显示一切正常！&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%85%8D%E7%BD%AE%E4%BD%BF%E7%94%A8/2021-02-20-ssl-issues/</link>
      <pubDate>Sat, 20 Feb 2021 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%85%8D%E7%BD%AE%E4%BD%BF%E7%94%A8/2021-02-20-ssl-issues/</guid>
      
    </item>
    
    <item>
      <title>为 Windows 系统替换优雅的苹果字体</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-02-19&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-02-19T00:00:00&#39;&gt;2021-02-19&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-06-25&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-06-25T10:47:09&#39;&gt;2021-06-25&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;Matamata_ZH-CN8111830275_1920x1080.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FqdpFnrx7M2NOGrg6a9nA-ltDqJo.jpeg&#34; /&gt;&lt;/p&gt;
&lt;p&gt;使用 Windows 的童鞋，大家估计都用惯了默认的微软雅黑字体，字体本身也很不错，但使用久了也该换个别的字体了，换个字体换个心情嘛。&lt;/p&gt;
&lt;p&gt;今天给大家推荐一款非常棒的一键更换 Windows 系统字体的软件工具：&lt;strong&gt;noMeiryoUI&lt;/strong&gt;！&lt;/p&gt;
&lt;p&gt;noMeiryoUI 是一款在 GitHub 开源的字体修改软件，当你需要修改字体的时候就可以选择这款软件，该软件是默认是英文的，你也可以选择中文的，也可以选择韩文的，提供多个设置功能，在软件界面就可以找到你需要编辑的字体，可以在一个查找界面查看系统全部字体，支持对标题、图标、调色板、菜单等进行选择，可以对全部项目设置，可以对单个项目修改，帮助用户轻松修改字体基础信息，不会对原来的字体样式修改，如果你需要修改系统字体，可以选择 noMeiryoUI 这款软件！&lt;/p&gt;
&lt;p&gt;除此以外，noMeiryoUI 还有一个优点，就是体积小巧，几乎不占用内存，官网版解压后的全部文件总共也就 600K 左右！&lt;/p&gt;
&lt;p&gt;项目地址：&lt;a href=&#34;https://github.com/Tatsu-syo/noMeiryoUI&#34;&gt;https://github.com/Tatsu-syo/noMeiryoUI&lt;/a&gt;
下载地址：&lt;a href=&#34;https://github.com/Tatsu-syo/noMeiryoUI/releases&#34;&gt;https://github.com/Tatsu-syo/noMeiryoUI/releases&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;软件下载解压&#34;&gt;软件下载解压&lt;a class=&#34;headerlink&#34; href=&#34;#软件下载解压&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;官方版本的 noMeiryoUI-2.41 是在 2021.01.10 发布的，大家可以直接通过下面的链接在 GitHub 上下载。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/Tatsu-syo/noMeiryoUI/releases&#34;&gt;https://github.com/Tatsu-syo/noMeiryoUI/releases&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;noMeiryoUI-download.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FrAe4QmT0avNoLwO8xtXhRyJnGVU.png&#34; /&gt;
下载完成后，直接解压即可。
&lt;img alt=&#34;noMeiryoUI-unzip.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FuMF9hUtDSIm9NVzWrvBvL_cVJX9.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;切换中文版本&#34;&gt;切换中文版本&lt;a class=&#34;headerlink&#34; href=&#34;#切换中文版本&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;官方版本的 noMeiryoUI-2.41 默认是英文版本的，如果想要切换为中文版本的界面，只需要简单的三步。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;把默认的 default.chm 和 default.lng 这两个文件删除；&lt;/li&gt;
&lt;li&gt;把 Chinese (Simplified)_China.chm 和 Chinese (Simplified)_China.lng 分别重命名为 default.chm 和 default.lng。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img alt=&#34;noMeiryoUI-zhcn.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FhmG-CTfs8kyjXdhoCtN6K1w2Kxf.png&#34; /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;重新打开 noMeiryoUI.exe，即可。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img alt=&#34;noMeiryoUI-home.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fh2yeg-_xaIZCgwepwht9rGtBAKM.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;软件使用&#34;&gt;软件使用&lt;a class=&#34;headerlink&#34; href=&#34;#软件使用&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&#34;1-安装字体&#34;&gt;1. 安装字体&lt;a class=&#34;headerlink&#34; href=&#34;#1-安装字体&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;网络搜索你喜欢的字体文件，把对应字体的 tff 文件下载下来，打开下载下来的字体文件，点击左上角的安装即可。或者直接将字体文件复制到此文件件下：C:\Windows\Fonts。
&lt;img alt=&#34;font-pingfang.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fgxb6fqbi8J6f6p2Q2W4ZyZ8eZ2U.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;2-利用工具一键替换字体&#34;&gt;2. 利用工具一键替换字体&lt;a class=&#34;headerlink&#34; href=&#34;#2-利用工具一键替换字体&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;打开软件，自动显示主题选用的字体。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FvzG1zuOYxLJvCAOYwS7yozvEgu3.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;选择自己需要更换的字体。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Frj_FzdQaX7m0axvrInmx1xwV8rY.png&#34; /&gt;
一般字体默认大小为 9pt。选择字体之后，如果想要应用到其他单项，点击“统一设定”即可。当然，你也可以选择更个性化的字体，自定义字号。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fgt8P1_rcPxcuibJqMQI9u4Sul3i.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;最后，附上 windows 7 上统一次修改为苹方 9pt 字体前后的效果图。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FmZMR-2Gw9CuqoYeZGrEqCvlTWc7.png&#34; /&gt;
修改前：微软雅黑 9pt&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;win7-pingfang.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FoWQDVlDBQhkuaFTsQJVloGXPOVT.png&#34; /&gt;
修改后：苹方 9pt&lt;/p&gt;
&lt;h2 id=&#34;获取软件&#34;&gt;获取软件&lt;a class=&#34;headerlink&#34; href=&#34;#获取软件&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;文章最后，小编把 noMeiryoUI-2.41 和一些常用的字体，包括苹果常用的苹方黑体、OPPO 字体等，都打包好放在了云盘上。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FiqDyvm-4yKuBM5zFJybqG96BfHG.png&#34; /&gt;
喜欢的童鞋欢迎关注 &lt;strong&gt;&amp;ldquo;BioIT 爱好者&amp;rdquo;&lt;/strong&gt; 公众号，后台回复** &amp;ldquo;美化&amp;rdquo;** 关键字，即可获取。
&lt;img alt=&#34;BioIT爱好者-关注我们.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fv-cZ0ZzOktyc4yEFX5ZbF4bmuDu.png&#34; /&gt;&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/Windows/2021-02-19-win-font/</link>
      <pubDate>Fri, 19 Feb 2021 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/Windows/2021-02-19-win-font/</guid>
      
    </item>
    
    <item>
      <title>阿里云证书套路太深，还是我打开姿势不对？</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-02-04&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-02-04T00:00:00&#39;&gt;2021-02-04&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2023-08-30&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2023-08-30T08:06:23&#39;&gt;2023-08-30&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id=&#34;一阿里云证书资源包初体验&#34;&gt;一、阿里云证书资源包初体验&lt;a class=&#34;headerlink&#34; href=&#34;#一阿里云证书资源包初体验&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;2021 年 1 月 13 左右，收到阿里云提示个人 SSL 证书即将过期，需要续费。于是登陆阿里云，在更新个人域名的 SSL 证书的时候发现，阿里云的 SSL 证书貌似都已经找不到了！取而代之的是出现了一个叫 &amp;ldquo;证书资源包&amp;rdquo; 的玩意。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;自 2021 年 1 月 1 日起，每个经过实名认证的个人或企业主体可以在一个自然年内，通过 SSL 证书服务提供的免费证书扩容包，一次性领取 20 张免费 DV 证书。获取免费 DV 证书申请额度后，您需要通过 SSL 证书控制台提交证书申请，申请审核通过后，您将获得 CA 中心签发的证书。&lt;/p&gt;
&lt;p&gt;SSL 证书服务的 20 张免费证书资源包主要以公益目的，提供给阿里云用户使用，便于个人或企业用户在网站建设之初或业务需要使用 HTTPS 通信时进行测试。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;第一次用，简直是不知道云里雾里，摸索半天，好不容易购买了全年 20 个免费证书后，然后去证书申请，居然还申请不了（“证书申请”的“确定”按钮没法使用）！一开始以为是要购买托管服务才能申请证书!!!
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fh9XxUTOzpm7ODLrFMOxuZKFMbe8.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fv8YFe2-94-nd9Ey03W_oRCdzRtU.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;一年几百大洋的托管服务，真心表示不香！于是开始辗转腾讯云。&lt;/p&gt;
&lt;p&gt;时隔将近一个月，再次回来看了一下阿里云的证书服务，发现免费证书居然可以不用选择托管服务去申请了！
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Frh19NzvvWh0LbVn-ngEPHxzkehj.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;我不知道我在 2021 年 1 月 13 登陆阿里云申请免费证书时，无法正常申请到底是一个 BUG，还是阿里云团队故意为之，经历这个事情后，对阿里云的好感的确不如以前。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;阿里云有不少产品，新产品也好，老产品也罢，细分太深，用户很多时候不知道怎么去操作！&lt;/li&gt;
&lt;li&gt;阿里云有不少优惠活动，但对于老用户，很不友好！&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2 id=&#34;二阿里云证书资源包申请免费-ssl-流程&#34;&gt;二、阿里云证书资源包申请免费 SSL 流程&lt;a class=&#34;headerlink&#34; href=&#34;#二阿里云证书资源包申请免费-ssl-流程&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;2021 阿里云 SSL 免费证书购买地址又变了，为了解决免费证书近期存在的吊销、统计等问题，自 2021 年起，免费证书申请将切换到证书资源包下。阿里云 SSL 免费证书申请分为两个步骤，先支付 0 元购买免费证书扩容包，然后在证书资源包控制台申请，新手站长网来详细说下：&lt;/p&gt;
&lt;h3 id=&#34;21-购买证书资源包中的免费证书扩容包&#34;&gt;2.1 购买证书资源包中的免费证书扩容包&lt;a class=&#34;headerlink&#34; href=&#34;#21-购买证书资源包中的免费证书扩容包&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;阿里云免费 SSL 证书需要支付 0 元，购买云盾证书资源包中的免费证书扩容包：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;打开&lt;a href=&#34;https://www.xinshouzhanzhang.com/url/cas/&#34;&gt;阿里云 SSL 证书选购页面&lt;/a&gt;，点击“选购证书”；&lt;/li&gt;
&lt;li&gt;商品类型选择“云盾证书资源包”；&lt;/li&gt;
&lt;li&gt;资源包规格选择“免费证书扩容包”；&lt;/li&gt;
&lt;li&gt;资源包个数选择“20”。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fh34XBDHG0Gs75WwWejtaNOE7EST.jpeg&#34; /&gt;
如上图，选择完毕后总配置费用为 0 元，然后点“立即购买”支付 0 元即可。至此完成了阿里云 SSL 免费证书资源包的购买，之后还要在控制台输入域名等信息来申请 SSL 证书文件。&lt;/p&gt;
&lt;h3 id=&#34;22-控制台证书申请&#34;&gt;2.2 控制台证书申请&lt;a class=&#34;headerlink&#34; href=&#34;#22-控制台证书申请&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;h4 id=&#34;1-登录到-ssl-证书管理控制台&#34;&gt;1. &lt;a href=&#34;https://www.xinshouzhanzhang.com/url/console_ssl/&#34;&gt;登录到 SSL 证书管理控制台&lt;/a&gt;&lt;a class=&#34;headerlink&#34; href=&#34;#1-登录到-ssl-证书管理控制台&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;h4 id=&#34;2-选择左侧栏证书资源包&#34;&gt;2. 选择左侧栏“证书资源包”&lt;a class=&#34;headerlink&#34; href=&#34;#2-选择左侧栏证书资源包&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;可以看刚刚 0 元购买的证书资源包，免费证书资源包可申请 20 个证书，如下图：
&lt;img alt=&#34;ssl-a1.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FnXFAAt1SQa-vW6EEtWtKjgiyeih.png&#34; /&gt;&lt;/p&gt;
&lt;h4 id=&#34;3-点击证书申请&#34;&gt;3. 点击“证书申请”&lt;a class=&#34;headerlink&#34; href=&#34;#3-点击证书申请&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;在&amp;rdquo;证书资源包&amp;rdquo;页面，点击“证书申请”，如下图：
&lt;img alt=&#34;ssl-a2.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fo2x9I6aA-ffDAkksfk5-S6NJyCS.png&#34; /&gt;
目前阿里云免费证书是 DigiCert 品牌的，之前是赛门铁克（Symantec）&lt;/p&gt;
&lt;h4 id=&#34;4-证书申请&#34;&gt;4. 证书申请&lt;a class=&#34;headerlink&#34; href=&#34;#4-证书申请&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;规格选择“单域名”，然后点“确定”，可以看到证书状态为“待申请”。
&lt;img alt=&#34;ssl-a3.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FlC106GjmAbp1UQKHnijk_UvLbwB.png&#34; /&gt;&lt;/p&gt;
&lt;h4 id=&#34;5-填写证书申请申请表单&#34;&gt;5. 填写“证书申请”申请表单&lt;a class=&#34;headerlink&#34; href=&#34;#5-填写证书申请申请表单&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;img alt=&#34;ssl-ab4.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FrMY9jAF5zTvuq9-4H5FbvMC0Lew.png&#34; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;证书绑定域名：填写你要申请 SSL 的域名，如 www.bioitee.com&lt;/li&gt;
&lt;li&gt;域名验证方式：如果你的域名在本账号下，可以选择自动 DNS 验证，阿里云系统会为你的域名添加_dnsauth 的 TXT 解析记录；如果域名不在本账号下，可以选择手工 DNS 验证或文件验证。详细教程参考：&lt;a href=&#34;https://www.xinshouzhanzhang.com/sslyumingyanzheng.html&#34;&gt;阿里云 SSL 证书申请域名验证选择及操作流程&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;联系人：填写联系人信息，可以新建也可以选择之前保存的&lt;/li&gt;
&lt;li&gt;所在地：根据实际情况选择即可&lt;/li&gt;
&lt;li&gt;CSR 生成方式：CSR 文件是您的公钥证书原始文件，包含了您的服务器信息和您的单位信息，需要提交给 CA 认证中心审核。建议默认即可，使用系统创建的 CSR，避免因内容不正确而导致的审核失败。&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;6-域名验证提交审核&#34;&gt;6. 域名验证，提交审核&lt;a class=&#34;headerlink&#34; href=&#34;#6-域名验证提交审核&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;SSL 证书验证可选择域名 DNS 解析验证，也可以选择文件验证，bioitee 网以域名解析验证为例：
&lt;img alt=&#34;ssl-a5.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FiUAVNGwpJg6c1ppTuq6Y0OEOOSy.png&#34; /&gt;
bioitee.com 的域名在阿里云账号下，所以阿里云系统会自动添加 TXT 记录。如果你的域名不在当前阿里云账号下，可以根据提示手动添加 DNS 域名解析记录。SSL 证书域名验证记录类型为 TXT，主机记录_dnsauth，记录值根据提示复制填写。&lt;/p&gt;
&lt;p&gt;然后点“验证”，争取无误的话会提示“域名验证成功，域名验证记录在证书签发后再删除，否则会因没有解析记录导致证书签发失败。”
&lt;img alt=&#34;ssl-a6.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FrHWgw8nYqq2nW_zubQh5eHVvVZx.png&#34; /&gt;
验证通过后，点“提交审核”等待。会提示“已经成功提交到 CA 公司，请您保持电话畅通，并及时查阅邮箱中来自 CA 公司的电子邮件。”如下图：
&lt;img alt=&#34;ssl-a7.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FqjIguMS5C1ONXj4fTsdCHRWpLvW.png&#34; /&gt;
一般等待几秒钟即可颁发证书。&lt;/p&gt;
&lt;h4 id=&#34;7-ssl-证书下载&#34;&gt;7. SSL 证书下载&lt;a class=&#34;headerlink&#34; href=&#34;#7-ssl-证书下载&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;SSL 证书管理控制台的证书资源包中，点“下载”，如下图：
&lt;img alt=&#34;ssl-a8.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FnM78tOEfxzOiguid0ZHPxxOi7ou.png&#34; /&gt;
阿里云提供不同服务器类型证书，如 Tomcat、Apache、Nginx、IIS、JKS、其他及根证书下载，根据你的云服务器 Web 服务器环境来选择对应的证书下载：
&lt;img alt=&#34;ssl-a9.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fl-G45cOe76TjkUSP8XN-ybh2a80.png&#34; /&gt;
根据服务器类型选择证书下载&lt;/p&gt;
&lt;p&gt;bioitee 选择的是 Nginx 证书，SSL 证书文件自动下载保存到本地电脑中，然后在相应的地方复制粘贴或上传使用证书文件。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;以上内容来源于新手站长网分享的&lt;a href=&#34;https://www.xinshouzhanzhang.com/aliyunssl2021.html&#34;&gt;2021 年最新的阿里云 SSL 免费证书申请教程&lt;/a&gt;，部分截图根据实际情况以作调整。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;最后，再强调一下，目前免费证书在云盾证书资源包的免费证书扩容包中获取，每个阿里云账号限制 20 个免费证书。&lt;/p&gt;
&lt;h2 id=&#34;三参考资料&#34;&gt;三、参考资料&lt;a class=&#34;headerlink&#34; href=&#34;#三参考资料&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&#34;https://www.xinshouzhanzhang.com/aliyunssl2021.html&#34;&gt;2021 阿里云 SSL 免费证书申请教程（云盾证书资源包） - 新手站长网&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://help.aliyun.com/document_detail/156645.html&#34;&gt;申请免费 DV 证书 - SSL 证书 - 阿里云&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E5%90%8E%E7%AB%AF/2021-02-04-aliyun-ssl-cert/</link>
      <pubDate>Thu, 04 Feb 2021 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E5%90%8E%E7%AB%AF/2021-02-04-aliyun-ssl-cert/</guid>
      
    </item>
    
    <item>
      <title>配置 SpliceSeq DB，忘记了 MySQL root 密码怎么办？</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-01-19&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-01-19T00:00:00&#39;&gt;2021-01-19&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-06-25&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-06-25T10:38:15&#39;&gt;2021-06-25&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;SpliceSeq 是研究 mRNA 测序数据中 mRNA 可变剪切的一个工具集。该工具集由 3 个组件构成，即 SpliceSeq Viewer，SpliceSeq DB 和 SpliceSeq Analyzer。&lt;/p&gt;
&lt;p&gt;SpliceSeq Viewer 是基于 Java 的应用程序，可以通过 webstart 启动或在本地计算机上安装并运行。SpliceSeq DB 是一个基于 MySQL 的数据库，其中包含基因结构和样本读取统计数据。SpliceSeq Viewer 访问 SpliceSeq DB 以检索剪接分析结果。SpliceSeq Analyzer 执行 RNASeq 数据的比对和分析，并将结果加载到 SpliceSeq DB 中。&lt;/p&gt;
&lt;p&gt;在未安装自己的 SpliceSeq DB 数据库的情况下安装和启动 SpliceSeq Viewer 时，您仍然可以从我们的服务器或您有权访问的其他数据库中浏览数据。&lt;/p&gt;
&lt;h2 id=&#34;1-mysql-密码的恢复方法一&#34;&gt;1. MySQL 密码的恢复方法一&lt;a class=&#34;headerlink&#34; href=&#34;#1-mysql-密码的恢复方法一&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&#34;11-切换到-root-下&#34;&gt;1.1 切换到 root 下&lt;a class=&#34;headerlink&#34; href=&#34;#11-切换到-root-下&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;su&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;root
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;12-kill-掉系统里的-mysql-进程&#34;&gt;1.2 KILL 掉系统里的 MySQL 进程&lt;a class=&#34;headerlink&#34; href=&#34;#12-kill-掉系统里的-mysql-进程&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;killall&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-TERM&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mysqld&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 方法一&lt;/span&gt;
service&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mysqld&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;stop&lt;span class=&#34;w&#34;&gt;         &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 方法二&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;13-用以下命令启动-mysql以不检查权限的方式启动&#34;&gt;1.3 用以下命令启动 MySQL，以不检查权限的方式启动&lt;a class=&#34;headerlink&#34; href=&#34;#13-用以下命令启动-mysql以不检查权限的方式启动&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;mysqld_safe&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--skip-grant-tables&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;14-然后用空密码方式使用-root-用户登录-mysql&#34;&gt;1.4 然后用空密码方式使用 root 用户登录 MySQL&lt;a class=&#34;headerlink&#34; href=&#34;#14-然后用空密码方式使用-root-用户登录-mysql&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;mysql&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-u&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;root
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;15-修改-root-用户的密码&#34;&gt;1.5 修改 root 用户的密码&lt;a class=&#34;headerlink&#34; href=&#34;#15-修改-root-用户的密码&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;mysql&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;update&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mysql.user&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;password&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;PASSWORD&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;123456&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;where&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;User&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;root&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
mysql&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;flush&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;privileges&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
mysql&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;quit
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;重新启动 MySQL，就可以使用新密码登录了。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;mysqld_safe&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;           &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 启动 MySQL 服务&lt;/span&gt;
mysql&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-u&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;root&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-p&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 使用密码的方式登陆 MySQL&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;2-mysql-密码的恢复方法二&#34;&gt;2. MySQL 密码的恢复方法二&lt;a class=&#34;headerlink&#34; href=&#34;#2-mysql-密码的恢复方法二&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;有可能你的系统没有 mysqld_safe 程序(如 ubuntu 操作系统中使用 apt-get 安装的 mysql) , 下面方法可以恢复。&lt;/p&gt;
&lt;h3 id=&#34;21-切换到-root-下&#34;&gt;2.1 切换到 root 下&lt;a class=&#34;headerlink&#34; href=&#34;#21-切换到-root-下&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;su&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;root
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;22-停止-mysql&#34;&gt;2.2 停止 MySQL&lt;a class=&#34;headerlink&#34; href=&#34;#22-停止-mysql&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;/etc/init.d/mysql&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;stop
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;23-用以下命令启动-mysql以不检查权限的方式启动&#34;&gt;2.3 用以下命令启动 MySQL，以不检查权限的方式启动&lt;a class=&#34;headerlink&#34; href=&#34;#23-用以下命令启动-mysql以不检查权限的方式启动&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;mysqld&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--skip-grant-tables&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;24-然后用空密码方式使用-root-用户登录-mysql&#34;&gt;2.4 然后用空密码方式使用 root 用户登录 MySQL&lt;a class=&#34;headerlink&#34; href=&#34;#24-然后用空密码方式使用-root-用户登录-mysql&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;mysql&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-u&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;root
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;25-修改-root-用户的密码&#34;&gt;2.5 修改 root 用户的密码&lt;a class=&#34;headerlink&#34; href=&#34;#25-修改-root-用户的密码&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 修改 root 用户的密码为 abc123 (当然，你需要将 abc123 改成你要设置的密码)&lt;/span&gt;
mysql&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;update&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mysql.user&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;password&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;PASSWORD&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;abc123&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;where&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;User&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;root&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
mysql&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;flush&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;privileges&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
mysql&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;quit
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;重新启动 MySQL，就可以使用新密码登录了。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;/etc/init.d/mysql&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;restart&lt;span class=&#34;w&#34;&gt;           &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 启动 MySQL 服务&lt;/span&gt;
mysql&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-u&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;root&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-p&lt;span class=&#34;w&#34;&gt;                                &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 使用密码的方式登陆 MySQL&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E6%95%B0%E6%8D%AE%E5%BA%93/2021-01-19-guol49/</link>
      <pubDate>Tue, 19 Jan 2021 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E6%95%B0%E6%8D%AE%E5%BA%93/2021-01-19-guol49/</guid>
      
    </item>
    
    <item>
      <title>自定义 coding.net 静态网站域名</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2020-12-23&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2020-12-23T00:00:00&#39;&gt;2020-12-23&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-06-30&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-06-30T09:35:41&#39;&gt;2021-06-30&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;biying-1.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fnq5mx8M7EzOsYrrsrj0zReGYk8s.jpeg&#34; /&gt;&lt;/p&gt;
&lt;p&gt;上一篇文章，我们介绍了怎么在 coding.net 部署个人的静态网站/博客站点，今天我们聊一下怎么来自定义已经部署好站点的域名地址。&lt;/p&gt;
&lt;p&gt;基于腾讯云的自定义域名示例站点预览：
&lt;a href=&#34;https://startbootstrap-creative.bioitee.com/&#34;&gt;Creative - Start Bootstrap Theme&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;基于非腾讯云的自定义域名示例站点预览：
&lt;a href=&#34;https://startbootstrap-creative.ncbix.com/&#34;&gt;Creative - Start Bootstrap Theme&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;第一步，进入部署好站点的&amp;rdquo;静态网站&amp;rdquo;基本信息页面。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FjDmMQMIJIHOSdrSc97XG85pPo8k.png&#34; /&gt;
第二步，从&amp;rdquo;静态网站&amp;rdquo;基本信息页面进入&amp;rdquo;自定义域名&amp;rdquo;页面。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fu4_kUvMwvmj56j5oMwhRIi2fwJQ.png&#34; /&gt;
第三步，选择&amp;rdquo;新建域名&amp;rdquo;。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FiuqxZPeLxzEO43BYk_yf9kEPJVz.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;新建域名，有两种情况，我们先介绍第一种情况：你的域名是在腾讯云注册的。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;新建自定义域名，点击“确定”后，会自动生成一个 CNAME 记录。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FojrEQWIg_NxjqOus-2bduWibTm-.png&#34; /&gt;
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fi0m96DkTWoQSb9aSl9LESCKjMxo.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;点击&amp;rdquo;审核中&amp;rdquo;，可以看到对应证书在腾讯云中的详细信息。等待约 10 分钟，&amp;rdquo;审核中&amp;rdquo;的状态会自动变更为&amp;rdquo;待验证&amp;rdquo;。再过约 10 分钟，对应证书状态将会由&amp;rdquo;待验证&amp;rdquo; 变更为&amp;rdquo;已签发&amp;rdquo;，即表示证书已经申请成功。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FobrZFIETt4YJF-z73ZQ8TuaWumy.png&#34; /&gt;
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FiPmpvCAN3eOXDOg269h3gv-RzEe.png&#34; /&gt;
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FgdXU-HM9vVYJNYAAkCl-_hBj-JP.png&#34; /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;添加 CNAME 记录。登陆腾讯云域名解析中心，添加一个 CNAME 记录。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fhjfa31LRogNzEOn7FkJhimovAv8.png&#34; /&gt;
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FqubIh0th2FviKeG_PX9LRRXLgFQ.png&#34; /&gt;
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FuHlUPMlzzCg2xuzLK2Z7Ibc1Tfq.png&#34; /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;配置证书。选择腾讯云产品里面的&amp;rdquo;CDN 与加速&amp;rdquo;→&lt;a href=&#34;https://console.cloud.tencent.com/cdn&#34;&gt;&amp;ldquo;内容分发网络&amp;rdquo;&lt;/a&gt;，选择&lt;a href=&#34;https://console.cloud.tencent.com/cdn/certificate&#34;&gt;&amp;ldquo;证书管理&amp;rdquo;&lt;/a&gt;→“配置证书”。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fs_bBXgQBI3nnl-C0N8N_oRbuxzN.png&#34; /&gt;
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FmcKQ-XxScjl8axJZV27xOK6lruy.png&#34; /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;自定义域名完成，开启 https 访问。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FiRJxCJruJsHb0fV7x9dos3ekgUd.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;接下来，我们来看另外一种情况：新建非腾讯云注册的域名应该怎么处理。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;新建自定义域名，点击“确定”后，自动生成一个 CNAME 记录。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FrCMLzW_Babu9BkGQoSdVA0aLHl9.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FoObuaMrHgp8OfgJLjmznz3C9-vB.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;点击&amp;rdquo;审核中&amp;rdquo;，可以看到对应证书在腾讯云中的详细信息。添加非腾讯云注册的自定义域名，证书的状态不会自动由&amp;rdquo;审核中&amp;rdquo;更为&amp;rdquo;待验证&amp;rdquo; 和 &amp;ldquo;已签发&amp;rdquo;，需要一些额外的配置步骤。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FuC2tiwpPjMvn66hZ4pc81Zb8W3u.png&#34; /&gt;
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FrJ_ENsBn-KnRHdfKaEL0jaFRR0y.png&#34; /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;添加 CNAME 记录。登陆域名供应商的解析中心，添加一个 CNAME 记录。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fk-f75y5NKW7ZUIlgOHiyYiwloQJ.png&#34; /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;获取 DNS 验证记录。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FtxD9d5UqnEQUomPga0M5-6gEz54.png&#34; /&gt;
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FgxhVu6YfyXMCyfD4lABe2k3tgXN.png&#34; /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;在对应域名的供应商添加 TXT 解析记录。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fpk3aQMpDdOPSslMl1KkVxI7N7jm.png&#34; /&gt;
回到腾讯云&amp;rdquo;我的证书&amp;rdquo;，等待几分钟，证书状态将会由&amp;rdquo;待验证&amp;rdquo; 自动变更为&amp;rdquo;已签发&amp;rdquo;，即表示证书已经申请成功。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fm77PndnWqDkYZNZT4c1QSySnB8u.png&#34; /&gt;
coding.net 自定义域名的证书状态，在几分钟后，也会变更为&amp;rdquo;已颁发&amp;rdquo;。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FvS-g_0nM-t_KBA7Y9c1qAkTYnWa.png&#34; /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;配置证书。选择腾讯云产品里面的&amp;rdquo;CDN 与加速&amp;rdquo;→&lt;a href=&#34;https://console.cloud.tencent.com/cdn&#34;&gt;&amp;ldquo;内容分发网络&amp;rdquo;&lt;/a&gt;，选择&lt;a href=&#34;https://console.cloud.tencent.com/cdn/certificate&#34;&gt;&amp;ldquo;证书管理&amp;rdquo;&lt;/a&gt;→“配置证书”。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fs_bBXgQBI3nnl-C0N8N_oRbuxzN.png&#34; /&gt;
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FsMnKfHhGCLJokNHareNzaxIkq3Z.png&#34; /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;自定义域名完成，开启 https 访问。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fsu-odTNhLX_sABh1-Lbo6Kzq4F7.png&#34; /&gt;&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E9%9D%99%E6%80%81%E7%BD%91%E7%AB%99/2020-12-23-coding-net-custom-domain/</link>
      <pubDate>Wed, 23 Dec 2020 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E9%9D%99%E6%80%81%E7%BD%91%E7%AB%99/2020-12-23-coding-net-custom-domain/</guid>
      
    </item>
    
    <item>
      <title>使用 coding.net 发布你的个人博客</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2020-12-23&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2020-12-23T00:00:00&#39;&gt;2020-12-23&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-06-30&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-06-30T09:35:51&#39;&gt;2021-06-30&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;很多人喜欢在 github pages / gitee pages 发布自己的个人博客，前者由于服务器位于国外可能会导致国内的访问有时候很慢（你也可以使用 CDN 进行加速），后者如果想要配置自定义域名需要开通 Gitee Pages Pro 付费服务。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FnF4yJF0Ehy-3OUoTbho7XWbSbd9.png&#34; /&gt;
&lt;a href=&#34;https://gitee.com/help/articles/4228&#34;&gt;Gitee Pages Pro 暂时关闭个人用户购买入口&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;这里介绍一下，由腾讯云提供支持的 coding.net 代码托管平台提供的静态网站功能，为免费博客、静态站点提供一个解决方法，以供参考。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fn8x1_edIjoQJbZo19vgSkHSEV7s.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;本文章最后搭建完成的示例静态站点，可以点击这里进行预览：
&lt;a href=&#34;https://coding-pages-bucket-396338-8151423-8649-429346-1251708715.cos-website.ap-guangzhou.myqcloud.com/&#34;&gt;Creative - Start Bootstrap Theme&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;首先，进入你的 coding.net 主页，选择组边导航栏的&amp;rdquo;项目&amp;rdquo;，然后&amp;rdquo;创建项目&amp;rdquo;。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FoibxD7td7j-1REdQX_2qrghuh0d.png&#34; /&gt;
选择“代码托管项目”。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FmmTUz72mLQtYeHw7E_Lcvg8u2-y.png&#34; /&gt;
填写项目基本信息，点击&amp;rdquo;完成创建&amp;rdquo;。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fs18c5yRt-sZ-NbLaGq52YkNb9wa.png&#34; /&gt;
第二步，创建完成项目后，进入创建好的项目，在&amp;rdquo;代码仓库&amp;rdquo;中&amp;rdquo;新建代码仓库&amp;rdquo;。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FunGmG7sVE93QYUGEjvLN5Mc4sY1.png&#34; /&gt;
填写新建代码仓库信息。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FuAe2vvCmIgcgKOQVRwyLvM8kRt6.png&#34; /&gt;
第三步，在创建好的代码仓库中，选择&amp;rdquo;新建/上传&amp;rdquo;，或者通过 git 的方式，上传文件或文件夹。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FmkJUl-lPxdh7SrM3grhPnS2QK7d.png&#34; /&gt;
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fq1Bx0i4tRY1y8CCCOP3fF54gjll.png&#34; /&gt;
第四步，开启项目设置中的“持续部署”功能。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FnzHKrnW3hoDflDed_BsWfLxrW3H.png&#34; /&gt;
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FjzGhign9AHQuzJLulaSQ3VbeoIY.png&#34; /&gt;
第五步，构建&amp;rdquo;静态网站&amp;rdquo;。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FiIqxbEmupZJRiIdcRq4oFx_fwl7.png&#34; /&gt;
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FlER5RGikiwwe5BmiLNHPsR6I3Rw.png&#34; /&gt;
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FtjpVfTxGJc_aawM4WVdaacwZXLG.png&#34; /&gt;
第六步，部署成功，访问站点。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FnWQHToby6SH_lmDn2swMeODY-a_.png&#34; /&gt;
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FiD4dRHwKGWLNnLRu1lkQ8oAJK0t.png&#34; /&gt;
到这里，你在 coding.net 上的静态网站（博客）就已经部署完成，部署完成后 coding.net 会自动生成一个很长的 url，你可以通过这个 URL 访问你的站点。&lt;/p&gt;
&lt;p&gt;附上本文章最后搭建完成的示例静态站点：
&lt;a href=&#34;https://coding-pages-bucket-396338-8151423-8649-429346-1251708715.cos-website.ap-guangzhou.myqcloud.com/&#34;&gt;Creative - Start Bootstrap Theme&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;当然，你也可以配置一个更加容易访问的自定义域名，我们在下一篇推文中再详细如何配置，敬请期待。&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E9%9D%99%E6%80%81%E7%BD%91%E7%AB%99/2020-12-23-start-coding-pages/</link>
      <pubDate>Wed, 23 Dec 2020 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E9%9D%99%E6%80%81%E7%BD%91%E7%AB%99/2020-12-23-start-coding-pages/</guid>
      
    </item>
    
    <item>
      <title>测序数据学习笔记：bcl2fastq 安装</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2020-12-15&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2020-12-15T00:00:00&#39;&gt;2020-12-15&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-11-24&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-11-24T09:20:00&#39;&gt;2021-11-24&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;相比二进制的 bcl2fastq2，基于 Perl 语言的 bcl2fastq-1.8.4 或许是从源码层面学习了解 Illumina 测序数据处理一个不错的选择。源码版本的 bcl2fastq-1.8.4.tar.bz2 目前没能安装成功，这是基于 bcl2fastq-1.8.4-Linux-x86_64.rpm 的一些折腾记录。&lt;/p&gt;
&lt;h2 id=&#34;安装前准备&#34;&gt;安装前准备&lt;a class=&#34;headerlink&#34; href=&#34;#安装前准备&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;操作系统：CentOS Linux release 7.8.2003&lt;/li&gt;
&lt;li&gt;GCC 版本：gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;安装前需要解决的依赖：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;yum&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-y&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;doxygen&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;texlive&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;texlive-latex&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;readline-devel&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;gd-devel&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;lua-devel&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;cairo-devel&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pango-devel&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;wxGTK-devel&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;libcaca-devel&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;svgalib-devel
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;参考 Illumina 官方提供的 &lt;a href=&#34;https://support.illumina.com/content/dam/illumina-support/documents/documentation/software_documentation/bcl2fastq/bcl2fastq_letterbooklet_15038058brpmi.pdf&#34;&gt;bcl2fastq Conversion User Guide&lt;/a&gt; 文档 Appendix: Requirements and Software Installation on page 26 部分的内容，安装以下依赖：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;libxslt&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;libxslt-devel&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;libxml2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;libxml2-devel&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bzip2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bzip2-devel&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bzip2-devel-zlib&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;zlib&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;zlib-devel
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;bcl2fastq has been primarily developed and tested on CentOs 5, Illumina&amp;rsquo;s recommended
and supported platform. It may be possible to install and run bcl2fastq on other 64-bit
Linux distributions (particularly on similar distributions such as RedHat and Fedora) or
on other Unix variants, if all of the prerequisites described in this section are met.
The following software is required to run bcl2fastq; check whether it has been installed:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;GNU make (3.81 recommended)&lt;/li&gt;
&lt;li&gt;Perl (&amp;gt;= 5.8)&lt;/li&gt;
&lt;li&gt;libxslt&lt;/li&gt;
&lt;li&gt;libxslt-devel&lt;/li&gt;
&lt;li&gt;libxml2&lt;/li&gt;
&lt;li&gt;libxml2-devel&lt;/li&gt;
&lt;li&gt;gcc (4.0.0 or newer, except 4.0.2), with c++&lt;/li&gt;
&lt;li&gt;ImageMagick&lt;/li&gt;
&lt;li&gt;bzip2&lt;/li&gt;
&lt;li&gt;bzip2-devel&lt;/li&gt;
&lt;li&gt;zlib&lt;/li&gt;
&lt;li&gt;zlib-devel&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;安装过程异常解决&#34;&gt;安装过程异常解决&lt;a class=&#34;headerlink&#34; href=&#34;#安装过程异常解决&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;安装过程中出现的异常：
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FiQYnYkHfXBaGGN90hjP30zICxk_.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;imagemagick-的坑&#34;&gt;ImageMagick 的坑&lt;a class=&#34;headerlink&#34; href=&#34;#imagemagick-的坑&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;服务器本来就通过源码的方式安装了 ImageMagick 7.0.10-23，但是不管是命令行还是在 &lt;strong&gt;\~/.bashrc&lt;/strong&gt; 中设置 &lt;strong&gt;PATH&lt;/strong&gt; 环境变量，bcl2fastq 的 rpm 就是无法识别。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 命令行还是在 ~/.bashrc 中设置 PATH, bcl2fastq 的 rpm 就是无法识别&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/data/software/imagemagick-7.0.10-23/bin:&lt;span class=&#34;nv&#34;&gt;$PATH&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;最后的解决方法：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;yum&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ImageMagick
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;gnuplot-的坑&#34;&gt;gnuplot 的坑&lt;a class=&#34;headerlink&#34; href=&#34;#gnuplot-的坑&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;源码的方式安装 &lt;strong&gt;gunplot&lt;/strong&gt; 比较繁琐，懒得去折腾，使用 &lt;strong&gt;yum&lt;/strong&gt; 的方式安装。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;yum&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;gnuplot
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;boost-的坑&#34;&gt;boost 的坑&lt;a class=&#34;headerlink&#34; href=&#34;#boost-的坑&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;考虑最简单的安装方式：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;yum&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;cmake&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;boost&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;boost-thread&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;boost-thread-devel&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;boost-devel
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;现问题还是没解决，最终通过 Bing 找到了正确的答案，还要继续安装：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;yum&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;gcc-c++.x86_64&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;gperf
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;qt5-的坑&#34;&gt;Qt5 的坑&lt;a class=&#34;headerlink&#34; href=&#34;#qt5-的坑&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;源码安装 bcl2fastq-1.8.4.tar.bz2，configure 时遇到 Qt 的一系列错误。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;requirements&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;Qt5Core&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Qt5Gui&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Qt5Network&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Qt5Svg&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Qt5PrintSupport&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;were&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;met...
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;使用 &lt;strong&gt;yum&lt;/strong&gt; 的方式安装 Qt 相关依赖：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;yum&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-y&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;qt&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;qt-devel&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;qt5-qtbase&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;qt5-qtbase-devel&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;qt5-qtsvg&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;qt5-qtsvg-devel
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;安装成功&#34;&gt;安装成功&lt;a class=&#34;headerlink&#34; href=&#34;#安装成功&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&#34;install-bcl2fastq.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FmC-y6Fl8u_twEHPo8Kkryiz9v4i.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;后话&#34;&gt;后话&lt;a class=&#34;headerlink&#34; href=&#34;#后话&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;RTA（Real Time Analysis），是指 Illumina 测序在边合成边测序化学过程中，仪器上的实时分析（RTA）软件对每个簇的每个循环进行碱基检出和存储。RTA 以单个读取碱基（base call，或称 BCL）文件的形式存储碱基检出数据。测序完成后，必须将 BCL 文件中的测定的碱基转换为序列数据。 此过程称为 BCL 到 FASTQ 的转换。
&lt;img alt=&#34;seq-1.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Frx1EUlw3zRBY6aY-k_Q7HEJp4db.png&#34; /&gt;
&lt;img alt=&#34;seq-2.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fr8gllX_Vof1EuVgnZtjUn-2u2Rg.png&#34; /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The bcl2fastq2 Conversion Software v2.18 can be used to convert BCL files from MiniSeq, MiSeq, NextSeq, and HiSeq sequening systems. For conversion of data generated on Illumina sequencing systems using versions of RTA earlier than RTA 1.18.54, use bcl2fastq v1.8.4.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;如果你的 RTA 版本大于 1.18.54，可以考虑安装 bcl2fastq2，我在这里安装了 bcl2fastq v1.8.4 主要是想从源码层面对 Illumina 测序数据的转化作进一步了解学习。&lt;/p&gt;
&lt;p&gt;从信号处理到 basecalling 每一步都是一个大工程，路漫漫其修远兮，还需要继续努力搬砖！&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E7%94%9F%E4%BF%A1%E5%B7%A5%E5%85%B7%E4%B8%8E%E5%BA%94%E7%94%A8/2020-12-15-bcl2fastq-install/</link>
      <pubDate>Tue, 15 Dec 2020 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E7%94%9F%E4%BF%A1%E5%B7%A5%E5%85%B7%E4%B8%8E%E5%BA%94%E7%94%A8/2020-12-15-bcl2fastq-install/</guid>
      
    </item>
    
    <item>
      <title>NFS 挂载与异常处理知识整理</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2020-12-03&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2020-12-03T00:00:00&#39;&gt;2020-12-03&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-06-25&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-06-25T10:54:23&#39;&gt;2021-06-25&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://bbs.huaweicloud.com/blogs/114222&#34;&gt;NFS 挂载常用参数&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://linux.die.net/man/5/nfs&#34;&gt;nfs(5) - Linux man page&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://access.redhat.com/solutions/33108&#34;&gt;When nfs server is stopped how long does the client retry ?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.centos.bz/2018/02/nfs%e6%9c%8d%e5%8a%a1%e5%b8%b8%e8%a7%81%e6%95%85%e9%9a%9c%e6%8e%92%e6%9f%a5%e5%92%8c%e8%a7%a3%e5%86%b3%e6%96%b9%e6%b3%95/&#34;&gt;NFS 服务常见故障排查和解决方法&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;鸟哥的 Linux 私房菜：&lt;a href=&#34;http://linux.vbird.org/linux_server/0330nfs.php&#34;&gt;第十三章、文件服务器之一：NFS  服务器&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%85%8D%E7%BD%AE%E4%BD%BF%E7%94%A8/2020-12-03-wek7vb/</link>
      <pubDate>Thu, 03 Dec 2020 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%85%8D%E7%BD%AE%E4%BD%BF%E7%94%A8/2020-12-03-wek7vb/</guid>
      
    </item>
    
    <item>
      <title>Linux fuser 命令详解</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2020-12-03&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2020-12-03T00:00:00&#39;&gt;2020-12-03&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-06-30&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-06-30T09:39:10&#39;&gt;2021-06-30&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.4spaces.org/how-to-use-the-linux-fuser-command/&#34;&gt;Linux 系统如何使用 Fuser 命令&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://man.linuxde.net/fuser&#34;&gt;fuse 命令&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 杀掉占用此设备的进程&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sudo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;fuser&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-m&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-v&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-k&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/mnt/textlive/
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
      <link>https://shenwy.com/yuque/%E7%BC%96%E7%A8%8B%E6%8A%80%E6%9C%AF/Shell/2020-12-03-xvwc74/</link>
      <pubDate>Thu, 03 Dec 2020 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E7%BC%96%E7%A8%8B%E6%8A%80%E6%9C%AF/Shell/2020-12-03-xvwc74/</guid>
      
    </item>
    
    <item>
      <title>一文掌握 conda 安装配置生物信息软件</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2020-11-27&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2020-11-27T00:00:00&#39;&gt;2020-11-27&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2023-04-23&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2023-04-23T16:12:44&#39;&gt;2023-04-23&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;📢 本文以生信宝典的《&lt;/strong&gt;&lt;a href=&#34;https://mp.weixin.qq.com/s/2qJpSqonSWZQBIeN7E1xUA&#34;&gt;&lt;strong&gt;一文掌握 Conda 软件安装：虚拟环境、软件通道、加速 solving、跨服务器迁移&lt;/strong&gt;&lt;/a&gt;** 》为基础，对部分内容进行了扩展和部分调整，希望能形成一个更加系统化完善化的 Conda 生信软件安装配置指南!**&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;更新历史：&lt;/p&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;2021.10.25 - 增加第三章 Conda 加速器之 Mamba 操作 - by shenweiyan&lt;/li&gt;
&lt;li&gt;2021.04.20 - 增加第二章 conda 常见异常与解决 - by shenweiyan&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;h1 id=&#34;1-conda-安装配置生物信息软件&#34;&gt;1. Conda 安装配置生物信息软件&lt;a class=&#34;headerlink&#34; href=&#34;#1-conda-安装配置生物信息软件&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Conda 是一种通用包管理系统，旨在构建和管理任何语言的任何类型的软件。通常与 Anaconda 和 Miniconda 一起发放。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Anaconda：&lt;a href=&#34;https://www.anaconda.com/products/individual&#34;&gt;https://www.anaconda.com/products/individual&lt;/a&gt;)，集成了更多软件包。&lt;/li&gt;
&lt;li&gt;Miniconda：&lt;a href=&#34;https://conda.io/miniconda.html&#34;&gt;https://conda.io/miniconda.html&lt;/a&gt;)，只包含基本功能软件包。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;最初接触到 Anaconda 是用于 Python 包的安装。Anaconda 囊括了 100 多个常用的 Python 包，一键式安装，解决 Python 包安装的痛苦。&lt;/p&gt;
&lt;p&gt;但后来发现，其还有更多的功能，尤其是其增加了 bionconda （&lt;a href=&#34;https://bioconda.github.io/index.html&#34;&gt;https://bioconda.github.io/index.html&lt;/a&gt;）通道后，生物信息分析的 7925 多个软件都可以一键安装了（具体列表在：&lt;a href=&#34;https://anaconda.org/bioconda/repo&#34;&gt;https://anaconda.org/bioconda/repo&lt;/a&gt;），免去了编译时间浪费和解决库文件安装的问题。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FiVmAJzEocNOqjtiRRAnSqyeY1Pe.png&#34; /&gt;
另外其最有吸引力的是它的虚拟软件环境概念，可以简单的配置不同 Python 版本的环境、不同 Python 包的环境、不同 R 环境和 R 包的环境，对于生物信息软件繁杂的应用和频繁的更新提供了很大的便利。
&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FlOefyuCt6xvvRxlcAszyQkBYPcl.webp&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;11-conda-安装和配置&#34;&gt;1.1 Conda 安装和配置&lt;a class=&#34;headerlink&#34; href=&#34;#11-conda-安装和配置&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;在链接 &lt;a href=&#34;https://www.anaconda.com/products/individual&#34;&gt;https://www.anaconda.com/products/individual&lt;/a&gt; 下载 Anaconda 或 Miniconda 对应版本的分发包之后，安装就是运行下面的命令，根据提示一步步操作，主要是修改安装路径：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;如果是根用户，可以安装到 &lt;code&gt;/anaconda&lt;/code&gt;  下，或者其它任意目录都可以，但路径短还是有好处的；&lt;/li&gt;
&lt;li&gt;普通用户可安装到自己有权限的目录下，如 &lt;code&gt;~/miniconda2&lt;/code&gt; 。&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# soft目录为conda安装的目录，可自己修改&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;soft&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;~/miniconda2
&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;export PATH=&amp;quot;&amp;#39;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;soft&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;/bin:$PATH&amp;quot;&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;gt;&amp;gt;~/.bash_profile
&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;soft&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;/bin:&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PATH&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;
wget&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-c&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Miniconda2-latest-Linux-x86_64.sh&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-b&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-f&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-p&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;soft&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;安装完成之后，记得把安装路径下的 &lt;code&gt;bin&lt;/code&gt; 文件夹加入到环境变量中（上面命令中我们已经帮您加进去了）。&lt;/p&gt;
&lt;h3 id=&#34;12-conda-基本使用&#34;&gt;1.2 Conda 基本使用&lt;a class=&#34;headerlink&#34; href=&#34;#12-conda-基本使用&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;在 conda 安装配置好之后，就可以使用了。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;list&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 列出安装的软件包&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# conda所有软件名都是小写&lt;/span&gt;
conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;search&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;lt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ambigious&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;name&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 搜索需要安装的软件包，获取其完成名字&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;以搜索 &lt;code&gt;numpy&lt;/code&gt; 为例：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;search&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;numpy&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# * 表示对于版本的包已安装&lt;/span&gt;
Loading&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;channels:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# Name                       Version           Build  Channel&lt;/span&gt;
numpy&lt;span class=&#34;w&#34;&gt;                          &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.5.1&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;py26_1&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;free
numpy&lt;span class=&#34;w&#34;&gt;                          &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.5.1&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;py26_3&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;free
numpy&lt;span class=&#34;w&#34;&gt;                          &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.5.1&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;py26_4&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;free
numpy&lt;span class=&#34;w&#34;&gt;                          &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.5.1&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;py26_6&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;free
numpy&lt;span class=&#34;w&#34;&gt;                          &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.5.1&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;py26_ce0&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;free
numpy&lt;span class=&#34;w&#34;&gt;                          &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.5.1&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;py27_1&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;free
numpy&lt;span class=&#34;w&#34;&gt;                          &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.5.1&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;py27_3&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;free
numpy&lt;span class=&#34;w&#34;&gt;                          &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.5.1&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;py27_4&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;free
numpy&lt;span class=&#34;w&#34;&gt;                          &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.5.1&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;py27_6&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;free
numpy&lt;span class=&#34;w&#34;&gt;                          &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.5.1&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;py27_ce0&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;free

&lt;span class=&#34;c1&#34;&gt;# 安装包, -y 是同意安装，不写的话会弹出提示，需要再次确认&lt;/span&gt;
conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;lt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;name&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 安装软件包&lt;/span&gt;
conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;numpy&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.7.2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-y&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 安装特定版本的软件包&lt;/span&gt;
conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;remove&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;lt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;name&amp;gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 移除软件包&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;安装 R：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 具体见下面&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# 安装 R,及 80 多个常用的数据分析包, 包括 idplyr, shiny, ggplot2, tidyr, caret 和 nnet&lt;/span&gt;
conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-c&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;r&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;r-base&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4&lt;/span&gt;.0.2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;r-essentials
&lt;span class=&#34;c1&#34;&gt;# 安装单个包&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# conda install -c https://conda.binstar.org/bokeh ggplot&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;更新包：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 更新基础 conda，新版本 conda 使用起来更快&lt;/span&gt;
conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;update&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-n&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;base&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-c&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;defaults&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conda

conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;update&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;r-base
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;获取帮助信息：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-h&lt;span class=&#34;w&#34;&gt;                    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 查看 conda 可用的命令&lt;/span&gt;
conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-h&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 查看 install 子命令的帮助&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;只是这些命令就可以省去不少安装的麻烦了，但是如果软件没搜索到呢？&lt;/p&gt;
&lt;h3 id=&#34;13-conda-的-channel&#34;&gt;1.3 Conda 的 channel&lt;a class=&#34;headerlink&#34; href=&#34;#13-conda-的-channel&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Conda 默认的源访问速度有些慢，可以增加国内的源；另外还可以增加几个源，以便于安装更多的软件，尤其是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;bioconda 安装生信类工具；&lt;/li&gt;
&lt;li&gt;conda-forge 通道是 Conda 社区维护的包含很多不在默认通道里面的通用型软件；&lt;/li&gt;
&lt;li&gt;r 通道是向后兼容性通道，尤其是使用 R-3.3.1 版本时会用到，现在则不需要单独添加了。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;后加的通道优先级更高，因此一般用下面列出的顺序添加。清华镜像具体见 &lt;a href=&#34;https://mirrors.tuna.tsinghua.edu.cn/help/anaconda/&#34;&gt;《Anaconda 镜像使用帮助》&lt;/a&gt;，有时清华镜像也不稳定，不稳定时直接用官方镜像，早上下载速度还是好的。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;config&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--add&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;channels&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;r
conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;config&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--add&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;channels&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;defaults
conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;config&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--add&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;channels&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conda-forge
conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;config&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--add&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;channels&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bioconda
conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;config&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--add&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;channels&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/
&lt;span class=&#34;c1&#34;&gt;# Anocanda 清华镜像&lt;/span&gt;
conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;config&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--add&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;channels&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;config&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--add&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;channels&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;config&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--add&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;channels&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/cond-forge
&lt;span class=&#34;c1&#34;&gt;# 清华通道, 最高优先级&lt;/span&gt;
conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;config&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--add&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;channels&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/
conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;config&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--set&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;show_channel_urls&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;yes
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;注意通道的顺序是会影响 &lt;/strong&gt;&lt;code&gt;**solving environment**&lt;/code&gt;&lt;strong&gt; 和软件包下载的速度的。&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 显示已有的通道&lt;/span&gt;
conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;config&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--get&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;channels
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;conda 通道的配置文件一般在 &lt;code&gt;~/.condarc&lt;/code&gt; 里面，内容如下。全局控制 conda 的安装在&lt;code&gt;conda_path/.condarc&lt;/code&gt;，具体操作见：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://conda.io/docs/user-guide/configuration/admin-multi-user-install.html&#34;&gt;https://conda.io/docs/user-guide/configuration/admin-multi-user-install.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;channels:
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/cond-forge
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# Anocanda清华镜像&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bioconda
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conda-forge
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;r
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;14-创建不同的软件运行环境&#34;&gt;1.4 创建不同的软件运行环境&lt;a class=&#34;headerlink&#34; href=&#34;#14-创建不同的软件运行环境&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;这是 conda 最有特色的地方，可以通过创建不同的环境，同时运行不同软件的多个版本。&lt;/p&gt;
&lt;p&gt;新创建的软件环境的目录为 anaconda_path/envs/enrironment_name，具体见下面的 3 个例子。&lt;/p&gt;
&lt;h4 id=&#34;141-创建一个环境-transcriptome-安装常用转录组分析软件&#34;&gt;1.4.1 创建一个环境 &lt;code&gt;transcriptome&lt;/code&gt; 安装常用转录组分析软件&lt;a class=&#34;headerlink&#34; href=&#34;#141-创建一个环境-transcriptome-安装常用转录组分析软件&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 新建一个环境，命名为 transcriptome&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# 环境名字为 transcriptome&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# 环境中安装 samtools multiqc rseqc&lt;/span&gt;
conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;create&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-n&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;transcriptome&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;samtools&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;multiqc&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;rseqc

&lt;span class=&#34;c1&#34;&gt;# 如果还想继续安装&lt;/span&gt;
conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-n&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;transcriptome&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;fastqc&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;salmon&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;star&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;stringtie&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sra-tools&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;trimmomatic&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;rmats&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;rmats2sashimiplot

&lt;span class=&#34;c1&#34;&gt;# 启动新环境&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;activate&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;transcriptome
salmon&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-h

&lt;span class=&#34;c1&#34;&gt;# 默认安装到了 anaconda_path 下面的 envs/transcriptome 目录下（在屏幕输出也会有显示）&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# 这个目录下存在bin文件夹，一般使用全路径就可以调用，如下&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# anaconda_path/envs/transcriptome/bin/salmon -h    # 但有时会因为依赖关系而失败&lt;/span&gt;

&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;deactivate&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;transcriptome
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;不少软件不激活环境也可以使用全路径调用，比如 &lt;code&gt;anaconda_path/envs/transcriptome/bin/salmon&lt;/code&gt;  就可以直接使用 &lt;code&gt;salmon&lt;/code&gt;  程序，这样我们就可以根据前面的 PATH 介绍，我们把目录 &lt;code&gt;anaconda_path/envs/transcriptome/bin/&lt;/code&gt;  放入环境变量，就可以直接调用这个环境中的大部分程序了。&lt;/p&gt;
&lt;p&gt;新版的 conda 默认会使用 &lt;code&gt;conda activate transcriptome&lt;/code&gt;  来激活环境。&lt;/p&gt;
&lt;p&gt;初次使用时会弹出一个提示，需要运行 &lt;code&gt;conda init&lt;/code&gt; ：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;activate&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;qiime2-2020.6

CommandNotFoundError:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Your&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;shell&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;has&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;been&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;properly&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;configured&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;use&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;conda activate&amp;#39;&lt;/span&gt;.
To&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;initialize&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;your&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;shell,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;run

&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;init&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;lt;SHELL_NAME&amp;gt;

Currently&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;supported&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;shells&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;are:
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bash
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;fish
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tcsh
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;xonsh
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;zsh
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;powershell

See&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;conda init --help&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;more&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;information&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;and&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;options.

IMPORTANT:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;You&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;may&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;need&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;close&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;and&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;restart&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;your&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;shell&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;after&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;running&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;conda init&amp;#39;&lt;/span&gt;.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;不过，个人更喜欢用&lt;code&gt;source anaconda_path/bin/activate transcriptome&lt;/code&gt; 激活环境，用起来更灵活一些。而且如果是根用户安装时，**不建议把 **&lt;code&gt;**conda**&lt;/code&gt; &lt;strong&gt;环境默认加到环境变量中&lt;/strong&gt;，会引起不必要的系统冲突。可以给个用户自己使用是自己配置对应的环境变量。&lt;/p&gt;
&lt;p&gt;激活环境后，会看到命令行提示前多了一个环境名字，比如下面激活 &lt;code&gt;qiime2-2020.6&lt;/code&gt; 环境后的展示。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;ct@ehbio:~#&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/anaconda3/bin/activate&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;qiime2-2020.6
&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;qiime2-2020.6&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ct@ehbio:~#&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;which&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;python
/anaconda3/envs/qiime2-2020.6/bin/python
&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;qiime2-2020.6&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ct@ehbio:~#&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/anaconda3/bin/deactivate
DeprecationWarning:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;source deactivate&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;is&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;deprecated.&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Use&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;conda deactivate&amp;#39;&lt;/span&gt;.
ct@ehbio:~#&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;which&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;python
/usr/bin/python
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4 id=&#34;142-在环境-phylo-中安装-ete3&#34;&gt;1.4.2 在环境 phylo 中安装 ete3&lt;a class=&#34;headerlink&#34; href=&#34;#142-在环境-phylo-中安装-ete3&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;起因是使用官方的推荐命令安装时出了问题，py3.5 的包装到了 py2.7 环境下。解决办法，新建一个 &lt;code&gt;py2.7&lt;/code&gt; 的环境，然后安装。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 新建一个环境，命名为phylo，指定其内安装的python版本为2.7&lt;/span&gt;
conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;create&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-n&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;phylo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;python&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;.7

&lt;span class=&#34;c1&#34;&gt;# 在phylo环境中安装 ete3&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# ete3存在于2个通道中，官方推荐使用自己的通道，但没有成功&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# -n 指定安装环境  -c 指定下载通道&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# conda install -n phylo -c etetoolkit ete3 ete3_external_apps&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# bioconda通道里面也有ete3, 下面的安装未指定具体通道，&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# 将在前面设定的几个通道里面按先后顺序查找安装&lt;/span&gt;
conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-n&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;phylo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ete3&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ete3_external_apps

&lt;span class=&#34;c1&#34;&gt;# 默认安装到了anaconda_path下面的envs/phylo目录下（在屏幕输出也会有显示）&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# 这个目录下存在bin文件夹，一般使用全路径就可以调用，如下&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# anaconda_path/envs/phylo/bin/ete3 -h # 但有时会因为依赖关系而失败&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# 所以激活本次安装环境是比较不容易出问题的使用方式&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;activate&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;phylo

&lt;span class=&#34;c1&#34;&gt;# 在新环境里面执行命令操作&lt;/span&gt;
ete3&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-h
&lt;span class=&#34;c1&#34;&gt;# 其它操作&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# 退出新环境&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;deactivate&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;phylo
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4 id=&#34;143-创建-r-环境-reference1&#34;&gt;1.4.3 创建 R 环境 Reference1&lt;a class=&#34;headerlink&#34; href=&#34;#143-创建-r-环境-reference1&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# Create a new conda environment called r,并且在里面安装anaconda&lt;/span&gt;
conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;create&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-n&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;r&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;anaconda

&lt;span class=&#34;c1&#34;&gt;# Switch to r environment&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;activate&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;r

&lt;span class=&#34;c1&#34;&gt;# 在新环境里面安装R Installs R&lt;/span&gt;
conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-c&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;r&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;r

&lt;span class=&#34;c1&#34;&gt;# Install R kernel for IPython notebook&lt;/span&gt;
conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-c&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;r&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;r-irkernel

&lt;span class=&#34;c1&#34;&gt;# Install ggplot&lt;/span&gt;
conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-c&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://conda.binstar.org/bokeh&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ggplot

&lt;span class=&#34;c1&#34;&gt;# 最后退出新环境&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;deactivate&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;r
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;列出所有的环境：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;env&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;list
&lt;span class=&#34;c1&#34;&gt;# conda environments:&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;#&lt;/span&gt;
base&lt;span class=&#34;w&#34;&gt;                      &lt;/span&gt;*&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;/anaconda2
lefse&lt;span class=&#34;w&#34;&gt;                        &lt;/span&gt;/anaconda2/envs/lefse
metagenome_env&lt;span class=&#34;w&#34;&gt;               &lt;/span&gt;/anaconda2/envs/metagenome_env
metawrap&lt;span class=&#34;w&#34;&gt;                     &lt;/span&gt;/anaconda2/envs/metawrap
prokka_env&lt;span class=&#34;w&#34;&gt;                   &lt;/span&gt;/anaconda2/envs/prokka_env
py3&lt;span class=&#34;w&#34;&gt;                          &lt;/span&gt;/anaconda2/envs/py3
r-environment&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;/anaconda2/envs/r-environment
reseq&lt;span class=&#34;w&#34;&gt;                        &lt;/span&gt;/anaconda2/envs/reseq
sourmash_env&lt;span class=&#34;w&#34;&gt;                 &lt;/span&gt;/anaconda2/envs/sourmash_env
qiime2-2020.6&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;/anaconda3/envs/qiime2-2020.6
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;15-移除某个-conda-环境&#34;&gt;1.5 移除某个 Conda 环境&lt;a class=&#34;headerlink&#34; href=&#34;#15-移除某个-conda-环境&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;如果环境不需要了，或出了错，则可以移除。比如需要移除 &lt;code&gt;phylo&lt;/code&gt; 环境，执行 &lt;code&gt;conda remove -n phylo --all&lt;/code&gt;。&lt;/p&gt;
&lt;h3 id=&#34;16-conda-配置-r&#34;&gt;1.6 Conda 配置 R&lt;a class=&#34;headerlink&#34; href=&#34;#16-conda-配置-r&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;在添加了不同的源之后，有些源更新快，有些更新慢，经常会碰到版本不一的问题。而且软件版本的优先级，低于源的优先级。保险期间，先做下搜索，获得合适的版本号，然后再选择安装。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;search&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;r-essentials
Loading&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;channels:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# Name                   Version           Build  Channel&lt;/span&gt;
r-essentials&lt;span class=&#34;w&#34;&gt;                 &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.0&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;r3.2.1_0&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;r
r-essentials&lt;span class=&#34;w&#34;&gt;                 &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.0&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;r3.2.1_0a&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;r
r-essentials&lt;span class=&#34;w&#34;&gt;                 &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.1&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;r3.2.1_0&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;r
r-essentials&lt;span class=&#34;w&#34;&gt;                 &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.1&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;r3.2.2_0&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;r
r-essentials&lt;span class=&#34;w&#34;&gt;                 &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.1&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;r3.2.1_0a&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;r
r-essentials&lt;span class=&#34;w&#34;&gt;                 &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.1&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;r3.2.2_0a&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;r
r-essentials&lt;span class=&#34;w&#34;&gt;                 &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.1&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;r3.2.2_1&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;r
r-essentials&lt;span class=&#34;w&#34;&gt;                 &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.1&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;r3.2.2_1a&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;r
r-essentials&lt;span class=&#34;w&#34;&gt;                 &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.4&lt;span class=&#34;w&#34;&gt;               &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;r
r-essentials&lt;span class=&#34;w&#34;&gt;                 &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.4.1&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;r3.3.1_0&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;r
r-essentials&lt;span class=&#34;w&#34;&gt;                 &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.4.2&lt;span class=&#34;w&#34;&gt;             &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;r
r-essentials&lt;span class=&#34;w&#34;&gt;                 &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.4.2&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;r3.3.1_0&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;r
r-essentials&lt;span class=&#34;w&#34;&gt;                 &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.4.3&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;r3.3.1_0&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;r
r-essentials&lt;span class=&#34;w&#34;&gt;                 &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.5.0&lt;span class=&#34;w&#34;&gt;             &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;r
r-essentials&lt;span class=&#34;w&#34;&gt;                 &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.5.1&lt;span class=&#34;w&#34;&gt;             &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;r
r-essentials&lt;span class=&#34;w&#34;&gt;                 &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.5.2&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;r3.3.2_0&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;r
r-essentials&lt;span class=&#34;w&#34;&gt;                 &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.5.2&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;r3.4.1_0&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;r
r-essentials&lt;span class=&#34;w&#34;&gt;                 &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.6.0&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;r3.4.1_0&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;r
r-essentials&lt;span class=&#34;w&#34;&gt;                 &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.0&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;r3.2.1_0&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;defaults
r-essentials&lt;span class=&#34;w&#34;&gt;                 &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.0&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;r3.2.1_0a&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;defaults
r-essentials&lt;span class=&#34;w&#34;&gt;                 &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.1&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;r3.2.1_0&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;defaults
r-essentials&lt;span class=&#34;w&#34;&gt;                 &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.1&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;r3.2.2_0&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;defaults
r-essentials&lt;span class=&#34;w&#34;&gt;                 &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.1&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;r3.2.1_0a&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;defaults
r-essentials&lt;span class=&#34;w&#34;&gt;                 &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.1&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;r3.2.2_0a&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;defaults
r-essentials&lt;span class=&#34;w&#34;&gt;                 &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.1&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;r3.2.2_1&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;defaults
r-essentials&lt;span class=&#34;w&#34;&gt;                 &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.1&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;r3.2.2_1a&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;defaults
r-essentials&lt;span class=&#34;w&#34;&gt;                 &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.4&lt;span class=&#34;w&#34;&gt;               &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;defaults
r-essentials&lt;span class=&#34;w&#34;&gt;                 &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.4.1&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;r3.3.1_0&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;defaults
r-essentials&lt;span class=&#34;w&#34;&gt;                 &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.4.2&lt;span class=&#34;w&#34;&gt;             &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;defaults
r-essentials&lt;span class=&#34;w&#34;&gt;                 &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.4.2&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;r3.3.1_0&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;defaults
r-essentials&lt;span class=&#34;w&#34;&gt;                 &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.4.3&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;r3.3.1_0&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;defaults
r-essentials&lt;span class=&#34;w&#34;&gt;                 &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.5.0&lt;span class=&#34;w&#34;&gt;             &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;defaults
r-essentials&lt;span class=&#34;w&#34;&gt;                 &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.5.1&lt;span class=&#34;w&#34;&gt;             &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;defaults
r-essentials&lt;span class=&#34;w&#34;&gt;                 &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.5.2&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;r3.3.2_0&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;defaults
r-essentials&lt;span class=&#34;w&#34;&gt;                 &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.5.2&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;r3.4.1_0&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;defaults
r-essentials&lt;span class=&#34;w&#34;&gt;                 &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.6.0&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;r3.4.1_0&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;defaults
r-essentials&lt;span class=&#34;w&#34;&gt;                 &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.5.2&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;r3.3.2_0&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;conda-forge
r-essentials&lt;span class=&#34;w&#34;&gt;                 &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.5.2&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;r3.3.2_0&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;从上面可以看到清华的源版本同步于&lt;code&gt;conda-forge&lt;/code&gt;, 都比较老，还是指定 &lt;code&gt;r&lt;/code&gt; 通道安装。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-c&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;r&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-n&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;r&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;r-essentials&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.6.0
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;R 会安装于 &lt;code&gt;conda_path/envs/r/bin&lt;/code&gt; 中，软链到位于环境变量的目录中即可正常使用。这就是环境变量的活学活用。&lt;/p&gt;
&lt;h3 id=&#34;17-conda-环境简化运行&#34;&gt;1.7 Conda 环境简化运行&lt;a class=&#34;headerlink&#34; href=&#34;#17-conda-环境简化运行&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;为了方便不同环境里面程序的运行，我写了一个 shell 脚本 (&lt;code&gt;conda_env_run.sh&lt;/code&gt;)，具体运行如下：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# -c: 表示实际需要运行的命令&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# -e: 表示需要启动的软件环境，也就是上面conda create建立的环境&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# -b：一般不需要指定，如果conda没在环境变量中需要给出conda的安装路径&lt;/span&gt;
conda_env_run.sh&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-c&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;ete3 -h mod&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-e&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;phylo
conda_env_run.sh&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-c&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;bwa mem -h&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-e&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;aligner&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-b&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;/usr/local/anaconda2/bin&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;code&gt;conda_env_run.sh&lt;/code&gt; 内容如下：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;ch&#34;&gt;#!/bin/bash&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;#set -x&lt;/span&gt;

usage&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
cat&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;lt;&amp;lt;EOF&lt;/span&gt;
&lt;span class=&#34;s&#34;&gt;${txtcyn}&lt;/span&gt;

&lt;span class=&#34;s&#34;&gt;***CREATED BY Chen Tong (chentong_biology@163.com)***&lt;/span&gt;

&lt;span class=&#34;s&#34;&gt;Usage:&lt;/span&gt;

&lt;span class=&#34;s&#34;&gt;$0 options${txtrst}&lt;/span&gt;

&lt;span class=&#34;s&#34;&gt;${bldblu}Function${txtrst}:&lt;/span&gt;

&lt;span class=&#34;s&#34;&gt;This is designed to run conda program in given environment.&lt;/span&gt;
&lt;span class=&#34;s&#34;&gt;It will automatically activate the environment, run the program and&lt;/span&gt;
&lt;span class=&#34;s&#34;&gt;deactivate the environment.&lt;/span&gt;

&lt;span class=&#34;s&#34;&gt;Thress commands from conda, &amp;#39;activate&amp;#39;, &amp;#39;conda&amp;#39;, &amp;#39;deactivate&amp;#39; must&lt;/span&gt;
&lt;span class=&#34;s&#34;&gt;be in PATH or you should spcify &amp;lt;-b&amp;gt; parameter.&lt;/span&gt;

&lt;span class=&#34;s&#34;&gt;${txtbld}OPTIONS${txtrst}:&lt;/span&gt;
&lt;span class=&#34;s&#34;&gt;    -c    Full command to be run ${bldred}[NECESSARY]${txtrst}&lt;/span&gt;
&lt;span class=&#34;s&#34;&gt;    -e    Environment name${bldred}[NECESSARY]${txtrst}&lt;/span&gt;
&lt;span class=&#34;s&#34;&gt;    -b    Conda path${bldred}[NECESSARY]${txtrst}&lt;/span&gt;
&lt;span class=&#34;s&#34;&gt;EOF&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;

&lt;span class=&#34;nv&#34;&gt;command_cmd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;environment&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;conda_path&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;

&lt;span class=&#34;k&#34;&gt;while&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;getopts&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;hc:e:b:&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;OPTION
&lt;span class=&#34;k&#34;&gt;do&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;case&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$OPTION&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;h&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;Help mesage&amp;quot;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;usage
&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;exit&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;c&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;command_cmd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$OPTARG&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;e&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;environment&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$OPTARG&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;b&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;conda_path&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$OPTARG&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;?&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;usage
&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;Unknown parameters&amp;quot;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;exit&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;esac&lt;/span&gt;
&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;

&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-z&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;environment&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&amp;gt;&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;Please give command and environment.&amp;quot;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;usage
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;exit&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
&lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;

&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;!&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-z&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;conda_path&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;conda_path&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;:&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;PATH&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;
&lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;

&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;activate&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;environment&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;
&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;command_cmd&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;deactivate&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;environment&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;18-conda-环境备份&#34;&gt;1.8 Conda 环境备份&lt;a class=&#34;headerlink&#34; href=&#34;#18-conda-环境备份&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;有的时候会出现装一个新包，装着装着就把当前环境搞装崩了的情况，所以备份一个环境还是必要的，&lt;code&gt;conda create -n python35copy --clone python35&lt;/code&gt;，把 &lt;code&gt;python35&lt;/code&gt; 备份为 &lt;code&gt;python35copy&lt;/code&gt;。&lt;/p&gt;
&lt;h3 id=&#34;19-conda-环境导出和导入&#34;&gt;1.9 Conda 环境导出和导入&lt;a class=&#34;headerlink&#34; href=&#34;#19-conda-环境导出和导入&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;做培训时需要给参加培训的老师提供配置环境的脚本，之前都是提供一个 &lt;code&gt;Bash&lt;/code&gt; 文件全部运行下来就可以完成整个环境的配置，更简单的方式是可以导出环境，自己配置时再导入就好了。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 假设我们有一个环境叫 ehbio，可以导出为一个yml文件&lt;/span&gt;
conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;env&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ehbio_env.yml&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--name&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ehbio

&lt;span class=&#34;c1&#34;&gt;# 然后换一台电脑，就可以完全重现这个环境了&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# 这么做的另一个优势是yml中明确列出了软件的版本，&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# 使用 conda solving environment时速度会快很多&lt;/span&gt;
conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;env&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;create&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-f&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ehbio_env.yml
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;110-core-dump-errorsegment-fault段错误&#34;&gt;1.10 core dump error/Segment fault/段错误&lt;a class=&#34;headerlink&#34; href=&#34;#110-core-dump-errorsegment-fault段错误&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;如果 conda 在软件安装中出现 &amp;ldquo;core dump error/Segment fault/段错误&amp;rdquo; 怎么办？&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 清空缓存&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# https://github.com/conda/conda/issues/7815&lt;/span&gt;
conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;clean&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-a
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&amp;lsquo;&lt;/p&gt;
&lt;h3 id=&#34;111-conda-为什么越来越慢&#34;&gt;1.11 Conda 为什么越来越慢？&lt;a class=&#34;headerlink&#34; href=&#34;#111-conda-为什么越来越慢&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Conda 中包含的软件越来越多，而且软件的不同版本都保留了下来，软件的索引文件越来越大，安装一个新软件时搜索满足环境中所有软件依赖的软件的搜索空间也会越来越大，导致 &lt;code&gt;solving environment&lt;/code&gt; 越来越慢。&lt;/p&gt;
&lt;h3 id=&#34;112-conda-是如何工作的&#34;&gt;1.12 Conda 是如何工作的&lt;a class=&#34;headerlink&#34; href=&#34;#112-conda-是如何工作的&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;从设定的通道（channel）处下载通道中所有软件的索引信息 (&lt;code&gt;repodata.json&lt;/code&gt;) (&lt;em&gt;Collecting package metadata (repodata.json)&lt;/em&gt;)。&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nt&#34;&gt;&amp;quot;packages&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;quot;moto-1.3.7-py_0.tar.bz2&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;quot;build&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;py_0&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;quot;build_number&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;quot;depends&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;aws-xray-sdk !=0.96,&amp;gt;=0.93&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;backports.tempfile&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;boto &amp;gt;=2.36.0&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;boto3 &amp;gt;=1.6.15&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;botocore &amp;gt;=1.12.13&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;cookies&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;dicttoxml&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;docker-py&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;flask&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;jinja2 &amp;gt;=2.7.3&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;jsondiff 1.1.1.*&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;mock&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;pyaml&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;python&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;python-dateutil&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;python-jose &amp;lt;3.0.0&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;pytz&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;requests &amp;gt;=2.5&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;responses &amp;gt;=0.9.0&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;six&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;werkzeug&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;xmltodict&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;quot;license&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;Apache-2.0&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;quot;md5&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;17b424658cd07e678b5feebdc932eb52&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;quot;name&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;moto&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;quot;sha256&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;5924666f8c1758472dc4c3d22b270b46cd1c4b66c50a9ba50d5c636d2237bdd1&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;quot;size&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;399973&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;quot;subdir&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;noarch&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;quot;timestamp&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1552438392680&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;quot;version&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;1.3.7&amp;quot;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;span class=&#34;err&#34;&gt;~~&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;解析 &lt;code&gt;repodata&lt;/code&gt; 中的信息获取所有依赖的包的信息。&lt;/li&gt;
&lt;li&gt;采用 &lt;code&gt;SAT-solver&lt;/code&gt; 算法决定需要下载包的哪个版本和它们的安装顺序。&lt;/li&gt;
&lt;li&gt;下载并安装包。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;113-conda-哪一步慢&#34;&gt;1.13 Conda 哪一步慢？&lt;a class=&#34;headerlink&#34; href=&#34;#113-conda-哪一步慢&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;主要是第 3 步，确定待安装包的依赖包之间的兼容和已安装软件之间的兼容，获得需要下载的包和对应版本。&lt;/p&gt;
&lt;h3 id=&#34;114-如何提速-conda&#34;&gt;1.14 如何提速 Conda&lt;a class=&#34;headerlink&#34; href=&#34;#114-如何提速-conda&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;采用最新版的&lt;code&gt;conda&lt;/code&gt; （Conda 4.7 相比 Conda 4.6 提速 **3.5 **倍，Conda 4.8 应该不会比 4.7 慢）。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;安装时指定版本减少搜索空间 &lt;code&gt;conda install python=3.7.4&lt;/code&gt; 。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;安装 R 包时指定 R 的版本也会极大减小搜索空间（R 包因其数目众多，也是生物类软件依赖解析较慢的原因之一），如 &lt;code&gt;conda install r-base=4.0.2 r-ggplot2=3.3.2&lt;/code&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;采用 &lt;code&gt;mamba&lt;/code&gt; 加速软件依赖解析 [mamba 采用 &lt;code&gt;c++&lt;/code&gt; 重写了部分解析过程，这个提速效果是很明显的]（安装好 &lt;code&gt;mamba&lt;/code&gt; 后就可以用 &lt;code&gt;mamba&lt;/code&gt; 替换 &lt;code&gt;conda&lt;/code&gt; 进行安装了）。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mamba&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-c&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conda-forge
mamba&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;python&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;.7.4
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;默认 conda 解析软件依赖时优先考虑允许的最高版本，设置通道优先级权限高于软件版本新旧后，conda 会能更快的解决依赖关系，避免 &lt;code&gt;defaults&lt;/code&gt; 和 &lt;code&gt;conda-forge&lt;/code&gt; 通道的奇怪组合导致软件依赖解析迟迟不能将结束的问题： &lt;code&gt;conda config --set channel_priority strict&lt;/code&gt; （这个命令只需要运行一次）。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;创建一个新环境（ &lt;code&gt;conda env create -n env_name&lt;/code&gt;）再安装软件，这样就不用考虑与已有的软件的兼容问题了，也可以大大降低搜索空间和提高解析软件依赖的速度。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;如果安装的软件提供了 &lt;code&gt;environment.yaml&lt;/code&gt; 那么用起来，文件中对应的软件版本都很明确，解析依赖关系时更快。也可以按前面提供的方式导出一个已经配置好的环境的 &lt;code&gt;yaml&lt;/code&gt; 文件，在其它电脑配置时直接读取。(具体导出方式见《&lt;a href=&#34;https://mp.weixin.qq.com/s?__biz=MzI5MTcwNjA4NQ==&amp;amp;mid=2247489108&amp;amp;idx=1&amp;amp;sn=0d0ec3dc931271a509fed07cb0efcfd7&amp;amp;scene=21#wechat_redirect&#34;&gt;Bioconda 软件安装神器：多版本并存、环境复制、环境导出&lt;/a&gt;》。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;channels:
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;qiime2/label/r2020.6
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conda-forge
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bioconda
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;defaults
dependencies:
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;_libgcc_mutex&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;.1
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;_openmp_mutex&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4&lt;/span&gt;.5
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;_r-mutex&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.0.1
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;alsa-lib&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.1.5
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;arb-bio-tools&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;6&lt;/span&gt;.0.6
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;attrs&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;19&lt;/span&gt;.3.0
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;backcall&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;.2.0
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;bibtexparser&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.1.0
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;binutils_impl_linux-64&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;.34
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;binutils_linux-64&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;.34
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bioconductor-biobase&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;.42.0
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bioconductor-biocgenerics&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;.28.0
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bioconductor-biocparallel&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.16.6
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bioconductor-biostrings&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;.50.2
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bioconductor-dada2&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.10.0
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;添加 bioconda 通道时，注意顺序，给予 &lt;code&gt;conda-forge&lt;/code&gt; 最高优先级，其次是 &lt;code&gt;bioconda&lt;/code&gt;。如果之前已经添加好了通道，自己在 &lt;code&gt;~/.condarc&lt;/code&gt; 中调整顺序。&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;config&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--add&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;channels&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;defaults
conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;config&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--add&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;channels&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bioconda
conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;config&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--add&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;channels&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conda-forge
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;综合以上组合，之前尝试多次都没安装好的工具，直接搞定。&lt;/p&gt;
&lt;h3 id=&#34;115-下载提速&#34;&gt;1.15 下载提速&lt;a class=&#34;headerlink&#34; href=&#34;#115-下载提速&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;国内镜像，见《&lt;a href=&#34;https://mp.weixin.qq.com/s?__biz=MzI5MTcwNjA4NQ==&amp;amp;mid=2247491983&amp;amp;idx=1&amp;amp;sn=2052e7a038f2db52eb282b88495a7dfd&amp;amp;scene=21#wechat_redirect&#34;&gt;软件安装不上，可能是网速慢！Conda/R/pip/brew 等国内镜像大全拿走不谢\~\~&lt;/a&gt;》。&lt;/li&gt;
&lt;li&gt;换个网或从朋友处拷贝已经下载好的压缩包一般在&lt;code&gt;anaconda_root_dir/pkgs&lt;/code&gt;下，拷贝放在自己的&lt;code&gt;anaconda3/pkgs&lt;/code&gt; 下面，再次下载时系统会识别已经下载好的包而跳过（并不总是有效）。&lt;/li&gt;
&lt;li&gt;获取所有相关包的名字，从朋友处拷贝下载好的安装包。如果拷贝过来未能自动识别，可手动安装 &lt;code&gt;conda install --offline local_path&lt;/code&gt;。&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;mamba&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;r-base&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4&lt;/span&gt;.0.2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;r-ggplot2&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;.3.2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--dry-run&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;gt;package_solving_result

&lt;span class=&#34;c1&#34;&gt;# _anaconda_depends  pkgs/main/linux-64::_anaconda_depends-2020.07-py37_0&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# _r-mutex           conda-forge/noarch::_r-mutex-1.0.1-anacondar_1&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# binutils_impl_lin~ pkgs/main/linux-64::binutils_impl_linux-64-2.33.1-he6710b0_7&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# binutils_linux-64  conda-forge/linux-64::binutils_linux-64-2.33.1-h9595d00_17&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# brotlipy           conda-forge/linux-64::brotlipy-0.7.0-py37h516909a_1000&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# bwidget            conda-forge/linux-64::bwidget-1.9.14-0&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# gcc_impl_linux-64  pkgs/main/linux-64::gcc_impl_linux-64-7.3.0-habb00fd_1&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# gcc_linux-64       conda-forge/linux-64::gcc_linux-64-7.3.0-h553295d_17&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# 获取所有包的名字&lt;/span&gt;
grep&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;::&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;a&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sed&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;s/.*:://&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sed&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;s/$/.tar.bz2/&amp;#39;&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# 手动安装&lt;/span&gt;
&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;i&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;grep&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;::&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;a&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sed&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;s/.*:://&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sed&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;s/$/.tar.bz2/&amp;#39;&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;do&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--offline&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/anaconda3/pkgs/&lt;span class=&#34;nv&#34;&gt;$i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;116-使用-conda-pack-直接从已经安装好的地方拷贝一份同一操作系统&#34;&gt;1.16 使用 conda-pack 直接从已经安装好的地方拷贝一份(同一操作系统)&lt;a class=&#34;headerlink&#34; href=&#34;#116-使用-conda-pack-直接从已经安装好的地方拷贝一份同一操作系统&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;安装 &lt;code&gt;conda-pack&lt;/code&gt;：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-c&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conda-forge&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conda-pack
&lt;span class=&#34;c1&#34;&gt;# pip install git+https://github.com/conda/conda-pack.git&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;打包已经安装好的环境：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pack&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-n&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;my_env_name&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-o&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;my_env_name.tar.gz
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;拷贝打包好的环境&lt;code&gt;my_env_name.tar.gz&lt;/code&gt;到目标机器，并解压到任何目录，一般推荐放到&lt;code&gt;envs&lt;/code&gt;目录下( &lt;code&gt;anaconda_root/envs&lt;/code&gt;)。(注意：_anaconda_root _改为自己的 conda 安装路径。)&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 解压打包好的环境&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# 默认是全都解压到当前目录，场面很壮观&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# -C 一定要指定&lt;/span&gt;
mkdir&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-p&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;anaconda_root/envs/my_env
tar&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-xzf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;my_env.tar.gz&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-C&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;anaconda_root/envs/my_env

&lt;span class=&#34;c1&#34;&gt;# 激活环境&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;my_env/bin/activate

&lt;span class=&#34;c1&#34;&gt;# Unpack&lt;/span&gt;
conda-unpack

&lt;span class=&#34;c1&#34;&gt;# 至此环境就完全拷贝过来了&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;deactivate
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h1 id=&#34;2-conda-常见异常与解决&#34;&gt;2. Conda 常见异常与解决&lt;a class=&#34;headerlink&#34; href=&#34;#2-conda-常见异常与解决&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id=&#34;21-jsondecoderjsondecodeerror&#34;&gt;2.1 json.decoder.JSONDecodeError&lt;a class=&#34;headerlink&#34; href=&#34;#21-jsondecoderjsondecodeerror&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;conda 在安装或者导入某些包/环境过程中出现 &lt;code&gt;json.decoder.JSONDecodeError: Expecting value: line 478921 column 32 (char 14428018)&lt;/code&gt; 异常，具体可以参考 &lt;a href=&#34;https://github.com/conda/conda/issues/9590&#34;&gt;https://github.com/conda/conda/issues/9590&lt;/a&gt; 的解决方法：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;方法一：删除 \~/.conda 和 \~/.condarc。&lt;/li&gt;
&lt;li&gt;方法二：编辑 \~/.condarc，把其他的 channels 删除，只保留 &amp;lsquo;defaults&amp;rsquo; channel。&lt;/li&gt;
&lt;li&gt;方法三：使用 &lt;strong&gt;conda clean -i&lt;/strong&gt; 命令移除 index cache。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;个人在重装导出的环境文件时遇到类似的问题（conda/4.10.1，json.decoder.JSONDecodeError: Expecting value: line 478921 column 32 (char 14428018)），发现单纯的方法一，或者方法二、方法三都不能很好的解决问题。需要三个方法加起来才可以。&lt;/p&gt;
&lt;p&gt;个人用的是清华大学的镜像，除了上面提到的 &lt;strong&gt;json.decoder.JSONDecodeError&lt;/strong&gt; 以外，在安装过程中还引发了 **ReadTimeoutError: HTTPSConnectionPool(host=&amp;rsquo;pypi.tuna.tsinghua.edu.cn&amp;rsquo;, port=443): Read timed out **异常，后来把默认的 pip 镜像换成阿里云的源，问题才得以解决。&lt;/p&gt;
&lt;h2 id=&#34;22-condahttperror-http-000-connection-failed&#34;&gt;2.2 CondaHTTPError: HTTP 000 CONNECTION FAILED&lt;a class=&#34;headerlink&#34; href=&#34;#22-condahttperror-http-000-connection-failed&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;通过 conda update conda 的方式把 base 环境的 conda 升级到 4.10.3 后，使用 conda create/install 等命令安装软件时发现一直提示 &lt;strong&gt;CondaHTTPError: HTTP 000 CONNECTION FAILED&lt;/strong&gt;！
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fnu_mYP_TGKymTOvRVoqRp0rzh_e.png&#34; /&gt;
在 &lt;a href=&#34;https://github.com/conda/conda/issues/9746&#34;&gt;https://github.com/conda/conda/issues/9746&lt;/a&gt; 上有这个问题的一些讨论和解决方法，个人尝试过都没办法解决！最后，重装 conda 后，问题解决。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# If you want to update an existing installation, use the -u option.&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sh&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/Bioinfo/Pipeline/src/pkgs/Miniconda3-latest-Linux-x86_64.sh&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-u
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h1 id=&#34;3-conda-加速器之-mamba-操作&#34;&gt;3. Conda 加速器之 Mamba 操作&lt;a class=&#34;headerlink&#34; href=&#34;#3-conda-加速器之-mamba-操作&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;几年前，生物信息数据分析，一个最大的问题即生物信息学软件安装。但现在绝大多数安装问题都可以通过使用 conda，一键解决。如果要挑 conda 的毛病，那么就是速度不够快。于是就有了 Mamba。&lt;/p&gt;
&lt;p&gt;Mamba 主页：&lt;a href=&#34;https://quantstack.net/mamba.html&#34;&gt;https://quantstack.net/mamba.html&lt;/a&gt;
Mamba Github 地址：&lt;a href=&#34;https://github.com/QuantStack/mamba&#34;&gt;https://github.com/QuantStack/mamba&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Mamba 是在 C++ 中对 conda 的重新实现,可以认为是更高级的 conda。有以下特点：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;使用多线程并行下载数据和 package，实现更高效的安装。&lt;/li&gt;
&lt;li&gt;libsolv 能够更快地解决依赖关系，这是一个最先进的库，用于 Red Hat、Fedora 和 OpenSUSE 的 RPM 包管理器中。&lt;/li&gt;
&lt;li&gt;mamba 的核心部分是用 C++ 实现的，以获得最大的效率。&lt;/li&gt;
&lt;li&gt;当我们使用 conda 进行安装时，如果速度太慢，可以改用 mamba 进行安装。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;31-安装与更新&#34;&gt;3.1 安装与更新&lt;a class=&#34;headerlink&#34; href=&#34;#31-安装与更新&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;mamba 的官方文档 (&lt;a href=&#34;https://mamba.readthedocs.io/en/latest/installation.html&#34;&gt;https://mamba.readthedocs.io/en/latest/installation.html&lt;/a&gt;) 中提供了 2 中得安装方式。&lt;/p&gt;
&lt;h3 id=&#34;fresh-install&#34;&gt;Fresh install&lt;a class=&#34;headerlink&#34; href=&#34;#fresh-install&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;官方强烈建议用户从 Mambaforge 开始，这是 conda-forge 社区的一个社区项目。
Mambaforge 预设了流行的 conda-forge 频道，但你可以修改配置以使用你喜欢的任何频道。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;We strongly recommend to start from Mambaforge, a community project of the conda-forge community.&lt;/p&gt;
&lt;p&gt;Mambaforge comes with the popular conda-forge channel preconfigured, but you can modify the configuration to use any channel you like.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;curl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-L&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-O&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;https://github.com/conda-forge/miniforge/releases/latest/download/Mambaforge-&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;uname&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;uname&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-m&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;.sh&amp;quot;&lt;/span&gt;
bash&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Mambaforge-&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;uname&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;-&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;uname&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-m&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;.sh
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;或者：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;wget&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;https://github.com/conda-forge/miniforge/releases/latest/download/Mambaforge-&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;uname&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;uname&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-m&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;.sh&amp;quot;&lt;/span&gt;
bash&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Mambaforge-&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;uname&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;-&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;uname&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-m&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;.sh
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;existing-conda-install&#34;&gt;Existing conda install&lt;a class=&#34;headerlink&#34; href=&#34;#existing-conda-install&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;官网并不推荐基于已有 conda 的方式去安装 mamba。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;This way of installing Mamba is &lt;strong&gt;not recommended&lt;/strong&gt;. We strongly recommend to use the Mambaforge method (see above).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 安装&lt;/span&gt;
conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mamba&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-n&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;base&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-c&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conda-forge

&lt;span class=&#34;c1&#34;&gt;# 更新&lt;/span&gt;
mamba&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;update&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mamba&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-n&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;base&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-c&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conda-forge
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;参考：&lt;a href=&#34;https://stackoverflow.com/questions/74862017/mamba-upgrade-to-1-x&#34;&gt;mamba upgrade to 1.x&lt;/a&gt; - stackoverflow&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;32-mamba-的使用&#34;&gt;3.2 mamba 的使用&lt;a class=&#34;headerlink&#34; href=&#34;#32-mamba-的使用&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;安装完成之后，当你运行 &lt;strong&gt;mamba -V&lt;/strong&gt; 查看其版本时会发现返回的是 Conda 的版本信息，这是因为 Mamba 的本质是对 Conda 功能的覆盖，因此我们在使用 Mamba 时其实只要将原有的 Conda 语句中的 &lt;strong&gt;conda&lt;/strong&gt; 替换为 &lt;strong&gt;mamba&lt;/strong&gt; 即可，譬如我们常用的 &lt;strong&gt;conda clean &amp;ndash;all&lt;/strong&gt;，即清空本地缓存安装包：
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FsE1SM3Q6qwaLNKQxBezL7i0mTo4.png&#34; /&gt;
很有意思的是 Mamba 在执行命令时会先打印出 logo 等信息，对应其名称&lt;strong&gt;黑曼巴&lt;/strong&gt;\~&lt;/p&gt;
&lt;p&gt;当然 Mamba 并不是重写了 Conda 所有的功能，只是针对一些 Conda 低效的功能进行重写，并添加了一些实用的新功能，接下来我们来对这些知识进行学习。&lt;/p&gt;
&lt;h3 id=&#34;1-加速下载&#34;&gt;1. 加速下载&lt;a class=&#34;headerlink&#34; href=&#34;#1-加速下载&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;作为 Mamba 最核心的功能，Mamba 对 conda install 语句进行并行化改造，达到加速下载过程的目的。&lt;/p&gt;
&lt;p&gt;以下载 qgis 为例，使用 mamba install -c conda-forge qgis -y 代替以前的安装方式，执行命令后，Mamba 会在短暂获取资源下载链接之后，以并行的方式按计划同时下载多个资源，比老方法要快很多。
&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FobJkNs5kfza8egEv0RuIfFAIBn5.webp&#34; /&gt;
对于其他涉及下载资源的命令譬如 conda update 同样适用，你可以自行体验。&lt;/p&gt;
&lt;h3 id=&#34;2-查看指定库所有可用版本&#34;&gt;2. 查看指定库所有可用版本&lt;a class=&#34;headerlink&#34; href=&#34;#2-查看指定库所有可用版本&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;这是 Mamba 异于 Conda 的新功能，使用 mamba repoquery search 库名可以查看指定库全部所有可用版本，以 pandas 为例：
&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FvkpzTRITOKIYb5uTVBemvVBRqNh.webp&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;3-查看依赖关系&#34;&gt;3. 查看依赖关系&lt;a class=&#34;headerlink&#34; href=&#34;#3-查看依赖关系&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Mamba 中还提供了 &lt;strong&gt;mamba repoquery depends&lt;/strong&gt; 和 &lt;strong&gt;mamba repoquery whoneeds&lt;/strong&gt;，分别用于查看指定库依赖哪些库，以及指定库被哪些库依赖，如官方文档的示例：
&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FrPmq37pTOWBCl11ShGDJKgfPO61.webp&#34; /&gt;&lt;/p&gt;
&lt;h1 id=&#34;参考资料&#34;&gt;参考资料&lt;a class=&#34;headerlink&#34; href=&#34;#参考资料&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;费弗里，《&lt;a href=&#34;https://mp.weixin.qq.com/s/SGhKcD9zakXOInkZSmKX9A&#34;&gt;Conda 太慢？试试这个加速工具！&lt;/a&gt;》，Python 大数据分析&lt;/li&gt;
&lt;li&gt;郑淇，《&lt;a href=&#34;https://mp.weixin.qq.com/s/VjO5NetmKmitc3XLiPlGHg&#34;&gt;生信软件安装神器 Mamba [conda 加速器\~]&lt;/a&gt;》，生信药丸&lt;/li&gt;
&lt;li&gt;kaopubear，《&lt;a href=&#34;https://mp.weixin.qq.com/s?src=11&amp;amp;timestamp=1635143243&amp;amp;ver=3395&amp;amp;signature=ypaexvxugYHmjkpu5r75rSvlbB9IEcfob7zb1q3uf*MOF3P9IcLsy7q3m-QahNZbz8UoshDo5EMzoXJhRvFpTHFjUjjoYDExkR*A0FgEiMpQ*fNLoyUq8A3q58T04HX8&amp;amp;new=1&#34;&gt;极速安装软件的升级版 conda&lt;/a&gt;》，生信媛&lt;/li&gt;
&lt;/ol&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E8%99%9A%E6%8B%9F%E7%8E%AF%E5%A2%83/2020-11-27-conda-tutorial-for-biosoft/</link>
      <pubDate>Fri, 27 Nov 2020 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E8%99%9A%E6%8B%9F%E7%8E%AF%E5%A2%83/2020-11-27-conda-tutorial-for-biosoft/</guid>
      
    </item>
    
    <item>
      <title>腾讯云 cloudbase 云开发使用笔记</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2020-10-21&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2020-10-21T00:00:00&#39;&gt;2020-10-21&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-06-30&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-06-30T09:36:01&#39;&gt;2021-06-30&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;产品概述&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;云开发（Tencent CloudBase，TCB）是腾讯云提供的云原生一体化开发环境和工具平台，为开发者提供高可用、自动弹性扩缩的后端云服务，包含计算、存储、托管等 serverless 化能力，可用于云端一体化开发多种端应用（小程序、公众号、Web 应用、Flutter 客户端等），帮助开发者统一构建和管理后端服务和云资源，避免了应用开发过程中繁琐的服务器搭建及运维，开发者可以专注于业务逻辑的实现，开发门槛更低，效率更高。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;使用场景&#34;&gt;使用场景&lt;a class=&#34;headerlink&#34; href=&#34;#使用场景&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;您可以使用云开发，轻松开发多种端应用，包括小程序、公众号、Web 应用、Flutter 客户端等：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;构建属于您的博客：将您的静态网站文件部署到云开发静态托管中，您的用户可以随时随地通过域名访问您的博客。&lt;/li&gt;
&lt;li&gt;分析海量图片：将您的照片存储在云开发云存储中，使用图像标签扩展能力，轻松完成图片标签识别，帮您实现相册分类。&lt;/li&gt;
&lt;li&gt;构建运营管理后台：使用 CMS 扩展功能，帮您完成文章编辑和发布、素材管理等数据和内容的管理，省去您手动线上修改数据库数据或者开发管理后台的麻烦。&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img alt=&#34;腾讯云静态网站托管.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FntONRJ0rSf3jLzL0FUwISnD_-tP.png&#34; /&gt;
腾讯云最近在官网上线了一个静态网站托管的产品，结合腾讯云提供的 CloudBase CLI 工具，可以实现的第三方的任意一个服务器快速持续部署自己的 &lt;a href=&#34;https://cloud.tencent.com/document/product/1210/43365&#34;&gt;Hexo&lt;/a&gt;、&lt;a href=&#34;https://cloud.tencent.com/document/product/1210/43388&#34;&gt;VuePress&lt;/a&gt;、&lt;a href=&#34;https://cloud.tencent.com/document/product/1210/43389&#34;&gt;Hugo&lt;/a&gt;。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 安装 cloudbase cli&lt;/span&gt;
npm&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-g&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;@cloudbase/cli

&lt;span class=&#34;c1&#34;&gt;# 执行登录命令，登录腾讯云开发 CLI&lt;/span&gt;
tcb&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;login&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--apiKeyId&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;xxxxx&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--apiKey&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;xxxxx

&lt;span class=&#34;c1&#34;&gt;# 在 hugo-site 中将 public 目录中的文件给部署上去, EnvID 替换为在腾讯云中已经创建好的环境 ID&lt;/span&gt;
cloudbase&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;hosting:deploy&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;./public&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-e&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;EnvID

&lt;span class=&#34;c1&#34;&gt;# 打开腾讯云 云开发控制台，单击左侧菜单栏中的【静态网站托管】&amp;gt;【设置】，进入设置页面，&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# 可以找到默认的域名，单击域名，就可以看到您刚部署的 Hugo。&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;静态网站托管.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FpbDxt-TXvDHCrVR3ioH45KEOsG1.png&#34; /&gt;
&lt;img alt=&#34;cloudbase-deploy.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fqq-2_UYPAbz_tUPDyJpgyenrAYJ.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;腾讯云静态网站下 cloudbase CLI 详细操作：
&lt;a href=&#34;https://cloud.tencent.com/document/product/876/41543&#34;&gt;403 Forbidden&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;阿里云有阿里云的 oss 静态网站产品，如果你的域名是在阿里云注册备案的，可以考虑使用阿里云自家的产品。如果你的域名是在腾讯云注册备案的，你又想在微信、QQ 这些平台快速预览你的博客或者其他 web 应用，cloudbase CLI +静态网站也算是一个挺不错的选择。&lt;/p&gt;
&lt;h3 id=&#34;腾讯云域名注册优惠&#34;&gt;腾讯云域名注册优惠&lt;a class=&#34;headerlink&#34; href=&#34;#腾讯云域名注册优惠&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;**
最后，安利一个腾讯云 .COM .Net 域名只要 20 元，每周四域名注册优惠价的活动：
&lt;a href=&#34;https://curl.qcloud.com/wgaUKLZY&#34;&gt;403 Forbidden&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;本活动自本日起到 2020 年 12 月 31 日期间 每个周四当天 0:00-24:00，原价 55 元的 COM 优惠价 20 元可注册。不可再使用其他优惠券等再次优惠。&lt;/li&gt;
&lt;li&gt;有的周四只有 20 元的 COM，有的周四 COM NET 域名都有优惠。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&#34;txcom20200917.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fsgt19kDrhYHffbz9JmuZPUIbJPi.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;腾讯云域名续费优惠券&#34;&gt;腾讯云域名续费优惠券&lt;a class=&#34;headerlink&#34; href=&#34;#腾讯云域名续费优惠券&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;腾讯云域名续费优惠券满 20 减 10 ：
&lt;a href=&#34;https://url.cn/52L4ZSe&#34;&gt;腾讯云活动推荐&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;通过云开发  &lt;a href=&#34;https://github.com/TencentCloudBase/cloudbase-framework&#34;&gt;CloudBase Framework&lt;/a&gt;  框架将静态网站一键部署云开发环境，提供生产环境可用的 CDN 加速、自动弹性伸缩的高性能网站服务。可以搭配其他插件如 Node 插件、函数插件实现云端一体开发。&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E9%9D%99%E6%80%81%E7%BD%91%E7%AB%99/2020-10-21-cloudbase-note/</link>
      <pubDate>Wed, 21 Oct 2020 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E9%9D%99%E6%80%81%E7%BD%91%E7%AB%99/2020-10-21-cloudbase-note/</guid>
      
    </item>
    
    <item>
      <title>CentOS 7 下 Jekyll 环境搭建与应用</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2020-09-24&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2020-09-24T00:00:00&#39;&gt;2020-09-24&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-11-06&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-11-06T19:28:38&#39;&gt;2021-11-06&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;需要先明确几个概念：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Jekyll 是由 Ruby 语言编写的。Jekyll 是基于 Ruby Gem 的解析引擎，能够将模板、Liquid 语言、markdown 转换为”静态网页”的产生器。&lt;/li&gt;
&lt;li&gt;Ruby 是一种开源的面向对象程序设计的服务器端脚本语言，在 20 世纪 90 年代中期由日本的松本行弘（まつもとゆきひろ/Yukihiro Matsumoto）设计并开发。&lt;/li&gt;
&lt;li&gt;Gem 是 Ruby 模块 (叫做 Gems) 的包管理器。其包含包信息，以及用于安装的文件。gem 命令用于构建、上传、下载以及安装 Gem 包。&lt;/li&gt;
&lt;li&gt;RVM 能在系统中安装和管理多个 Ruby 版本。同时还能管理不同的 gem 集。支持 OS X、Linux 和其它类 UNIX 操作系统。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;一些教程参考资料：&lt;/p&gt;
&lt;p&gt;Ruby、RVM 的安装与简单使用参考：
&lt;a href=&#34;https://www.runoob.com/ruby/ruby-installation-unix.html&#34;&gt;Ruby 安装 – Linux | 菜鸟教程&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;1-rvm-指定路径安装&#34;&gt;1. RVM 指定路径安装&lt;a class=&#34;headerlink&#34; href=&#34;#1-rvm-指定路径安装&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 参考：https://stackoverflow.com/questions/15282509/how-to-change-rvm-install-location&lt;/span&gt;
curl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-sSL&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://get.rvm.io&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bash&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-s&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--path&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/path/you/want/rvm/installed/to
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;2-安装指定版本-ruby&#34;&gt;2. 安装指定版本 ruby&lt;a class=&#34;headerlink&#34; href=&#34;#2-安装指定版本-ruby&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 列出已知的 ruby 版本:&lt;/span&gt;
rvm&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;list&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;known

&lt;span class=&#34;c1&#34;&gt;# 可以选择现有的 rvm 版本来进行安装（下面以 rvm 2.6.6 版本的安装为例）&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# 同样继续等待漫长的下载，编译过程，完成以后，Ruby, Ruby Gems 就安装好了。&lt;/span&gt;
rvm&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;.6.6
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;这样安装的 ruby 位于 rvm 对应安装目录下载 rubies 中（/data/software/rvm/rubies/ruby-2.6.6/bin）！&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;rvm 常用命令&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 查询已经安装的 ruby&lt;/span&gt;
rvm&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;list

&lt;span class=&#34;c1&#34;&gt;# 卸载一个已安装版本&lt;/span&gt;
rvm&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;remove&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.9.2
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;设置 Ruby 版本&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;RVM 装好以后，需要执行下面的命令将指定版本的 Ruby 设置为系统默认版本&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;rvm&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;.0.0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--default
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;同样，也可以用其他版本号，前提是你有用 rvm install 安装过那个版本
这个时候你可以测试是否正确&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ruby&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-v
ruby&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;.0.0p247&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2013&lt;/span&gt;-06-27&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;revision&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;41674&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;x86_64-darwin13.0.0&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;

$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;gem&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-v
&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;.1.6
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;这有可能是因为 Ruby 的默认源使用的是 cocoapods.org，国内访问这个网址有时候会有问题，网上的一种解决方案是将远替换成 ruby-china 的，替换方式如下：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;gem&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-r&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://rubygems.org/
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;gem&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-a&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://gems.ruby-china.com/
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;要想验证是否替换成功了，可以执行：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;gem&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sources&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-l
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;正常的输出结果（请确保只有 gems.ruby-china.com）：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;***&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;CURRENT&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;SOURCES&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;***

https://gems.ruby-china.com/
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;3-安装-jekyll&#34;&gt;3. 安装 Jekyll&lt;a class=&#34;headerlink&#34; href=&#34;#3-安装-jekyll&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;使用 &lt;a href=&#34;http://rubygems.org/&#34;&gt;RubyGems&lt;/a&gt; 安装 jekyll。安装了 Ruby 之后，默认会自动安装 RubyGems，也可以单独安装 RubyGems。&lt;/p&gt;
&lt;p&gt;使用 RubyGems 安装 jekyll 很简单，命令如下：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;gem&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;jekyll
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;安装玩的 jekyll 可执行程序位于对应 ruby 的 bin 目录下，如 /data/software/rvm/rubies/ruby-2.6.6/bin/jekyll。&lt;/p&gt;
&lt;p&gt;如果使用的标记语言是 Markdown，则需要另外安装：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;gem&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;rdiscount
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;如果使用的标记语言是 Textile,则需要另外安装：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;gem&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;RedCloth
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;上面三个可以一次性安装，如下：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;gem&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;jekyll&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;rdiscount&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;RedCloth
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;另外，如需安装和 github pages 相同版本的 jekyll，那么不需要安装上面这几个，直接用下面命令安装&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;gem&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;github-pages
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E9%9D%99%E6%80%81%E7%BD%91%E7%AB%99/2020-09-24-qm3vml/</link>
      <pubDate>Thu, 24 Sep 2020 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E9%9D%99%E6%80%81%E7%BD%91%E7%AB%99/2020-09-24-qm3vml/</guid>
      
    </item>
    
    <item>
      <title>Enembl VEP 安装备忘</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2020-09-10&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2020-09-10T00:00:00&#39;&gt;2020-09-10&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-06-25&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-06-25T10:37:15&#39;&gt;2021-06-25&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;Use VEP to analyse your variation data locally. No limits, powerful, fast and extendable, command line VEP is the way to get the most out of &lt;a href=&#34;http://asia.ensembl.org/info/docs/tools/vep/script/index.html&#34;&gt;VEP&lt;/a&gt; and Ensembl.&lt;/p&gt;
&lt;p&gt;VEP is a powerful and highly configurable tool - have a browse through the &lt;a href=&#34;http://asia.ensembl.org/info/docs/tools/vep/script/index.html?d=1599702972963#contents&#34;&gt;documentation&lt;/a&gt;. You might also like to read up on the &lt;a href=&#34;http://asia.ensembl.org/info/docs/tools/vep/vep_formats.html&#34;&gt;data formats&lt;/a&gt; that VEP uses, and the different ways you can access &lt;a href=&#34;http://asia.ensembl.org/info/docs/tools/vep/script/vep_cache.html&#34;&gt;genome data&lt;/a&gt;. The VEP script can annotate your variants with &lt;a href=&#34;http://asia.ensembl.org/info/docs/tools/vep/script/vep_custom.html&#34;&gt;custom data&lt;/a&gt;, be extended with &lt;a href=&#34;http://asia.ensembl.org/info/docs/tools/vep/script/vep_plugins.html&#34;&gt;plugins&lt;/a&gt;, and use powerful &lt;a href=&#34;http://asia.ensembl.org/info/docs/tools/vep/script/vep_filter.html&#34;&gt;filtering&lt;/a&gt; to find biologically interesting results.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ol&gt;
&lt;li&gt;VEP 的安装需要 HTSLIB 的各种依赖，在 CentOS 6 的集群环境下目前没有安装成功。&lt;/li&gt;
&lt;li&gt;Perl-5.26.1 下使用 perl INSTALL.pl &amp;ndash;NO_HTSLIB 可以正常安装。&lt;/li&gt;
&lt;li&gt;cpan 和 cpanm 安装 DBD::mysql 都会出现各种异常；下载 DBD-mysql-4.050.tar.gz 手动安装时，make test 可能会出现失败，是因为当前用户可能没有创建、删除 test 数据库的权限，因此可以忽略 make test 这一步，make 后直接执行 make isntall 安装即可。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img alt=&#34;cpanm-DBD-mysql.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FkKpbuAdfgWU0avMJYSSrISSkg10.png&#34; /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Bio::DB:HTS 包的安装比较繁琐，问题也有点多。&lt;/li&gt;
&lt;/ol&gt;</description>
      <link>https://shenwy.com/yuque/%E7%94%9F%E7%89%A9%E4%BF%A1%E6%81%AF/%E8%BD%AF%E4%BB%B6/2020-09-10-yu6mtk/</link>
      <pubDate>Thu, 10 Sep 2020 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E7%94%9F%E7%89%A9%E4%BF%A1%E6%81%AF/%E8%BD%AF%E4%BB%B6/2020-09-10-yu6mtk/</guid>
      
    </item>
    
    <item>
      <title>Linux 中多终端同步 history 记录</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2020-09-04&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2020-09-04T00:00:00&#39;&gt;2020-09-04&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-06-25&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-06-25T10:54:31&#39;&gt;2021-06-25&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id=&#34;基本认识&#34;&gt;基本认识&lt;a class=&#34;headerlink&#34; href=&#34;#基本认识&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Linux 默认配置是当打开一个 shell 终端后，执行的所有命令均不会写入到 &lt;code&gt;~/.bash_history&lt;/code&gt;  文件中，只有当前用户退出后才会写入，这期间发生的所有命令其它终端是感知不到的。&lt;/p&gt;
&lt;h2 id=&#34;问题场景&#34;&gt;问题场景&lt;a class=&#34;headerlink&#34; href=&#34;#问题场景&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;在网络上看到 2 个问题，有点意思：&lt;/p&gt;
&lt;p&gt;假若之前 &lt;code&gt;history&lt;/code&gt;  命令记录为 c0，用户先打开了 shell 终端 a，执行了一部分命令 c1，又打开了一个 shell 终端 b，又执行了一部分命令 c2。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;**问题 1：**终端 a 执行的这部分命令终端 b 上看不到。&lt;/li&gt;
&lt;li&gt;**问题 2：**终端 a 正常退出，相关命令会写入到 &lt;code&gt;~/.bash_history&lt;/code&gt;  文件中（c1 命令也会写入，即 c0+c1），等到终端 b 正常退出后，相关命令也会写入到 &lt;code&gt;~/.bash_history&lt;/code&gt;  文件中，注意这个时候终端 b 写入的内容为 c0+c2，也即 c1 记录会丢失！！！&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;问题 1 的确会出现！&lt;/p&gt;
&lt;p&gt;但是问题 2 貌似不会出现，个人在 CentOS 7 中测试了一下，发现终端 a 正常退出，相关命令的确会写入到 &lt;code&gt;~/.bash_history&lt;/code&gt;  文件中，即 c0+c1；但终端 b 也正常退出后，终端 b 的相关命令是会自动追加到 &lt;code&gt;~/.bash_history&lt;/code&gt;  文件，这时候 &lt;code&gt;~/.bash_history&lt;/code&gt;  的文件内容 = c0 + c1 + c2！造成这样的原因，刚开始以为是受 &lt;code&gt;/etc/bashrc&lt;/code&gt;  的这一段配置的影响，后来把这两句注释，重新测试发现问题 2 貌似也不会出现。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# Turn on parallel history&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;shopt&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-s&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;histappend
&lt;span class=&#34;nb&#34;&gt;history&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-a
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;如果在多个打开的终端中实时同步 history（例如，如果我 ls 在一个终端中，切换到另一个已经运行的终端，然后按向上， &lt;code&gt;ls&lt;/code&gt;  出现）的确也是有一定的使用需求，但真正的需求个人觉得更应该是这样的：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;我可以看到多终端实时同步 history 的优点，但是就我个人而言，我会讨厌它。我通常在终端中打开 3 或 4 个选项卡以用于非常特定的用途：一个用于运行 “make”，一个用于 vi，一个用于运行东西，等等。因此，当我编译时，我转到选项卡 1，单击并显示 “make”。依此类推。这对我非常有帮助。因此，如果突然我进入我的 “make” 选项卡并点击弹出，并且出现一些随机的 grep 命令，我会很生气！&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;所以，我们增加一个问题 3：当打开一个 shell 终端后，不管是正常退出还是非正常退出，执行的所有命令均实时追加到 &lt;code&gt;~/.bash_history&lt;/code&gt;  文件中，但当前终端不会实时同步其他终端的 history，除非我重新开启了一个新终端。&lt;/p&gt;
&lt;h2 id=&#34;解决方案&#34;&gt;解决方案&lt;a class=&#34;headerlink&#34; href=&#34;#解决方案&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;**问题一：**实时同步多个终端的 history 记录。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# Avoid duplicates&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;HISTCONTROL&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;ignoredups:erasedups
&lt;span class=&#34;c1&#34;&gt;# When the shell exits, append to the history file instead of overwriting it&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;shopt&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-s&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;histappend

&lt;span class=&#34;c1&#34;&gt;# After each command, append to the history file and reread it&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;PROMPT_COMMAND&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;PROMPT_COMMAND&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:+&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PROMPT_COMMAND&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;$&amp;#39;\n&amp;#39;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;history -a; history -c; history -r&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;**
**问题二：**多个终端执行的所有命令均实时追加到 &lt;code&gt;~/.bash_history&lt;/code&gt;  文件中。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nb&#34;&gt;shopt&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-s&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;histappend
&lt;span class=&#34;nv&#34;&gt;PROMPT_COMMAND&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;history -a&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;参数解析&#34;&gt;参数解析&lt;a class=&#34;headerlink&#34; href=&#34;#参数解析&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;贴上一些 history 的参数解析。
&lt;img alt=&#34;linux-history.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FsHkJsSu2sLuB8lqAkDbw2wP8IF2.png&#34; /&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;history [n]
history -c
history -d offset
history -anrw [filename]
history -p arg [arg ...]
history -s arg [arg ...]
       With no options, display the command history list with line numbers.  Lines listed with  a  *
       have  been  modified.   An  argument of n lists only the last n lines.  If the shell variable
       HISTTIMEFORMAT is set and not null, it is used as a format string for strftime(3) to  display
       the time stamp associated with each displayed history entry.  No intervening blank is printed
       between the formatted time stamp and the history line.  If filename is supplied, it  is  used
       as  the  name  of  the history file; if not, the value of HISTFILE is used.  Options, if sup‐
       plied, have the following meanings:
       -c     Clear the history list by deleting all the entries.
       -d offset
              Delete the history entry at position offset.
       -a     Append the ``new&amp;#39;&amp;#39; history lines (history lines entered since  the  beginning  of  the
              current bash session) to the history file.
       -n     Read the history lines not already read from the history file into the current history
              list.  These are lines appended to the history file since the beginning of the current
              bash session.
       -r     Read the contents of the history file and use them as the current history.
       -w     Write  the  current  history  to the history file, overwriting the history file&amp;#39;s con‐
              tents.
       -p     Perform history substitution on the following args and display the result on the stan‐
              dard output.  Does not store the results in the history list.  Each arg must be quoted
              to disable normal history expansion.
       -s     Store the args in the history list as a single entry.  The last command in the history
              list is removed before the args are added.

       If  the  HISTTIMEFORMAT variable is set, the time stamp information associated with each his‐
       tory entry is written to the history file, marked with the history comment  character.   When
       the history file is read, lines beginning with the history comment character followed immedi‐
       ately by a digit are interpreted as timestamps for the previous  history  line.   The  return
       value  is 0 unless an invalid option is encountered, an error occurs while reading or writing
       the history file, an invalid offset is supplied as an argument to -d, or the  history  expan‐       sion supplied as an argument to -p fails.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;常用配置&#34;&gt;常用配置&lt;a class=&#34;headerlink&#34; href=&#34;#常用配置&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&#34;1-设置历史记录的时间&#34;&gt;1. 设置历史记录的时间&lt;a class=&#34;headerlink&#34; href=&#34;#1-设置历史记录的时间&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;HISTTIMEFORMAT&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;%F %T &amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 注意有个空格, 这样在显示时日期与命令之间会有空格分隔&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;HISTTIMEFORMAT %F %T 代表意义：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;%F – expands to full date same, as %Y-%m-%d (year-month-date).&lt;/li&gt;
&lt;li&gt;%T – expands to time; same as %H:%M:%S (hour:minute:seconds).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;2-控制历史命令记录的总个数&#34;&gt;2. 控制历史命令记录的总个数&lt;a class=&#34;headerlink&#34; href=&#34;#2-控制历史命令记录的总个数&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;HISTSIZE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1000&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;         &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 设置内存中的history命令的个数&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;HISTFILESIZE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1000&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 设置文件中的history命令的个数&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;简单说明：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;HISTFILESIZE：定义了在 &lt;code&gt;.bash_history&lt;/code&gt;  中保存命令的记录总数，可以理解为 &lt;code&gt;.bash_history&lt;/code&gt;  文件中最多只有 HISTFILESIZE 行。默认值是 500。&lt;/li&gt;
&lt;li&gt;HISTSIZE：定义了 &lt;code&gt;history&lt;/code&gt;  命令输出的记录数，即输出 &lt;code&gt;.bash_history&lt;/code&gt;  文件中的最后 HISTSIZE 行。默认值是 500。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;**
**&lt;/p&gt;
&lt;h3 id=&#34;3-更换历史命令的存储位置&#34;&gt;3. 更换历史命令的存储位置&lt;a class=&#34;headerlink&#34; href=&#34;#3-更换历史命令的存储位置&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;一般情况下，历史命令会被存储在 &lt;code&gt;~/.bash_history&lt;/code&gt;  文件中。如果不想存储在这个文件中，而想存储在其他文件中，那么可以通过下面的方式来更改：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;HISTFILE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;~/history.log
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;4-其他个性化的配置&#34;&gt;4. 其他个性化的配置&lt;a class=&#34;headerlink&#34; href=&#34;#4-其他个性化的配置&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;HISTCONTROL&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;erasedups&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 清除整个命令历史中的重复条目&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;HISTCONTROL&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;ignoredups&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 忽略记录命令历史中连续重复的命令&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;HISTCONTROL&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;ignorespace&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 忽略记录空格开始的命令&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;HISTCONTROL&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;ignoreboth&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 等价于ignoredups和ignorespace&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;尊重重要命令的隐私&#34;&gt;尊重重要命令的隐私&lt;a class=&#34;headerlink&#34; href=&#34;#尊重重要命令的隐私&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;以下内容节选自：编程帮《&lt;a href=&#34;http://c.biancheng.net/linux/history.html&#34;&gt;history 命令 Linux history 命令：查看和执行历史命令&lt;/a&gt;》。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;试想一下，我们操作 Linux 系统，如果把所有的命令都记录到 .bash_history 中，会不会有风险呢？&lt;/p&gt;
&lt;p&gt;当然有风险啦，如果哪一天我们不幸中招，黑客攻入了我们的系统，他只要查看一下 history 就能知道我们的很多秘密，比如一些登录密码。为了避免该类事情的发生，我们希望 history 不要显示含有隐私信息的历史命令，只显示不含有隐私信息的命令。这个需求太个性化，但 history 仍然能够实现，下面我们就为大家介绍两种行之有效的解决方案。&lt;/p&gt;
&lt;p&gt;第一种靠谱的解决方案：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;第 1 步：设置 HISTCONTROL 环境变量：export HISTCONTROL=ignorespace。&lt;/li&gt;
&lt;li&gt;第 2 步：输入重要命令时，记得在输入命令前加上空格。&lt;/li&gt;
&lt;li&gt;第 3 步：执行 history，可以看到刚输入的重要命令没有出现在 history 中。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;通过设置 HISTCONTROL=ignorespace，可以让 history 不记录你的特殊输入（命令前加空格），这样可以在一定程度上有效地保护我们的系统。&lt;/p&gt;
&lt;p&gt;第二种靠谱的解决方案：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;第 1 步：设置 HISTIGNORE 环境变量 export HISTIGNORE=*。&lt;/li&gt;
&lt;li&gt;第 2 步：输入重要命令，比如 mysql-uroot-p123。&lt;/li&gt;
&lt;li&gt;第 3 步：查看你的 history，可以看到刚输入的 mysql 命令没有记录在 history 中。&lt;/li&gt;
&lt;li&gt;第 4 步：恢复命令的记录 export HISTIGNORE=。&lt;/li&gt;
&lt;li&gt;第 4 步后，系统又恢复正常，输入的命令又能被正常记录了。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这个方法虽然略显烦琐，需要你每次在输入重要命令时都要先设置 HISTIGNORE=*，执行完命令后再设置 HISTIGNORE=，但是，这种方法能规避由于你的粗心大意（忘记命令前加空格）带来的巨大安全隐患，确保机密信息不会被泄露出去。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;参考资料&#34;&gt;参考资料&lt;a class=&#34;headerlink&#34; href=&#34;#参考资料&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;脚本小娃子，《&lt;a href=&#34;https://www.cnblogs.com/shengulong/p/9034821.html&#34;&gt;linux 的 history 命令设置&lt;/a&gt;》，博客园&lt;/li&gt;
&lt;li&gt;toy，《&lt;a href=&#34;https://linuxtoy.org/archives/bash_tricks.html&#34;&gt;增强 Bash 的功能&lt;/a&gt;》，LINUXTOY 个人博客&lt;/li&gt;
&lt;li&gt;toy，《&lt;a href=&#34;https://linuxtoy.org/archives/history-command-usage-examples.html&#34;&gt;History（历史）命令用法 15 例&lt;/a&gt;》，LINUXTOY 个人博客&lt;/li&gt;
&lt;li&gt;明月 Alioo，《&lt;a href=&#34;https://blog.csdn.net/hl_java/article/details/80847488&#34;&gt;Linux 多个会话同时执行命令后 history 记录不全的解决方案&lt;/a&gt;》，CSDN&lt;/li&gt;
&lt;li&gt;whatday，《&lt;a href=&#34;https://blog.csdn.net/whatday/article/details/103537044&#34;&gt;linux shell 日志环境变量 HISTFILESIZE 和 HISTSIZE 的区别&lt;/a&gt;》，CSDN&lt;/li&gt;
&lt;li&gt;Unix &amp;amp; Linux，《&lt;a href=&#34;https://qastack.cn/unix/1288/preserve-bash-history-in-multiple-terminal-windows&#34;&gt;在多个终端窗口中保留 bash 历史记录&lt;/a&gt;》，QA Stack&lt;/li&gt;
&lt;li&gt;Tsung，《&lt;a href=&#34;https://blog.longwin.com.tw/2017/05/linux-bash-history-date-time-display-2017/&#34;&gt;Bash history 加上 日期和時間&lt;/a&gt;》，WordPress 个人博客&lt;/li&gt;
&lt;/ol&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%85%8D%E7%BD%AE%E4%BD%BF%E7%94%A8/2020-09-04-history-command/</link>
      <pubDate>Fri, 04 Sep 2020 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%85%8D%E7%BD%AE%E4%BD%BF%E7%94%A8/2020-09-04-history-command/</guid>
      
    </item>
    
    <item>
      <title>RepeatModeler 安装及使用</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2020-08-27&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2020-08-27T00:00:00&#39;&gt;2020-08-27&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-06-25&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-06-25T10:37:23&#39;&gt;2021-06-25&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id=&#34;1-安装依赖&#34;&gt;1. 安装依赖&lt;a class=&#34;headerlink&#34; href=&#34;#1-安装依赖&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;RepeatModeler 安装之前需要安装以下软件：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;perl （&lt;strong&gt;Unix system with perl 5.8.0 or higher installed&lt;/strong&gt;）&lt;/li&gt;
&lt;li&gt;RECON - De Novo Repeat Finder;   鉴定重复家族&lt;/li&gt;
&lt;li&gt;RepeatScout - De Novo Repeat Finder; 从基因组中鉴定重复序家族序列&lt;/li&gt;
&lt;li&gt;TRF - Tandem Repeat Finder&lt;/li&gt;
&lt;li&gt;RMBlast - A modified version of NCBI Blast for use with RepeatMasker and RepeatModeler. 或者 ABBlast - Sequence Search Engine     任一一款搜索引擎&lt;/li&gt;
&lt;li&gt;RepeatMasker &amp;amp; Libraries&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;各个软件详细安装方法如下。&lt;/p&gt;
&lt;h3 id=&#34;11-recon&#34;&gt;1.1 RECON&lt;a class=&#34;headerlink&#34; href=&#34;#11-recon&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;#下载后&lt;/span&gt;
tar&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-zxf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;RECON-1.08.tar.gz
&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;RECON-1.08/src
make
make&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install
&lt;span class=&#34;c1&#34;&gt;#给recon.pl脚本中添加路径，第三行&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;$path&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;*/RECON-1.08/bin&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;12-repeatscout&#34;&gt;1.2 RepeatScout&lt;a class=&#34;headerlink&#34; href=&#34;#12-repeatscout&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;#下载后&lt;/span&gt;
tar&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-zxf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;RepeatScout-1.0.6.tar.gz
&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;RepeatScout-1.0.6
make
&lt;span class=&#34;c1&#34;&gt;##会生成build_lmer_table， RepeatScout-###两个程序&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;13-trf&#34;&gt;1.3 TRF&lt;a class=&#34;headerlink&#34; href=&#34;#13-trf&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;选择 Linux command line 64-bit ，下载后，直接使用，不需要解压缩。Release&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;wget&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://github.com/Benson-Genomics-Lab/TRF/releases/download/v4.09.1/trf409.linux64&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-O&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;trf
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;chmod&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;a+x&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;trf
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;14-rmblast&#34;&gt;1.4 RMBlast&lt;a class=&#34;headerlink&#34; href=&#34;#14-rmblast&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 下载&lt;/span&gt;
wget&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;http://www.repeatmasker.org/rmblast-2.10.0+-x64-linux.tar.gz
&lt;span class=&#34;c1&#34;&gt;#下载后，直接解压即可&lt;/span&gt;
tar&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;zvxf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;rmblast-2.10.0+-x64-linux.tar.gz
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;2-安装&#34;&gt;2. 安装&lt;a class=&#34;headerlink&#34; href=&#34;#2-安装&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&#34;21-repeatmasker-安装&#34;&gt;2.1 RepeatMasker 安装&lt;a class=&#34;headerlink&#34; href=&#34;#21-repeatmasker-安装&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;事先必须安装 TRF，RMblast。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;#下载后&lt;/span&gt;
tar&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-zxf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;RepeatMasker-4.1.0.tar.gz
&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;RepeatMasker
chmod&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-R&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;755&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;*
./configure.&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;执行后一步一步来，输入需要的路径

&lt;span class=&#34;c1&#34;&gt;#首先是perl环境，默认自动检测，或者手动更改perl主程序路径后回车继续&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;#然后是TRF， 输入包含TRF的路径&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;#序列搜索引擎，刚才安装了RMblast，先选择RMblast，然后回车，然后选择5 done&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;#提示 完成安装，将RepeatMasker设置到环境变量即可&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;22-repeatmodeler-安装&#34;&gt;2.2 RepeatModeler 安装&lt;a class=&#34;headerlink&#34; href=&#34;#22-repeatmodeler-安装&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;#下载后&lt;/span&gt;
tar.&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-zxf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;RepeatModeler-2.0.1.tar.gz
&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;RepeatModeler-2.0.1
chmod&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-R&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;755&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;*
perl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;./configure&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;根据提示，一步一步来，和上面repeatmasker类似
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;参考：&lt;a href=&#34;http://www.meiyoubug.com/article/21937.html&#34;&gt;http://www.meiyoubug.com/article/21937.html&lt;/a&gt;&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E7%94%9F%E7%89%A9%E4%BF%A1%E6%81%AF/%E8%BD%AF%E4%BB%B6/2020-08-27-mb7tcg/</link>
      <pubDate>Thu, 27 Aug 2020 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E7%94%9F%E7%89%A9%E4%BF%A1%E6%81%AF/%E8%BD%AF%E4%BB%B6/2020-08-27-mb7tcg/</guid>
      
    </item>
    
    <item>
      <title>一次 HPC 病毒感染与解决经历</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2020-08-25&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2020-08-25T00:00:00&#39;&gt;2020-08-25&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-06-30&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-06-30T09:36:57&#39;&gt;2021-06-30&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;周一的时候，有同事反馈说，HPC 的项目报告路径正在不断产生 *.exe 和 *.pif 文件，怀疑是不是被病毒感染！
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FruWFOZWN1SO32k60dIGJ0k2RW4C.png&#34; /&gt;
收到信息，第一时间进去目录，的确发现该目录每个几秒钟就自动生成一个 *.exe 和 *.pif 二进制文件。&lt;/p&gt;
&lt;p&gt;于是：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;检查垃圾文件的属主，ps、htop、top 排查该属主的进程，均没有发现任何正在运行的相关程序。&lt;/li&gt;
&lt;li&gt;用 crontab 检查是否有定时运行的任务，也没有任何发现。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;为了防止 *.exe 和 &lt;em&gt;.pif 垃圾文件的持续生成，占满磁盘，我们在 /etc/passwd 中把有问题的用户进行了注释禁用，同时把正在对发生问题目录进行数据拷贝的所有移动硬盘进行终止，并移除，这样一来发现，&lt;/em&gt;.exe 和 *.pif 二进制文件自动生成的情况消失了。&lt;/p&gt;
&lt;p&gt;由于发生问题所在的目录是通过 Samba 服务与本地的几台 Windows 台式机进行了同步，用于客户数据上传下载的拷贝。我们排查了 HPC 发生问题的时间，以及相关时间段的服务记录，没发现什么异常，服务器 io 也正常，而且生成的 exe 二进制文件正常来说在 Linux 上也是无法执行的，一般只有 Windows 对 exe 可执行文件比较敏感。&lt;/p&gt;
&lt;p&gt;于是，初步怀疑基于 Samba 服务的台式电脑存在异常，在不断自我复制产生 *.exe 和 *.pif 二进制文件。&lt;/p&gt;
&lt;p&gt;接下来，我们一个个去查看当天用于上传下载目标目录的移动硬盘的文件，终于发现一个名字为 autorun.inf 的可疑文件，同时也发现了这个程序里面的 tpkv.exe 程序：&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;autorun-inf.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fkg9mQR4tnY1isIy18-Katshmgry.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;针对 autorun.inf，谷歌了一下，发现：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Autorun 病毒是一种专门针对 Windows 系列操作系统的病毒，它是依靠 Windows 的 Autorun/Autoplay 功能发作传播的。这个功能的目的是在电脑上插入闪存盘等可移动设备或是光盘之后，自动执行一系列的指令。在 Windows XP 之前， Autorun 和 Autoplay 指的是同一个功能，但是在 Windows XP 之后，这两个单词指不同的功能。在中文版的 XP 里，前者被翻译为“自动运行”，而后者叫“自动播放”。其中自动运行是指：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;对光盘来说，放入光盘后，自动执行 &lt;code&gt;autorun.inf&lt;/code&gt; 文件中规定的程序。&lt;/li&gt;
&lt;li&gt;对其它可移动设备来说（闪存盘、移动硬盘等），&lt;strong&gt;当双击盘符时&lt;/strong&gt;，自动执行 &lt;code&gt;autorun.inf&lt;/code&gt; 文件中规定的程序。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;摘自：《&lt;a href=&#34;https://wzyboy.im/post/492.html&#34;&gt;Autorun 的介绍及彻底防治 U 盘病毒&lt;/a&gt;》&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;我们把这两个文件从移动硬盘里面去掉，更换到其他的台式机器上重新执行数据上传下载拷贝，发现再也没有出现不断自我复制产生 *.exe 和 *.pif 二进制文件的现象！&lt;/p&gt;
&lt;p&gt;最后，简单总结一下。&lt;/p&gt;
&lt;p&gt;HPC 服务是一个极其重要且敏感的集群服务，包括了诸多重要数据和程序信息资料，大部分都是基于内部网络环境进行相关数据处理和传输，对于第三方数据上传下载一定要做好安全防护，尽量不要直接与服务器连接进行传输。其次，做好每一个账号的权限、历史记录等相关设置，方便出现异常时进行问题排查。&lt;/p&gt;
&lt;p&gt;HPC 管理与维护是一个系统化的工作，对于老旧的服务器更考验一个运维人员的业务水平和能力，以及细心程度，如果你有类似经验，非常欢迎随时和我分享。&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%AE%89%E5%85%A8%E7%AE%A1%E7%90%86/2020-08-25-hpc-autoru/</link>
      <pubDate>Tue, 25 Aug 2020 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%AE%89%E5%85%A8%E7%AE%A1%E7%90%86/2020-08-25-hpc-autoru/</guid>
      
    </item>
    
    <item>
      <title>一个小清新的知识管理和问题讨论平台</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2020-08-21&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2020-08-21T00:00:00&#39;&gt;2020-08-21&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-06-25&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-06-25T10:45:31&#39;&gt;2021-06-25&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&#34;https://mp.weixin.qq.com/s/fL7CaYo2xvuleihlY8XDIA&#34;&gt;一个小清新的知识管理和问题讨论平台&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;在《&lt;a href=&#34;https://www.yuque.com/shenweiyan/cookbook/zwtn5w?view=doc_embed&#34;&gt;一个小团队使用的知识管理方案与工具&lt;/a&gt;》中我们介绍了一些 Confluence 的基本特性，今天我们来看看这个工具的一些安装部署问题。&lt;/p&gt;
&lt;h2 id=&#34;1-java-与-postgresql-安装配置&#34;&gt;1. Java 与 PostgreSQL 安装配置&lt;a class=&#34;headerlink&#34; href=&#34;#1-java-与-postgresql-安装配置&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&#34;11-oracle-java-jdk-8&#34;&gt;1.1 Oracle Java JDK 8&lt;a class=&#34;headerlink&#34; href=&#34;#11-oracle-java-jdk-8&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://www.oracle.com/java/technologies/javase/javase8u211-later-archive-downloads.html&#34;&gt;https://www.oracle.com/java/technologies/javase/javase8u211-later-archive-downloads.html&lt;/a&gt;
注册一个 oracle 账号就行，需要的文件：jdk-8u251-linux-x64.tar.gz&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;创建目录，解压。&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;mkdir&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/java
tar&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;zvxf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;jdk-8u251-linux-x64.tar.gz&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-C&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/java
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;环境配置，修改 \~/.bashrc（或者 /etc/profile）文件。&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;vim&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~/.bashrc
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;添加以下内容。&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;JAVA_HOME&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/java/jdk1.8.0_251
&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$JAVA_HOME&lt;/span&gt;/bin:&lt;span class=&#34;nv&#34;&gt;$PATH&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;CLASSPATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;.:&lt;span class=&#34;nv&#34;&gt;$JAVA_HOME&lt;/span&gt;/lib/dt.jar:&lt;span class=&#34;nv&#34;&gt;$JAVA_HOME&lt;/span&gt;/lib/tools.jar
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;使环境变量生效。&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~/.bashrc
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;检查配置是否成功。&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;java&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-version
java&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;version&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;1.8.0_251&amp;quot;&lt;/span&gt;
Java&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;TM&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;SE&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Runtime&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Environment&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;build&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.8.0_251-b08&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
Java&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;HotSpot&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;TM&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;64&lt;/span&gt;-Bit&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Server&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;VM&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;build&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;25&lt;/span&gt;.251-b08,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mixed&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mode&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FjwONGM3a7lpYeCuLlFZL3vVyn7b.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;12-postgresql&#34;&gt;1.2 PostgreSQL&lt;a class=&#34;headerlink&#34; href=&#34;#12-postgresql&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;PostgreSQL 是 Atlassian 官方推荐用于 Confluence 的数据库，接下来我们需要安装 PostgreSQL，并执行一些必要的设置。&lt;/p&gt;
&lt;h4 id=&#34;1-安装&#34;&gt;1. 安装&lt;a class=&#34;headerlink&#34; href=&#34;#1-安装&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Linux 下 PostgreSQL 数据库的安装请参考《&lt;a href=&#34;https://www.yuque.com/bioitee/mp/linux-postgresql-install?view=doc_embed&#34;&gt;Linux 下 PostgreSQL 源码编译安装&lt;/a&gt;》一文，这里不赘述。&lt;/p&gt;
&lt;h4 id=&#34;2-配置&#34;&gt;2. 配置&lt;a class=&#34;headerlink&#34; href=&#34;#2-配置&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;创建用于 Confluence 的数据库。详细可以参考《&lt;a href=&#34;https://comtronic.com.au/how-to-install-confluence-on-centos7-with-postgresql/&#34;&gt;How to install Confluence on Centos7 with PostgreSQ&lt;/a&gt;》。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sudo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-u&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;postgres&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-i
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;psql
psql&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;10&lt;/span&gt;.13&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
Type&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;help&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;help.

&lt;span class=&#34;nv&#34;&gt;postgres&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# CREATE USER confluencedbuser PASSWORD &amp;#39;confluencedbpassword&amp;#39;;&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;postgres&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# CREATE DATABASE confluencedb WITH ENCODING &amp;#39;UNICODE&amp;#39; LC_COLLATE &amp;#39;C&amp;#39; LC_CTYPE &amp;#39;C&amp;#39; TEMPLATE template0;&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;postgres&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# GRANT ALL PRIVILEGES ON DATABASE confluencedb to confluencedbuser;&lt;/span&gt;
&lt;span class=&#34;se&#34;&gt;\q&lt;/span&gt;
-bash-4.2$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;exit&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;2-下载安装-confluence&#34;&gt;2. 下载安装 Confluence&lt;a class=&#34;headerlink&#34; href=&#34;#2-下载安装-confluence&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&#34;21-下载&#34;&gt;2.1 下载&lt;a class=&#34;headerlink&#34; href=&#34;#21-下载&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mkdir&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/data/apps/atlassian
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/data/apps/atlassian
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;wget&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://product-downloads.atlassian.com/software/confluence/downloads/atlassian-confluence-7.2.1-x64.bin
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;22-安装&#34;&gt;2.2 安装&lt;a class=&#34;headerlink&#34; href=&#34;#22-安装&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;给 atlassian-confluence-7.2.1-x64.bin 添加可执行权限后进行安装。
&lt;img alt=&#34;mkdir-atlassian-dir.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fj5c6ROzhtwANVRThs3shInSS1la.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;然后，执行 ./atlassian-confluence-7.2.1-x64.bin 安装，注意安装完成后先不要急着启动！！！
&lt;img alt=&#34;atlassian-confluence-install.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FpkP20zD5fnEtYmakle0O1eyUj5W.jpeg&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;23-破解&#34;&gt;2.3 破解&lt;a class=&#34;headerlink&#34; href=&#34;#23-破解&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;由于 Confluence 本身是一个收费的软件，想要免费安装，可以使用 pengzhile 提供的在 GitHub 上开源了对 Atlassian 家所有产品（包括插件市场所有收费插件）的破解方法。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://gitee.com/pengzhile/atlassian-agent&#34;&gt;Gitee: pengzhile/atlassian-agent&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/pengzhile&#34;&gt;GitHub: pengzhile/atlassian-agent&lt;/a&gt; (DMCA takedown)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://pan.baidu.com/s/1AucTmTNPSG85hhWF7mkIcQ&#34;&gt;&lt;strong&gt;编译好的包&lt;/strong&gt;&lt;/a&gt;，提取码：&lt;code&gt;n4ug&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;具体做法如下。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;将 atlassian-agent.jar 放在一个你不会随便删除的位置（你服务器上的所有 Atlassian 服务可共享同一个 atlassian-agent.jar）&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;tar&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;zvxf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;atlassian-agent-v1.2.3.tar.gz&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-C&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/data/apps/atlassian
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;非常重要！！！需要设置环境变量 JAVA_OPTS，避免开机失效。在 &lt;a href=&#34;https://gitee.com/pengzhile/atlassian-agent&#34;&gt;atlassian-agent&lt;/a&gt; 的说明中提供了 3 个建议，大家可以根据自己需要去设置，这里我们选择第二种方法：把 JAVA_OPTS 环境放到服务安装所在 bin 目录下的 setenv.sh 或 setenv.bat 中。&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# vim /data/apps/atlassian/confluence/bin/setenv.sh&lt;/span&gt;

&lt;span class=&#34;nv&#34;&gt;CATALINA_OPTS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;-javaagent:/data/apps/atlassian/atlassian-agent-v1.2.3/atlassian-agent.jar &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;JAVA_OPTS&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;cinfluence-setenv.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FhczP92LnsJhUTq9TRHjeAYkKYmd.png&#34; /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;准备就绪后，我们就要开启 Configuration 了，找到启动脚本并启动 start-confluence.sh，启动完成后我们可以通过浏览器进行访问。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img alt=&#34;start_confluence.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FrtpIUcif5V1K8gXtSpHXUgGcox3.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;24-配置&#34;&gt;2.4 配置&lt;a class=&#34;headerlink&#34; href=&#34;#24-配置&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;在浏览器中打开 &lt;strong&gt;&lt;a href=&#34;http://localhost:8090&#34;&gt;http://localhost:8090&lt;/a&gt;&lt;/strong&gt; 或者 **http\://&amp;lt;你服务器的公网 IP&amp;gt;:8090 **，打开 Confluence 的配置页面。&lt;/p&gt;
&lt;p&gt;选择中文，产品安装。
&lt;img alt=&#34;01-产品安装.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FoM2tysNankGbPYt-UXdDofwoWzM.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;获取应用。
&lt;img alt=&#34;02-获取应用.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FnD_VyxXgzhtQyPO4r1hN5zeWF9k.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;获得服务器 ID 及授权码提示。
&lt;img alt=&#34;03-授权码.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FvuroXP_Z_y0p-g1ogMihijfFIvO.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;25-授权码&#34;&gt;&lt;strong&gt;2.5 授权码&lt;/strong&gt;&lt;a class=&#34;headerlink&#34; href=&#34;#25-授权码&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;当我们在后台服务器通过命令行执行 java -jar /atlassian-agent.jar 时应该可以看到输出的 KeyGen 参数帮助。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;破解 Confluence 时，选择 conf 即可，具体命令如下：&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 将server ID复制（-m 邮箱 -n 用户名 -o 公司名 -s SERVER ID）&lt;/span&gt;
java&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-jar&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;atlassian-agent.jar&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-p&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-m&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ishenweiyan@foxmail.com&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-n&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;shenweiyan&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-o&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;wiki-test&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-s&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;B7DP-BX09-325B-DJLP
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;破解团队日程表时，选择 tc 即可，具体命令如下：&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 将server ID复制（-m 邮箱 -n 用户名 -o 公司名 -s SERVER ID）&lt;/span&gt;
java&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-jar&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;atlassian-agent.jar&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-p&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tc&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-m&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ishenweiyan@foxmail.com&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-n&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;shenweiyan&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-o&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;wiki-test&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-s&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;B7DP-BX09-325B-DJLP
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;破解 Confluence Questions 时，选择 questions 即可，具体命令如下：&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 将server ID复制（-m 邮箱 -n 用户名 -o 公司名 -s SERVER ID）&lt;/span&gt;
java&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-jar&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;atlassian-agent.jar&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-p&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;question&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-m&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ishenweiyan@foxmail.com&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-n&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;shenweiyan&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-o&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;wiki-test&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-s&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;B7DP-BX09-325B-DJLP
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;将生成的授权码粘贴，下一步。
&lt;img alt=&#34;04-授权码.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fknwnui-bJqhlI1_p0_AIJrKQ0dn.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;设置数据库，生产环境建议独立的数据。
&lt;img alt=&#34;05-设置数据库.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FtFvK_Y2DnZYLOrwqRIKNbu2ZqWN.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;选择 PostgreSQL 数据库，填写数据库信息，测试数据库连通性。
&lt;img alt=&#34;06-设置-测试数据库.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FpHJirbRRQJ8of-Ux0FMQhnFJJv-.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;过一会你就可以看到这个页面了，安装成功了。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FrcZbpu_e3ocfXaYWWrhWM3Hdkbb.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;3-使用与管理&#34;&gt;3. 使用与管理&lt;a class=&#34;headerlink&#34; href=&#34;#3-使用与管理&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&#34;31-使用&#34;&gt;3.1 使用&lt;a class=&#34;headerlink&#34; href=&#34;#31-使用&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;h4 id=&#34;1-选择站点&#34;&gt;1. 选择站点&lt;a class=&#34;headerlink&#34; href=&#34;#1-选择站点&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;如果是全新的站点，那就选择空白站点，如果只是升级或者备份恢复，那就选择从备份还原站点。这里我们选择&amp;rdquo;示范站点&amp;rdquo;。
&lt;img alt=&#34;07-示范站点.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fj8hcocs17OiXr15ezpiQF3iz7k6.png&#34; /&gt;&lt;/p&gt;
&lt;h4 id=&#34;2-配置用户管理&#34;&gt;2. 配置用户管理&lt;a class=&#34;headerlink&#34; href=&#34;#2-配置用户管理&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;配置用户，如果有 Jira 环境的话 ，可以集成 Jira 的用户管理，也可以使用 confluence 自己的用户，那就选择“在 confluence 中管理用户和组”。
&lt;img alt=&#34;08-配置用户管理.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FrchRIEbAooYjOV1ivdssHCvwWZc.png&#34; /&gt;
&lt;img alt=&#34;09-设置系统管理员.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fmo9iwK9BBYjXpybhYjfDk55QE-n.png&#34; /&gt;
&lt;img alt=&#34;10-设置成功.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FjBV9AbjCPH11B78hK4rzpvADQd4.png&#34; /&gt;&lt;/p&gt;
&lt;h4 id=&#34;3-创建空间&#34;&gt;3. 创建空间&lt;a class=&#34;headerlink&#34; href=&#34;#3-创建空间&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;img alt=&#34;创建空间.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fl0U4NJLPFs63Q6_ChC2pIelmMiJ.png&#34; /&gt;
空间创建完成后，就会自动进入已经创建好的空间，接下来，enjoy！
&lt;img alt=&#34;进入空间.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FmIY9RLRaNgWYpGJZERUSDKxdz6c.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;32-站点管理&#34;&gt;3.2 站点管理&lt;a class=&#34;headerlink&#34; href=&#34;#32-站点管理&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;点击右上角，可以进行站点管理，常用的如 &lt;strong&gt;&amp;ldquo;一般配置&amp;rdquo;&lt;/strong&gt;：
&lt;img alt=&#34;一般配置.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fq8BjZIlWxpR-t3yBveaLSnaNRu6.png&#34; /&gt;
点击一般配置，授权管理，可以查看到授权情况：
&lt;img alt=&#34;授权信息.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FixsCBHkKdY68UCDhcgK_LLMAqGB.png&#34; /&gt;
当然本文介绍的方式仅用于学习体验，有能力的还是建议支持正版！！！&lt;/p&gt;
&lt;h2 id=&#34;4-备份恢复&#34;&gt;4. 备份恢复&lt;a class=&#34;headerlink&#34; href=&#34;#4-备份恢复&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Confluence 本身会有每日的备份管理，就是定时备份任务（“一般配置”→“每日备份管理”）。
&lt;img alt=&#34;每日备份管理.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FqaJjQUmnAajkkEC2rwEepNKoloa.png&#34; /&gt;
由于一些其他原因需要新建一个 Confluence 环境，然后还原的，可以点下面的**“备份与还原”**。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;如果您的导出文件很小(小于 25 MB)，请直接在浏览器“备份与还原”页面直接进行上传。&lt;/li&gt;
&lt;li&gt;而较大的文件需要从主目录导入。需要提前将备份的文件放到 &lt;strong&gt;/path/to/application-data/confluence/restore&lt;/strong&gt; 下。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;具体备份与还原，可以参考 &lt;strong&gt;“一般配置”&lt;/strong&gt; → **“备份与还原” **页面的详细介绍。
&lt;img alt=&#34;备份与还原-Confluence.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fk-UdPQjXEgm7xLDdE-6Qh9rRb53.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;5-参考资料&#34;&gt;5. 参考资料&lt;a class=&#34;headerlink&#34; href=&#34;#5-参考资料&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;武培轩，《&lt;a href=&#34;https://www.cnblogs.com/wupeixuan/p/11433922.html&#34;&gt;CentOS 7 安装 JAVA 环境（JDK 1.8）&lt;/a&gt;》，博客园&lt;/li&gt;
&lt;li&gt;王良付，《&lt;a href=&#34;https://liangfu.wang/2020/01/22/CentOS-7-6-%E5%AE%89%E8%A3%85-Confluence-7-2/&#34;&gt;CentOS 7.6 安装 Confluence 7.2&lt;/a&gt;》，良付の博客&lt;/li&gt;
&lt;li&gt;胖哥叨逼叨，《&lt;a href=&#34;https://www.pangshare.com/1919.htm&#34;&gt;Atlassian Confluence 部署-confluence 安装&lt;/a&gt;》，WordPress&lt;/li&gt;
&lt;li&gt;Agile Project Management * DIY Electronics，《&lt;a href=&#34;https://comtronic.com.au/how-to-install-confluence-on-centos7-with-postgresql/&#34;&gt;How to install Confluence on Centos7 with PostgreSQL&lt;/a&gt;》，Comtronic Blog&lt;/li&gt;
&lt;/ol&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E7%9F%A5%E8%AF%86%E7%AE%A1%E7%90%86/2020-08-21-install-confluence-on-centos/</link>
      <pubDate>Fri, 21 Aug 2020 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E7%9F%A5%E8%AF%86%E7%AE%A1%E7%90%86/2020-08-21-install-confluence-on-centos/</guid>
      
    </item>
    
    <item>
      <title>在 RHEL 使用 gdc-client 下载 TCGA 数据</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2020-08-17&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2020-08-17T00:00:00&#39;&gt;2020-08-17&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-06-25&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-06-25T10:37:33&#39;&gt;2021-06-25&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;今天，只聊一下 RedHat/CentOS 下 gdc-client 安装的那些事~&lt;/p&gt;
&lt;p&gt;gdc-client（&lt;a href=&#34;https://gdc.cancer.gov/access-data/gdc-data-transfer-tool&#34;&gt;https://gdc.cancer.gov/access-data/gdc-data-transfer-tool&lt;/a&gt;）是由 GDC 官方提供的一个可以在命令行下批量下载 TCGA 数据的客户端工具。&lt;/p&gt;
&lt;p&gt;在 gdc-client 官网可以看到 Mac、Windows 和 Ubuntu 的二进制版本下载，却唯独没看到 CentOS/RedHat 版本的！而且还给了我们一个提示说，如果你想要安装 RedHat Enterprise Release 6  版本的 gdc-client 需要跟 GDC 进行联系！！
&lt;img alt=&#34;gdc.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FkbXuAPJHZiZqpBVCEwgBZ0wsYgt.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;如果你用 &amp;ldquo;gdc-client&amp;rdquo; + &amp;ldquo;centos6&amp;rdquo; 的关键字去谷歌，会发现大部分的答案都是教你用 Python2 的虚拟环境去安装 gdc-client。
&lt;img alt=&#34;gdc-client-centos6-Google.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Frjz_5OxHOVj_DEDt6G_24tUvuMQ.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;其实，这些大部分都存在误导的成分，虽然 gdc-client 官网虽然没有提供 CentOS 6 的二进制程序包，但它托管在 GitHub 的源码我们是可以直接安装的，而且是只支持 Python 3！！&lt;/p&gt;
&lt;h3 id=&#34;坑一python-2-引发-parse-模块异常&#34;&gt;坑一：Python 2 引发 parse 模块异常&lt;a class=&#34;headerlink&#34; href=&#34;#坑一python-2-引发-parse-模块异常&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;create&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-n&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Python2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;python&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;.7
&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;activate&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Python2
git&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;clone&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://github.com/NCI-GDC/gdc-client
&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;gdc-client
python&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;setup.py&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&amp;gt;&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tee&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-a&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install.log
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;这种方法虽然看起来没什么问题，却会执行 &lt;code&gt;gdc-client -h&lt;/code&gt;  提示 parse 模块异常。其原因是 &lt;strong&gt;build/bdist.linux-x86_64/egg/gdc_client/download/parser.py&lt;/strong&gt;  的第三行 &lt;code&gt;from urllib import parse as urlparse&lt;/code&gt;  是 py3 的语法：在 python 2.x 中的 &lt;code&gt;urlparse&lt;/code&gt;  模块在 Python 3 中已经重命名为 &lt;code&gt;urllib.parse&lt;/code&gt; 。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# Python 2 正确语法&lt;/span&gt;
&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;urlparse&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;urlparse&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# Python 3 正确语法&lt;/span&gt;
&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;urllib&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;parse&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;urlparse&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;gdc-client-parser.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FlPrmE8ny-JWm3fe_bQeAEMKbjXs.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;坑二conda-安装无法响应&#34;&gt;坑二：conda 安装无法响应&lt;a class=&#34;headerlink&#34; href=&#34;#坑二conda-安装无法响应&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;bioconda 虽然也提供了 gdc-client，但是本人 一直没法安装成功，可能是我的运气不太好！
&lt;img alt=&#34;bioconda-gdc-client.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FpoqmI7dfG3xa5xgcfP9opZ_KRIS.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;最后centos-6-的正确解锁姿势&#34;&gt;最后，CentOS 6 的正确解锁姿势&lt;a class=&#34;headerlink&#34; href=&#34;#最后centos-6-的正确解锁姿势&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;create&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-n&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;gdc&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;python&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;.7
&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;activate&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;gdc

git&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;clone&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://github.com/NCI-GDC/gdc-client
&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;gdc-client
pip&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-r&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;requirements.txt
python&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;setup.py&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&amp;gt;&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tee&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-a&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install.log
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;gdc-client-help.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FjrP1HvQh-x25C1FNQeZmRl8deT9.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;最后，打开 GDC 的官方《&lt;a href=&#34;https://docs.gdc.cancer.gov/Data_Transfer_Tool/Users_Guide/Data_Download_and_Upload/&#34;&gt;Data Transfer Tool Command Line Documentation&lt;/a&gt;》文档，查看在命令下怎么使用 gdc-client 下载你想要的 TCGA 数据吧！&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E7%94%9F%E7%89%A9%E4%BF%A1%E6%81%AF/%E8%BD%AF%E4%BB%B6/2020-08-17-gdc-client-for-redhat-centos/</link>
      <pubDate>Mon, 17 Aug 2020 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E7%94%9F%E7%89%A9%E4%BF%A1%E6%81%AF/%E8%BD%AF%E4%BB%B6/2020-08-17-gdc-client-for-redhat-centos/</guid>
      
    </item>
    
    <item>
      <title>一个小团队使用的知识管理方案与工具</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2020-08-04&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2020-08-04T00:00:00&#39;&gt;2020-08-04&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-06-25&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-06-25T10:45:43&#39;&gt;2021-06-25&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;公司在使用 Mediawiki 进行内部知识管理也有一段时间了，使用过一段时间发现问题不少。其中最让人抓狂的应该就是 Mediawiki 的插件了，虽然数量很多，但安装过程中五花八门的异常，有时候就是一种灾难；其次，Mediawiki 书写体验一般，尤其对于不熟悉 wiki 语法的童鞋，上手慢，虽然说有支持 markdown 和其他编辑器的插件，但安装过程中的那种酸爽......，有时候真的是一个接着一个的坑！
&lt;img alt=&#34;mediawiki.gif&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fgiwz1F48bEOu2ke6XxUj9SLFf1Z.gif&#34; /&gt;&lt;/p&gt;
&lt;p&gt;于是乎想要跳出 wiki 的坑，尝试折腾一下其他的适合小团队（企业）的知识管理工具，主要考虑几个需求：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;必须可以满足私有化部署（受公司政策影响）。&lt;/li&gt;
&lt;li&gt;流畅的书写体验，容易上手（本人是语雀的重度使用用户，所有文档都是基于 markdown 语法）。&lt;/li&gt;
&lt;li&gt;软件成熟，文档完备。&lt;/li&gt;
&lt;li&gt;方便备份迁移。&lt;/li&gt;
&lt;li&gt;插件丰富，方便扩展。&lt;/li&gt;
&lt;li&gt;......&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;百度谷歌了一下，发现市面上用于团队知识管理的平台非常多，尤其是基于云服务的平台，如孵化自蚂蚁金服的&lt;a href=&#34;https://www.yuque.com/&#34;&gt;语雀&lt;/a&gt;、成都探码科技旗下的 &lt;a href=&#34;https://www.baklib.com/&#34;&gt;Baklib&lt;/a&gt;、2019 年 3 月 26 日被阿里巴巴全资收购的 &lt;a href=&#34;https://www.teambition.com/&#34;&gt;Teambition&lt;/a&gt;、深圳复临科技有限公司旗下的 &lt;a href=&#34;https://ones.ai/wiki.html&#34;&gt;ONES Wiki&lt;/a&gt;，等等，但它们都不是我想要的！但是，自己又不太想再去折腾 Mediawiki 或 Dokuwiki 这一类的 wiki 平台！&lt;/p&gt;
&lt;p&gt;后来，在知乎、V2EX 上看到有不少人在推荐 Confluence 。这一下子勾起了我对 Confluence 这款产品的一些印象：我个人知道 Confluence 完全是因为语雀这个平台，语雀最早在 2018 年就已经推出了可以把 Confluence 的文档导入到语雀的插件服务，当时不了解 Confluence，也没有用过这一个产品，所有也就没太在意。
&lt;img alt=&#34;yuque-import.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fo_JBn8Ie-9OMANXuoJ2RoZ6ZNNR.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;现在有这样的需求，刚好也可以尝试一下，于是到 Confluence 官网进行了解试用了一波：知识管理+论坛式的问题讨论，加上各种强大的宏插件，同时也提供了私有化的部署教程！虽然 Confluence 是一款付费软件，但万能的互联网总能找到一些白嫖的方法，而且这个方法还挺香！
&lt;img alt=&#34;Confluence-Overview.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FrIvh8BxeVBBiwBxaTTn3ZAYBpGx.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;简单聊聊 Confluence。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Atlassian Confluence（简称 Confluence）是用 JAVA 语言编写的基于 WEB 的企业 Wiki，它是由 Atlassian 公 司开发并向市场发布的。Confluence 已经在超过 100 个国家，13500 个组织中成功地应用于企业内网平台、知识管理及文档管理，涉及财富 1000 企业、政府机构、教育机构、财务金融机构及技术研究领域。包括 IBM、Sun MicroSystems、SAP 等众多知名企业使用 Confluence 来构建企业 Wiki 并面向公众开放。&lt;/p&gt;
&lt;p&gt;Confluence 使用简单，但它强大的编辑和站点管理特征能够帮助团队成员之间共享信息，文档协作，集体讨论。 目前，Confluence 被用于广泛地用于项目团队，开发团队，市场销售团队。Confluence 是一个商业软件，对商业使用的最低许可为 $1200（25 人版本），学术机构使用费减半。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Confluence 的优势&lt;/strong&gt;
**&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;企业级的安全性；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;安装简单，易于管理；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;简洁，友好的用户界面；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;强大的构造和搜索功能；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;PDF 导出和自动的重构；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;开放的 API 接口，灵活扩展和集成；&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Confluence 的特点&lt;/strong&gt;
**&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;内部网：内部网络之间可以分享想法。&lt;/li&gt;
&lt;li&gt;文件：发布，组织，搜索和文件维护。&lt;/li&gt;
&lt;li&gt;知识管理：创造，分享，评论以及编辑内容和主题。&lt;/li&gt;
&lt;li&gt;企业：良好的企业安全性，可用性和可扩展性。&lt;/li&gt;
&lt;li&gt;办公：文件搜索，浏览和编辑。&lt;/li&gt;
&lt;li&gt;SharePoint：可与 SharePoint 结合。&lt;/li&gt;
&lt;li&gt;插件：超过 200 个可用的插件扩展功能。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Confluence 的概念特征&lt;/strong&gt;
**&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;空间：分布式存储知识；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;页面：用简单的符号来描述你的想法；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;共享：和你的团队快速的协作；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;搜索：跨页面，注释和附件间的搜索；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;组织：高效地创建灵活的页面结构；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;注释：进行小组讨论；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;重获：容易找到你需要的信息；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;导出：页面乃至整个空间可以导出为 HTML，PDF，XML 文件；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;重构：高效的信息操作；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;安全：高级的权限和安全性,权限控制非常合理、方便；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;通知：通过 mail/RSS 来跟踪页面的内容变更；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;定制：颜色，风格，整个站点的布局都可以定制；&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Atlassian 在 2004-3-12 发布了 Confluence 1.0，截止 2020-8-4，Confluence 的最新版本为 7.6.2。
&lt;img alt=&#34;confluence-versions.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fmd4_J2s2d6ysCmC9xoPH4rIXi-T.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;以上就是个人对 Confluence 的一些初步了解和尝试。接下来，我们将从私有化部署来折腾一下这个企业级知识管理与协同的新宠 Confluence，敬请期待！&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E7%9F%A5%E8%AF%86%E7%AE%A1%E7%90%86/2020-08-04-zwtn5w/</link>
      <pubDate>Tue, 04 Aug 2020 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E7%9F%A5%E8%AF%86%E7%AE%A1%E7%90%86/2020-08-04-zwtn5w/</guid>
      
    </item>
    
    <item>
      <title>CentOS 6/7 安装 codon-optimizer 笔记</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2020-07-15&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2020-07-15T00:00:00&#39;&gt;2020-07-15&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-10-31&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-10-31T10:39:03&#39;&gt;2021-10-31&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;操作系统为 Red Hat Enterprise 6.5 x86_64。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;注意：&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;LDFLAGS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;-L/Bioinfo/APPS/boost_1.55/lib&amp;quot;&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;CPPFLAGS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;-I/Bioinfo/APPS/boost_1.55/include&amp;quot;&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;C_INCLUDE_PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;/Bioinfo/APPS/boost_1.55/include&amp;quot;&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# export BOOST_ROOT=&amp;quot;/Bioinfo/APPS/boost_1.55/include/boost&amp;quot;&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# 如果设置了 BOOST_ROOT，会导致 error: cannot find Boost headers version &amp;gt;= 1.48.0 异常&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;unset&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;BOOST_ROOT，会导致
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;执行安装：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;wget&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;http://www.cs.ubc.ca/labs/beta/Projects/codon-optimizer/downloads/codon-optimizer-0.1.tar.gz
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tar&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;zvxf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;codon-optimizer-0.1.tar.gz
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;codon-optimizer-0.1
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;./configure&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/home/shenweiyan/software/codon-optimizer-0.1
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make
&lt;span class=&#34;nv&#34;&gt;$make&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;简单总结：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;codon-optimizer-0.1 的安装需要 boost，CentOS 6 自带的 bootst-1.41.0-18.el6.x86_64。&lt;/li&gt;
&lt;li&gt;CentOS 6 貌似没有 1.41.0 以上的 boost rpm 包，只有 boost148-xxx.rpm、boost169-xxx.rpm 之类。&lt;/li&gt;
&lt;li&gt;源码安装 boost 请参考：&lt;a href=&#34;https://www.hotbak.net/key/CentOS65%E4%B8%8ABoost%E5%BA%93%E7%BC%96%E8%AF%91%E5%AE%89%E8%A3%85%E5%85%A8.html&#34;&gt;CentOS 安装 boost 库&lt;/a&gt;。&lt;/li&gt;
&lt;/ol&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E7%94%9F%E4%BF%A1%E5%B7%A5%E5%85%B7%E4%B8%8E%E5%BA%94%E7%94%A8/2020-07-15-tm90c2/</link>
      <pubDate>Wed, 15 Jul 2020 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E7%94%9F%E4%BF%A1%E5%B7%A5%E5%85%B7%E4%B8%8E%E5%BA%94%E7%94%A8/2020-07-15-tm90c2/</guid>
      
    </item>
    
    <item>
      <title>ImageMagick 图像处理安装与使用</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2020-07-07&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2020-07-07T00:00:00&#39;&gt;2020-07-07&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2024-09-10&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2024-09-10T00:00:00&#39;&gt;2024-09-10&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;什么是 ImageMagick，先来看一段官网的介绍。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Use ImageMagick&lt;a href=&#34;http://tarr.uspto.gov/servlet/tarr?regser=serial&amp;amp;entry=78333969&#34;&gt;®&lt;/a&gt; to create, edit, compose, or convert bitmap images. It can read and write images in a variety of &lt;a href=&#34;https://imagemagick.org/script/formats.php&#34;&gt;formats&lt;/a&gt; (over 200) including PNG, JPEG, GIF, HEIC, TIFF, &lt;a href=&#34;https://imagemagick.org/script/motion-picture.php&#34;&gt;DPX&lt;/a&gt;, &lt;a href=&#34;https://imagemagick.org/script/high-dynamic-range.php&#34;&gt;EXR&lt;/a&gt;, WebP, Postscript, PDF, and SVG. Use ImageMagick to resize, flip, mirror, rotate, distort, shear and transform images, adjust image colors, apply various special effects, or draw text, lines, polygons, ellipses and Bézier curves.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;简单的来说，ImageMagick 就是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ImageMagick（简称 IM）是一个支持 GPL 协议的开源免费软件包。全部源码开放，可以自由使用，复制，修改，发布。&lt;/li&gt;
&lt;li&gt;它由一组命令行工具组成的。&lt;/li&gt;
&lt;li&gt;它可以对超过 200 种的图像格式（包括 DPX, EXR, GIF, JPEG, JPEG-2000, PDF, PhotoCD, PNG, Postscript, SVG, 和 TIFF 等等），进行读、写、编辑和转换的操作。&lt;/li&gt;
&lt;li&gt;它支持多数主流操作系统，其中包括 UNIX、Mac OS X 、Windows，以及 IOS、Android 等。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;相比 PhotoShop 和 GIMP 提供的图形用户接口 (GUI) 编辑图像，ImageMagick 通过一组命令行工具来操作图片，更有助于批量化的图片处理。你当然可以用 PhotoShop 或 GIMP 这样的软件来处理图像。没人禁止你这么做，就像没人禁止你用大炮打蚊子一样。不过依我看，打蚊子最好还是用电蚊拍，而要处理大量图像的话，尤其当你只想批量转换一些图片格式，或者批量生成缩略图，调整分辨率，我推荐 ImageMagick。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;支持的程序语言&lt;/strong&gt;：Perl, C, C++, Python, PHP, R 等。     &lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://imagemagick.org/script/develop.php&#34;&gt;&lt;strong&gt;ImageMagick 接口&lt;/strong&gt;&lt;/a&gt;：&lt;a href=&#34;https://imagemagick.org/script/develop.php#perl&#34;&gt;PerlMagick&lt;/a&gt; (Perl), &lt;a href=&#34;https://imagemagick.org/script/develop.php#php&#34;&gt;IMagick&lt;/a&gt; (PHP), &lt;a href=&#34;https://imagemagick.org/script/develop.php#python&#34;&gt;PythonMagick&lt;/a&gt; (Python), &lt;a href=&#34;https://imagemagick.org/script/develop.php#r&#34;&gt;magick&lt;/a&gt; (R), 等。&lt;/p&gt;
&lt;h2 id=&#34;1-安装-imagemagick&#34;&gt;1. 安装 ImageMagick&lt;a class=&#34;headerlink&#34; href=&#34;#1-安装-imagemagick&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;这里主要介绍一下 CentOS 7 下的 ImageMagick 安装，其他平台下的安装可以自行谷歌。&lt;/p&gt;
&lt;h3 id=&#34;11-源码安装&#34;&gt;1.1 源码安装&lt;a class=&#34;headerlink&#34; href=&#34;#11-源码安装&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;如果你没有 root 权限，可以在 ImageMagick 安装过程中发现缺乏什么依赖，就手动去下载安装该依赖。过程可能很繁琐，环境配置起来可能也很复杂。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 安装依赖&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;yum&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-y&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bzip2-devel&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;freetype-devel&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;libjpeg-devel&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;libpng-devel&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;libtiff-devel&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;giflib-devel&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;zlib-devel&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ghostscript-devel&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;djvulibre-devel&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;libwmf-devel&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;jasper-devel&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;libtool-ltdl-devel&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;libX11-devel&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;libXext-devel&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;libXt-devel&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;lcms-devel&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;libxml2-devel&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;librsvg2-devel&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;OpenEXR-devel&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;php-devel

&lt;span class=&#34;c1&#34;&gt;# 可以直接通过 github 下载最新版本&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;git&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;clone&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://github.com/ImageMagick/ImageMagick.git&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# 下载并安装制定版本 ImageMagick&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;wget&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://download.imagemagick.org/archive/releases/ImageMagick-7.0.10-23.tar.xz
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tar&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;xvJf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ImageMagick-7.0.10-23.tar.xz
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ImageMagick-7.0.10-23
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;./configure&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/data/software/imagemagick-7.0.10-23
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;12-conda-安装&#34;&gt;1.2 conda 安装&lt;a class=&#34;headerlink&#34; href=&#34;#12-conda-安装&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;没有 root 的权限，使用 &lt;code&gt;conda&lt;/code&gt; 安装 ImageMagick 是最快捷有效的方式，推荐使用。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;search&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;imagemagick
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;create&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-n&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;imagemagick&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;imagemagick
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;2-使用体验&#34;&gt;2. 使用体验&lt;a class=&#34;headerlink&#34; href=&#34;#2-使用体验&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;ImageMagick 的使用网络上教程非常非常多，这里就不一一再重复了，需要的自己去百度或者谷歌。说几点使用过程中的小发现。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;从 ImageMagick 7 起，&lt;code&gt;magick&lt;/code&gt; 命令替换了原来的 &lt;code&gt;convert&lt;/code&gt; 命令，但 &lt;code&gt;convert&lt;/code&gt; 命令依然可以使用。     &lt;br /&gt;
&lt;img alt=&#34;imagemagick-7.0.10-23.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FjVqFwYsqGwrbxwL3YgEK2z9C5wu.png&#34; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;ImageMagick 6.7.8-9 版本的 &lt;code&gt;convert&lt;/code&gt; 命令存在一些 bug，例如本人在执行 PDF→TIFF 的转换过程经常会出现一些莫名其妙的报错；升级成 7.0.10-23 的 &lt;code&gt;magick&lt;/code&gt; 后，恢复正常！&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;ImageMagick 中的 &lt;code&gt;convert&lt;/code&gt;/&lt;code&gt;magick&lt;/code&gt; 一个命令就包含了超过 200 多个子命令（参数），功能非常强悍，也让人眼花缭乱。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;convert&lt;/code&gt;/&lt;code&gt;magick&lt;/code&gt; 不同的参数排列顺序，有时候会得到截然不同的处理性能和效果，这是让人非常头疼的一个问题，有时候你都不知道这个参数到底是放在输入文件前，还是放在输入文件后！&lt;/li&gt;
&lt;li&gt;正常来说，一个图片当总像素大小保持不变，提高 dpi 会导致图片的物理尺寸变小。在 ImageMagick 中以 dpi 为变量，如何保证总像素大小不变前提下，自动转换图片格式，目前没找到更好的解决方法。
   &lt;img alt=&#34;ImageMagick-dpi&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FkQpB1Ot1G8fM73zjHqNXB5uCUet.png&#34; /&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;3-题外话&#34;&gt;3. 题外话&lt;a class=&#34;headerlink&#34; href=&#34;#3-题外话&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;一般的杂志期刊对于投稿图片都是有要求的，如果想要得到发文级别分辨率和尺寸的图片，除了在画图时进行参数设置，或手动 PS 以外，或许还有一些可以自动完成这一系列操作的平台，或者 AI 神器吧！遗憾的是，目前我还没找到！&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E5%9B%BE%E5%83%8F%E4%B8%8EGUI/2020-07-07-learn-imagemagick/</link>
      <pubDate>Tue, 07 Jul 2020 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E5%9B%BE%E5%83%8F%E4%B8%8EGUI/2020-07-07-learn-imagemagick/</guid>
      
    </item>
    
    <item>
      <title>SCI 投稿中像素、DPI、图片分辨率的一些知识</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2020-07-03&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2020-07-03T00:00:00&#39;&gt;2020-07-03&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-06-25&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-06-25T10:36:10&#39;&gt;2021-06-25&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;最近在学习 Linux 命令行下的 ImageMagick 图像处理，对图像本身的一些概念有点懵，搜集整理了一点资料，仅供自己和大家学习与参考。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;SCI 期刊对分辨率大多都有一定的要求，例如一段来自 Elsevier 旗下期刊的稿约：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Formats&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If your electronic artwork is created in a Microsoft Office application (Word, PowerPoint, Excel) then please supply &amp;lsquo;as is&amp;rsquo; in the native document format.&lt;/li&gt;
&lt;li&gt;Regardless of the application used other than Microsoft Office, when your electronic artwork is finalized, please &amp;lsquo;Save as&amp;rsquo; or convert the images to one of the following formats (note the resolution requirements for line drawings, halftones, and line/halftone combinations given below):&lt;/li&gt;
&lt;li&gt;EPS (or PDF): Vector drawings, embed all used fonts.&lt;/li&gt;
&lt;li&gt;TIFF (or JPEG): Color or grayscale photographs (halftones), keep to a minimum of 300 dpi.&lt;/li&gt;
&lt;li&gt;TIFF (or JPEG): Bitmapped (pure black &amp;amp; white pixels) line drawings, keep to a minimum of 1000 dpi.&lt;/li&gt;
&lt;li&gt;TIFF (or JPEG): Combinations bitmapped line/half-tone (color or grayscale), keep to a minimum of 500 dpi.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;这段稿约针对图片的格式提出了要求，可以概括为以下几点：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;期刊可以接受这些文件格式：EPS、PDF、TIFF、JPG；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;矢量图请以 EPS、PDF 格式提交；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;彩色或灰度照片（我们常说成黑白照片）以 TIFF、JPG 格式提交，分辨率至少 300 dpi，比如电泳图、手术照片、CT 影像、电镜图等；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;计算机绘制的图片以 TIFF、JPG 格式提交，分辨率至少 1000 dpi，比如曲线、数据统计图表、化学及生物结构图等等；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;组合图（由计算机绘图和照片组合而成的图片）以 TIFF、JPG 格式提交，分辨率至少 500 dpi。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;作为小白，如果你第一次看到这些信息，是不是很懵？像素、分辨率、dpi、ppi 这些都是什么鬼？下面，我们来聊一下这些容易混淆的概念，顺便讲点图像大小和印刷输出的一些基本知识。&lt;/p&gt;
&lt;h2 id=&#34;1-关于像素&#34;&gt;1. 关于像素&lt;a class=&#34;headerlink&#34; href=&#34;#1-关于像素&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;像素是图像显示的基本单位，它可以表示图形尺寸的大小。&lt;/p&gt;
&lt;p&gt;像素主要是相对位图而言的，无论其格式是哪种，只要是位图如果不停放大，最终你都会看到图片实际上都是以一个个的彩色方块相互堆叠而成，这样的一个彩色方块就是一个像素，英文名为 Pixel，简写为 PX。&lt;/p&gt;
&lt;p align=&#34;center&#34;&gt;
    &lt;img src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FpW2jx5Or4xHmxLR7Ans5pOj5qOa.png&#34; alt=&#39;像素&#39;&gt;&lt;br&gt;
&lt;/p&gt;

&lt;h2 id=&#34;2-关于分辨率和-dpi&#34;&gt;2. 关于分辨率和 DPI&lt;a class=&#34;headerlink&#34; href=&#34;#2-关于分辨率和-dpi&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;提起分辨率，我们需要了解两个概念，图像分辨率和输出分辨率。&lt;/p&gt;
&lt;p&gt;图像分辨率的基本计量单位是每英寸的像素数，简写为 ppi。一张图的分辨率是用横向像素量 x 纵向像素量来表示，比如 640×480 像素、1280×960 像素等，一张分辨率为 640 x 480 的图片它的分辨率就达到了 307,200 像素，也就是我们常说的 30 万像素;而一张分辨率为 1600 x 1200 的图片，它的像素就是 200 万。图片的分辨率和图片的宽、高尺寸一起决定了图像文件的大小及图像质量。比如，一幅图宽 12 英寸、高 6 英寸，分辨率为 66PPI，如果保持图像文件的大小不变，也就是总的像素数不变，将分辨率降为 33PPI，在宽高比不变的情况下，图像的宽将变为 24 英寸、高将变为 12 英寸。
&lt;img alt=&#34;原图.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fua0PjhUnrf8URw7ngpPi_zsTyaF.png&#34; /&gt;
&lt;img alt=&#34;改图.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fi9BbRCpud_564CDLqOztTYdY-tg.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;而决定图像输出质量的是图像的输出分辨率，描述的是设备输出图像时每英寸可产生的点数(dpi)，以 dpi 为单位。大部分时候我们说的输出分辨率主要是指印刷需要的分辨率。——如果你搞不清输出分辨率是怎么回事也不要紧，你只要记住下面的常识就行了：&lt;/p&gt;
&lt;p&gt;通常报纸印刷采用 75LPI，彩色印刷品使用 150LPI 或 175LPI，因此在 1∶1 印刷的情况下，针对不同用途，原始图像的分辨率应分别是 150PPI、300PPI 和 350PPI。&lt;/p&gt;
&lt;p&gt;另外再给你一张表，对照表看就更清楚了：
&lt;img alt=&#34;图像分辨率对照表.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fs0G63wiyZcjlbCQQOJr7bh9MXxW.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;从技术角度说，“像素”只存在于电脑显示领域，而“点”只出现于打印或印刷领域。对电脑显示屏，分辨率是用像素数目衡量;对数字文件印刷，分辨率是通常用每英寸所含点或像素〔dpi〕来衡量。&lt;/p&gt;
&lt;h2 id=&#34;3-相同的分辨率更高的-dpi-表现为物理尺寸更小&#34;&gt;3. 相同的分辨率，更高的 DPI 表现为物理尺寸更小&lt;a class=&#34;headerlink&#34; href=&#34;#3-相同的分辨率更高的-dpi-表现为物理尺寸更小&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&#34;px-dpi-1.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fi-4JSWW1z88XPAY0OtvShNlWljN.png&#34; /&gt;  &lt;br /&gt;
&lt;img alt=&#34;px-dpi-2.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FoqHtQCddg97JfCM3gzgICM39CkK.png&#34; /&gt;  &lt;br /&gt;
在这里，右图中的像素跟左边的原始图像是一样，我们将 DPI 值从 72 提高到了 300，效果是每英寸现在有更多的点，但是由于构成图像的总像素数没有变化，所以数学上表现的是图像变小，构成图像的每个像素变得更小。&lt;/p&gt;
&lt;p&gt;以简化的图像表达就是：  &lt;br /&gt;
&lt;img alt=&#34;px-dpi-3.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FszZTCCvOBe-NcaE2N3MgVJO9m7R.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;4-物理尺寸相同dpi-较低表现为较低的分辨率&#34;&gt;4. 物理尺寸相同，DPI 较低表现为较低的分辨率&lt;a class=&#34;headerlink&#34; href=&#34;#4-物理尺寸相同dpi-较低表现为较低的分辨率&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&#34;px-dpi-a.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FoLUNgtUAjC8RsaEj204MUtwQ3tz.png&#34; /&gt;  &lt;br /&gt;
&lt;img alt=&#34;px-dpi-b.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FtQWH2FpCBvxqYND2lCpWsTuu5ii.png&#34; /&gt;     &lt;/p&gt;
&lt;p&gt;简单的来说，图像分辨率(每英寸像素数)和 DPI (每英寸点数)两者相互影响，这点希望你得搞清楚。   &lt;br /&gt;
&lt;img alt=&#34;px-dpi-c.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FiGNzn4C-GEjPc-FvK3p_4FwHKSf.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;5-修改图片分辨率&#34;&gt;5. 修改图片分辨率&lt;a class=&#34;headerlink&#34; href=&#34;#5-修改图片分辨率&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;把基本的一些概念搞清楚，明确图片的要求后，接下来就是动手操作的时候了。这里参考的是筑研医学公众号《&lt;a href=&#34;https://mp.weixin.qq.com/s/F6yDgJ0tz9Wttn2qiCuXyA&#34;&gt;投稿教学 | SCI 投稿之图片分辨率问题&lt;/a&gt;》的操作，即 Adobe Photoshop CC 2019，其他的版本在操作上也是几乎一样的。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;用 Photoshop（PS）打开图片，点击【图像】-【图像大小】。    &lt;br /&gt;
&lt;img alt=&#34;01.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FhrJgkUyKWGHBa4Ytap4f7PnBGq-.jpeg&#34; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;然后就可以看到如下界面，是不是看到了上面梳理过的概念？      &lt;br /&gt;
&lt;img alt=&#34;02.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fr8J_c-6O5bM5uGCW0aqJV4MU3nw.jpeg&#34; /&gt;      &lt;br /&gt;
默认情况下，分辨率用像素密度来表示，单位是 ppi；宽度和高度则以厘米为单位，说明以目前指定的像素密度来呈现该尺寸的图片，在实际的物理世界中会是 141.11 x 115.57 cm 的大小；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;当然，我们可以自由地更改图像大小和分辨率的表示方式，比如我们将高度和宽度的单位从默认的【厘米】换成【像素】，数值就会和上面的【尺寸】是一样的啦：    &lt;br /&gt;
&lt;img alt=&#34;03.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FviO799ox3l6_KF1jgfV3Xr4Hy9A.jpeg&#34; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;我们记住这张图的宽度是 4000 像素，然后按照期刊的要求，将这张彩色照片的分辨率调整为 300 像素/英寸，然后 PS 就自动用插值的方式，帮我们保留了图片的物理尺寸 141.11 x 115.57 cm，让这张图片的像素数暴涨：   &lt;br /&gt;
&lt;img alt=&#34;04.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fk76_f5TMqkkTRThd5Ifj6f5rwQ7.jpeg&#34; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;这不是我们想要的，我们需要手动将图片的像素数纠正过来，在【宽度】里重新填入原先的 4000 像素，一切就正常了：   &lt;br /&gt;
&lt;img alt=&#34;05.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FlRjvWqhoKOsmoTUVpFjACLTHDTU.jpeg&#34; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;接下来还没完哦！把【宽度】的单位修改成【英寸】、【厘米】，或者【毫米】这样的物理单位，检查一下这张图片修改成 300 ppi 分辨率后，其“物理尺寸”是否符合期刊的要求：   &lt;br /&gt;
&lt;img alt=&#34;06.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fl8c7Jt2hNt8SATdijMWo9BrgC3z.jpeg&#34; /&gt;   &lt;br /&gt;
有些出版社对作者提交的图片的物理尺寸是有要求的，除了分辨率要达到指定的清晰度，图片的尺寸也不能超过一定的版面大小，否则无法正常印刷。我们来看 Springer 旗下某期刊对图片大小的要求：&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Figure placement and size:&lt;/strong&gt;    &lt;br /&gt;
When preparing your figures, size figures to fit in the column width.   &lt;br /&gt;
Figures should be 39 mm, 84 mm, 129 mm, or 174 mm wide and not higher than 234 mm.   &lt;br /&gt;
The publisher reserves the right to reduce or enlarge figures._&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;可见，该期刊要求图片尺寸至少要满足“不大于 174 x 234 mm”的要求，那我们这张图明显是超出了的：   &lt;br /&gt;
&lt;img alt=&#34;6-0.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Flhs01Nqee_vnldPW4iBStzvjOR8.jpeg&#34; /&gt;&lt;/p&gt;
&lt;p&gt;遇到这种问题，我们要分情况讨论：     &lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;如果这张图是多张小图拼合而成的，那么我们可以考虑重新换一种排版方式来拼图，比如这张（已打码），是 2x2 的排列方式，我们可以改成 4x1 的纵列，然后把总的宽度控制在 174mm 以内即可：   &lt;br /&gt;
&lt;img alt=&#34;6-1.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fk6AgkPr65tCPB1PhC4RU1yigF81.jpeg&#34; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;如果这张图是一张照片，那么在不影响可读性的情况下，我们直接把宽度改成 174mm，进行缩小的操作，并保存：   &lt;br /&gt;
&lt;img alt=&#34;6-2.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FleZx3qUBM2Uxrw1QVWvoZyrOYH0.jpeg&#34; /&gt;     &lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;如果缩小后会导致看不清照片的细节，那么可以考虑适当裁剪，舍弃照片中无意义或不重要的部分：
   &lt;img alt=&#34;6-3.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FglwV-frlXaDDn_XauJre49yAKn4.jpeg&#34; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;如果缩小会影响图片的可读性，比如图片中的含有较多字号比较小的文字，可以提高分辨率，到 600 ppi，试试宽度是否可以控制在期刊要求内，这张就可以：
   &lt;img alt=&#34;6-4.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fs2XuJPxMWacCj4Kk6ULqg_YicLn.jpeg&#34; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;如果上述方法都不理想，比如图片中有大量非矢量的图线和文字不方便缩放，或缩放效果不佳，建议重新用作图软件导出为矢量图，或修改图片中的文字，保证至少有 8 pt 的大小（注意，是阿拉伯数字的“8”号字，不是“小四”这种字号）再导出。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;以上就是 SCI 投稿中像素、DPI、图片分辨率的一些基础知识，以及期刊对图片大小和分辨率的要求，并参考一些前辈的做法来调整自己的图片来符合期刊要求。&lt;/p&gt;
&lt;p&gt;本文章的内容主要来源于搜狐秒秒学的《&lt;a href=&#34;https://www.sohu.com/a/139247123_409010&#34;&gt;搞不清像素、DPI、图片分辨率的看过来!&lt;/a&gt; 》和筑研医学公众号的《&lt;a href=&#34;https://mp.weixin.qq.com/s/F6yDgJ0tz9Wttn2qiCuXyA&#34;&gt;投稿教学 | SCI 投稿之图片分辨率问题&lt;/a&gt;》一文，部分内容有增删改，仅作交流与学习使用。&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E7%94%9F%E7%89%A9%E4%BF%A1%E6%81%AF/%E8%BD%AF%E4%BB%B6/2020-07-03-xo4ieg/</link>
      <pubDate>Fri, 03 Jul 2020 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E7%94%9F%E7%89%A9%E4%BF%A1%E6%81%AF/%E8%BD%AF%E4%BB%B6/2020-07-03-xo4ieg/</guid>
      
    </item>
    
    <item>
      <title>生物信息学的一些开源学习资源</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2020-06-23&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2020-06-23T00:00:00&#39;&gt;2020-06-23&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-06-25&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-06-25T10:34:48&#39;&gt;2021-06-25&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://indexofire.github.io/pathongs/&#34;&gt;病原微生物高通量测序数据分析笔记&lt;/a&gt; - 杭州市疾控中心微生物检验科病原微生物测序实验室&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.math.pku.edu.cn/teachers/lidf/docs/Rbook/html/_Rbook/index.html&#34;&gt;R 语言教程&lt;/a&gt; - 李东风&lt;/li&gt;
&lt;/ul&gt;</description>
      <link>https://shenwy.com/yuque/%E7%94%9F%E7%89%A9%E4%BF%A1%E6%81%AF/%E8%B5%84%E6%BA%90/2020-06-23-baatnb/</link>
      <pubDate>Tue, 23 Jun 2020 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E7%94%9F%E7%89%A9%E4%BF%A1%E6%81%AF/%E8%B5%84%E6%BA%90/2020-06-23-baatnb/</guid>
      
    </item>
    
    <item>
      <title>各个平台下 Perl 模块安装总结</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2020-06-19&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2020-06-19T00:00:00&#39;&gt;2020-06-19&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2023-08-23&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2023-08-23T14:45:53&#39;&gt;2023-08-23&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;从 1994 年 10 月 17 日发布的  Perl 5.000 起，Perl  增加了模块的概念，用来提供面向对象编程的能力。这是 Perl 语言发展史上的一个里程碑。此后，广大自由软件爱好者开发了大量功能强大、构思精巧的 Perl 模块，极大地扩展了 Perl 语言的功能。&lt;/p&gt;
&lt;p&gt;CPAN，Comprehensive Perl Archive Network（&lt;a href=&#34;https://www.cpan.org/&#34;&gt;https://www.cpan.org/&lt;/a&gt;) 是 Perl 模块最大的集散地，包含了现今公布的几乎所有的 perl 模块。CPAN 从  1995 年 10 月 26 日开始创建，截止 2019 年 4 月该网站已经囊括了超过  13,750 位作者编写的  180,202 个 Perl 模块，其镜像分布在全球在 257 台服务器上。&lt;/p&gt;
&lt;p&gt;Perl 作为生物信息数据预处理、文本处理和格式转换中的一把瑞士军刀，其强大和重要性不言而喻。今天，我们在这里主要介绍一下各种平台下 perl 模块的安装方法。以安装 Bio::SeqIO  模块为例。&lt;/p&gt;
&lt;h2 id=&#34;一linux-下安装-perl-模块&#34;&gt;一、Linux 下安装 Perl 模块&lt;a class=&#34;headerlink&#34; href=&#34;#一linux-下安装-perl-模块&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Linux/Unix 下安装 Perl 模块有两种方法：手工安装和自动安装。 &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;第一种方法是从 CPAN 上下载您需要的模块，手工编译、安装；&lt;/li&gt;
&lt;li&gt;第二种方法是使用 CPAN 模块自动完成下载、编译、安装的全过程。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;11-手工安装&#34;&gt;1.1 手工安装&lt;a class=&#34;headerlink&#34; href=&#34;#11-手工安装&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 从 CPAN(https://metacpan.org/)下载了 BioPerl 模块 1.7.5 版的压缩文件 BioPerl-1.7.5.tar.gz&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# 假设放在/usr/local/src/下。&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/local/src

&lt;span class=&#34;c1&#34;&gt;# 解压缩这个文件,这时会新建一个 BioPerl-1.7.5 的目录。&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tar&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;xvzf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;BioPerl-1.7.5.tar.gz

&lt;span class=&#34;c1&#34;&gt;# 换到解压后的目录&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;BioPerl-1.7.5

&lt;span class=&#34;c1&#34;&gt;# 生成 makefile，如果要指定模块的安装路径，需要添加 PREFIX=/path/to/install 路径&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;perl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Makefile.PL&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;PREFIX&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/home/shenweiyan/perl_modules&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# 生成模块&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make

&lt;span class=&#34;c1&#34;&gt;# 测试模块(这步可有可无)：&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;test&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# 如果测试结果报告&amp;quot;all test ok&amp;quot;，您就可以放心地安装编译好的模块了。&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# 安装模块前，先要确保您对 perl5 安装目录有可写权限(通常以 su 命令获得)，执行：&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install

&lt;span class=&#34;c1&#34;&gt;# 现在，试试 Bio::SeqIO 模块吧。如果下面的命令没有给出任何输出，那就没问题。&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;perl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-MBio::SeqIO&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-e1

&lt;span class=&#34;c1&#34;&gt;# 如果指定 PREFIX 安装路径，模块安装完成后，需要把模块安装的新路径添加到 PERL5LIB 环境变量&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;PERL5LIB&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PERL5LIB&lt;/span&gt;:/home/shenweiyan/perl_modules/lib/site_perl&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;//或者把该行内容添加到&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~/.bashrc
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;bioperl-install.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FhLB4yFtOuNLVOxoTHdk3Zdn6bI3.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;上述步骤适合于 Linux/Unix 下绝大多数的 Perl 模块。可能还有少数模块的安装方法略有差别，所以最好先看看安装目录里的 README 或 INSTALL。&lt;/p&gt;
&lt;p&gt;有的时候如果是 Build.PL 的需要以下安装步骤：（需要 Module::Build 模块支持）&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;perl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Build.PL
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;./Build
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;./Build&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;test&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;./Build&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;12-自动安装&#34;&gt;1.2 自动安装&lt;a class=&#34;headerlink&#34; href=&#34;#12-自动安装&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Linux/Unix 下自动安装 Perl 模块主要有两种方法，一是利用 &lt;code&gt;perl -MCPAN -e &#39;install 模块&#39;&lt;/code&gt;  安装；二是直接使用 &lt;code&gt;cpan&lt;/code&gt;  的命令执行安装。这两种方法都是通过与  CPAN 进行交互，然后执行对应模块的自动安装，本质上都是一样的。&lt;/p&gt;
&lt;h4 id=&#34;121-使用-cpan-模块&#34;&gt;1.2.1 使用 CPAN 模块&lt;a class=&#34;headerlink&#34; href=&#34;#121-使用-cpan-模块&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;h5 id=&#34;自动安装方法一&#34;&gt;自动安装方法一&lt;a class=&#34;headerlink&#34; href=&#34;#自动安装方法一&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;执行 &lt;code&gt;perl -MCPAN -e shell&lt;/code&gt;  命令，或者直接运行 &lt;code&gt;cpan&lt;/code&gt;  命令，都可以进入 cpan 交互模式。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&#34;cpan-linux.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FrNJmN-R_EWHmfd9gkTml9QAgPYi.png&#34; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;安装前需要先联上网，有无 root 权限均可。对于非 root 用户，Perl 提供了 &amp;lsquo;&lt;strong&gt;local::lib&lt;/strong&gt;&amp;lsquo;、&amp;rsquo;&lt;strong&gt;sudo&lt;/strong&gt;&amp;rsquo; or &amp;lsquo;&lt;strong&gt;manual&lt;/strong&gt;&amp;rsquo; 三种使用 CPAN 模块自动安装的方式，初次运行 CPAN 时需要用户自行进行选择设置，默认为  &lt;strong&gt;&amp;lsquo;local::lib&lt;/strong&gt;&amp;lsquo;。&lt;/li&gt;
&lt;li&gt;初次运行 CPAN 时需要做一些设置，如果我们的机器是直接与因特网相联，那么一路回车就行了。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&#34;cpan-setting.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fp9FTaXM_d0X4ICluF8bE1-hocoI.jpeg&#34; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;常用 cpan 命令：&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 获得帮助&lt;/span&gt;
cpan&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;help&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# 列出 CPAN 上所有模块的列表&lt;/span&gt;
cpan&amp;gt;m

&lt;span class=&#34;c1&#34;&gt;# 安装模块，自动完成 Bio::SeqIO 模块从下载到安装的全过程。&lt;/span&gt;
cpan&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Bio::SeqIO

&lt;span class=&#34;c1&#34;&gt;# 查看当前 CPAN 使用的镜像站点&lt;/span&gt;
cpan&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;o&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;urllist

&lt;span class=&#34;c1&#34;&gt;# 查看当前 CPAN 的配置信息&lt;/span&gt;
cpan&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;o&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conf

&lt;span class=&#34;c1&#34;&gt;# 退出&lt;/span&gt;
cpan&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;quit
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;切换 cpan 的自动安装模式，从 &lt;strong&gt;local::lib&lt;/strong&gt; 切换成 &lt;strong&gt;sudo&lt;/strong&gt;（参考：&lt;a href=&#34;https://stackoverflow.com/questions/9409888/when-using-cpan-in-linux-ubuntu-should-i-run-it-using-sudo-as-root-or-as-my-de/9410122#9410122&#34;&gt;这里&lt;/a&gt;）&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;如果你使用 &lt;strong&gt;su root&lt;/strong&gt; 的方式切换到 root，然后执行 &lt;strong&gt;cpan&lt;/strong&gt; 进入界面执行模块，对应的模块会依然默认使用 &lt;strong&gt;local::lib&lt;/strong&gt; 的方式安装到 su root 切换前所对应用户的 \~/perl5/lib/perl5 目录下。&lt;/p&gt;
&lt;p&gt;针对这种情况，你就需要使用 &lt;strong&gt;su - root&lt;/strong&gt; 的方式切换到 root，这样 &lt;strong&gt;cpan&lt;/strong&gt; 进入界面执行模块安装才会自动切换到 sudo 模式，把模块自动安装到默认 Perl 对应的 lib 目录。&lt;/p&gt;
&lt;p&gt;You should run the cpan command as your normal user. You have two choices:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Install modules into a directory under your home dir. &lt;a href=&#34;https://metacpan.org/pod/local::lib&#34;&gt;local::lib&lt;/a&gt; will help you set that up.&lt;/li&gt;
&lt;li&gt;Configure cpan to use sudo during the install phase. You do that by starting the cpan shell and typing:&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;o&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make_install_make_command&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;sudo make&amp;#39;&lt;/span&gt;
o&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mbuild_install_build_command&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;sudo ./Build&amp;#39;&lt;/span&gt;
o&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;commit
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;The first line configures &lt;a href=&#34;https://metacpan.org/pod/ExtUtils::MakeMaker&#34;&gt;MakeMaker&lt;/a&gt; to use sudo. The second line does the same for &lt;a href=&#34;https://metacpan.org/pod/Module::Build&#34;&gt;Module::Build&lt;/a&gt;. The third line saves the changes.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h5 id=&#34;自动安装方法二&#34;&gt;自动安装方法二&lt;a class=&#34;headerlink&#34; href=&#34;#自动安装方法二&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;可以使用命令行的方式执行安装。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;cpan&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-i&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;模块名

例如：cpan&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-i&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;CGI
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4 id=&#34;123-修改-cpan-镜像源&#34;&gt;1.2.3 修改 CPAN 镜像源&lt;a class=&#34;headerlink&#34; href=&#34;#123-修改-cpan-镜像源&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;安装 perl 下的很多模块文件时，比较快捷的方法是使用 cpan 工具。默认 cpan shell 使用的是 cpan.org 的源，在国内使用的话速度会非常的慢。如果更换为国内的如阿里或网易等公司的源的话，速度会明显提高。&lt;/p&gt;
&lt;p&gt;CPAN (The Comprehensive Perl Archive Network) 镜像源的配置文件为 &lt;code&gt;MyConfig.pm&lt;/code&gt;（一般位于 &lt;code&gt;~/.cpan/CPAN/MyConfig.pm&lt;/code&gt;），可使用包管理脚本 &lt;code&gt;cpan&lt;/code&gt; 进行修改。关于 CPAN 镜像使用帮助，可以参考：&lt;a href=&#34;https://mirrors.tuna.tsinghua.edu.cn/help/CPAN/&#34;&gt;清华大学开源软件镜像站 - CPAN 镜像使用帮助&lt;/a&gt;，以下为部分摘录。&lt;/p&gt;
&lt;h5 id=&#34;初次使用&#34;&gt;初次使用&lt;a class=&#34;headerlink&#34; href=&#34;#初次使用&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;如果 &lt;code&gt;MyConfig.pm&lt;/code&gt; 配置文件不存在，在命令行中执行：
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 自动生成 MyConfig.pm&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## 对于 Perl 5.36 （或 CPAN 2.29）及以上，使用如下命令&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;PERL_MM_USE_DEFAULT&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;perl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-MCPAN&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-e&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;CPAN::HandleConfig-&amp;gt;edit(&amp;quot;pushy_https&amp;quot;, 0); CPAN::HandleConfig-&amp;gt;edit(&amp;quot;urllist&amp;quot;, &amp;quot;unshift&amp;quot;, &amp;quot;https://mirrors.tuna.tsinghua.edu.cn/CPAN/&amp;quot;); mkmyconfig&amp;#39;&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## 对于较久版本，使用如下命令&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;PERL_MM_USE_DEFAULT&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;perl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-MCPAN&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-e&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;CPAN::HandleConfig-&amp;gt;edit(&amp;quot;urllist&amp;quot;, &amp;quot;unshift&amp;quot;, &amp;quot;https://mirrors.tuna.tsinghua.edu.cn/CPAN/&amp;quot;); mkmyconfig&amp;#39;&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# 或不使用默认配置，手动确认各个配置选项&lt;/span&gt;
perl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-MCPAN&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-e&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;mkmyconfig&amp;#39;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;h5 id=&#34;已有配置&#34;&gt;已有配置&lt;a class=&#34;headerlink&#34; href=&#34;#已有配置&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;在命令行中执行 &lt;code&gt;cpan&lt;/code&gt;  命令，或者通过  &lt;code&gt;perl -MCPAN -e shell&lt;/code&gt; 命令进入 CPAN 交互模式查看当前源配置。&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;cpan&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;o&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;conf&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;CPAN::&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;Config&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;options&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;sr&#34;&gt;/root/&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cpan&lt;/span&gt;&lt;span class=&#34;sr&#34;&gt;/CPAN/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MyConfig&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pm:&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;commit&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;             &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Commit&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;changes&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;to&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;disk&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;defaults&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;           &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Reload&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;defaults&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;disk&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;help&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;               &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Short&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;help&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;about&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;o conf&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;usage&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;init&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;               &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Interactive&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;setting&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;of&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;all&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;options&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;

&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;applypatch&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;         &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[]&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;auto_commit&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;build_cache&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;build_dir&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;sr&#34;&gt;/root/&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cpan&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;build&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;build_dir_reuse&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;......&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# 列出当前的镜像设置&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;cpan&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;o&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;conf&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;urllist&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;urllist&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;http:&lt;/span&gt;&lt;span class=&#34;sr&#34;&gt;//&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;www&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cpan&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;org&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Type&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;o conf&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;to&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;view&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;all&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;configuration&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;items&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;增加源或移出源并提交&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;cpan&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;o&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;urllist
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;urllist
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;http://www.cpan.org/&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
Type&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;o conf&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;view&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;all&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;configuration&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;items

&lt;span class=&#34;c1&#34;&gt;# 将清华大学 CPAN 镜像加入镜像列表首位&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# 注：若已在列表中则可跳过本步直接退出，修改列表不会执行自动去重&lt;/span&gt;
cpan&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;o&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;urllist&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;unshift&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://mirrors.tuna.tsinghua.edu.cn/CPAN/

&lt;span class=&#34;c1&#34;&gt;# 或将清华大学 CPAN 镜像加入镜像列表末尾&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# 注：本命令和上面的命令执行一个即可，修改列表不会执行自动去重&lt;/span&gt;
cpan&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;o&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;urllist&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;push&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://mirrors.tuna.tsinghua.edu.cn/CPAN/
Please&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;use&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;o conf commit&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;config&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;permanent!

&lt;span class=&#34;c1&#34;&gt;# 或清空镜像列表，仅保留本站&lt;/span&gt;
cpan&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;o&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;urllist&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://mirrors.tuna.tsinghua.edu.cn/CPAN/

&lt;span class=&#34;c1&#34;&gt;# Perl 5.36 及以上用户需要关闭 pushy_https 以使用镜像站&lt;/span&gt;
cpan&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;o&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pushy_https&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# 保存修改后的配置至 MyConfig.pm&lt;/span&gt;
cpan&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;6&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;o&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;commit
commit:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;wrote&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;/root/.cpan/CPAN/MyConfig.pm&amp;#39;&lt;/span&gt;

cpan&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;7&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;o&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;urllist
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;urllist
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;http://www.cpan.org/&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;https://mirrors.tuna.tsinghua.edu.cn/CPAN/&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
Type&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;o conf&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;view&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;all&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;configuration&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;items

&lt;span class=&#34;c1&#34;&gt;# 退出 cpan shell&lt;/span&gt;
cpan&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;8&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;quit
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;移出一个源或者多个源可以使用 &lt;code&gt;pop&lt;/code&gt;  函数，如下：
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;cpan&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;9&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;o&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;urllist&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pop&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://mirrors.aliyun.com/CPAN/

cpan&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;o&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;urllist&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pop&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;http://www.cpan.org/&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://mirrors.aliyun.com/CPAN/
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;也可以一次增加多个源：&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;cpan&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;o&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;urllist&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ftp://mirrors.sohu.com/CPAN/&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;http://mirrors.163.com/cpan/
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;或者直接修改 &lt;code&gt;~/.cpan/CPAN/MyConfig.pm&lt;/code&gt; 文件的  &lt;strong&gt;urllist&lt;/strong&gt;：&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;grep&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;urllist&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/home/steven/.cpan/CPAN/MyConfig.pm
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;urllist&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;q&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;http://www.cpan.org/&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;q&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;http://mirrors.aliyun.com/CPAN/&lt;span class=&#34;o&#34;&gt;]]&lt;/span&gt;,

$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;cpan
Loading&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;internal&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;logger.&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Log::Log4perl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;recommended&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;better&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;logging
Terminal&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;does&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;support&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;AddHistory.

To&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;fix&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;that,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;maybe&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;try&amp;gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Term::ReadLine::Perl


cpan&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;shell&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;CPAN&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;exploration&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;and&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;modules&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;installation&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;v2.26&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
Enter&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;h&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;help.

cpan&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;o&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;urllist
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;urllist
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;http://www.cpan.org/&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;http://mirrors.aliyun.com/CPAN/&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
Type&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;o conf&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;view&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;all&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;configuration&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;items
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;2.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FpK9DQ7f5IGk-5Mu17d9IPdBCVAn.png&#34; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;如果对当前的当前所有的 cpan shell 的配置不满意，也可以通过命令重新初始化该文件，如下：&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;cpan&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;o&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;init
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4 id=&#34;124-使用-cpanm-命令安装&#34;&gt;1.2.4  使用 cpanm 命令安装&lt;a class=&#34;headerlink&#34; href=&#34;#124-使用-cpanm-命令安装&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;除了 &lt;strong&gt;&lt;code&gt;cpan&lt;/code&gt;&lt;/strong&gt; 以外，Perl 的模块安装还可以通过 &lt;strong&gt;&lt;code&gt;cpanm&lt;/code&gt;&lt;/strong&gt; 命令进行安装，而要获取 &lt;strong&gt;&lt;code&gt;cpanm&lt;/code&gt;&lt;/strong&gt; 命令我们需要先安装 Perl 的 &lt;a href=&#34;https://metacpan.org/pod/distribution/App-cpanminus/lib/App/cpanminus/fatscript.pm&#34;&gt;&lt;strong&gt;App::cpanminus&lt;/strong&gt;&lt;/a&gt; 模块：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@ecs-steven&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;data&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# cpan&lt;/span&gt;
Loading&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;internal&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;logger.&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Log::Log4perl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;recommended&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;better&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;logging
Terminal&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;does&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;support&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;AddHistory.

To&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;fix&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;that,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;maybe&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;try&amp;gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Term::ReadLine::Perl


cpan&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;shell&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;CPAN&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;exploration&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;and&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;modules&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;installation&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;v2.26&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
Enter&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;h&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;help.

cpan&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;App::cpanminus
Running&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;module&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;App::cpanminus&amp;#39;&lt;/span&gt;
Fetching&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;HTTP::Tiny:
http://www.cpan.org/authors/id/M/MI/MIYAGAWA/App-cpanminus-1.7044.tar.gz

&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;CPAN:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;checksum&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;security&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;checks&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;disabled&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;because&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Digest::SHA&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;installed.
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Please&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;consider&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;installing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Digest::SHA&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;module.

Scanning&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;cache&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/root/.cpan/build&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sizes

......
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;https://metacpan.org/pod/distribution/App-cpanminus/lib/App/cpanminus/fatscript.pm&#34;&gt;App::cpanminus&lt;/a&gt;&lt;/strong&gt; 模块安装完成后， &lt;code&gt;cpanm&lt;/code&gt; 命令就会自动安装到对应 Perl 所在的目录（如果用的是 &lt;code&gt;/bin/perl&lt;/code&gt; ， &lt;code&gt;cpanm&lt;/code&gt;  将默认安装到 &lt;code&gt;/usr/local/bin/cpanm&lt;/code&gt; ）。&lt;/p&gt;
&lt;p&gt;使用 &lt;code&gt;cpanm&lt;/code&gt;  安装 Perl 模块，命令后直接接模块名称即可，如：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sudo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;cpanm&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;CGI::Session
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sudo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;cpanm&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Template
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;注: 如果不是 root 权限，cpanm 也一样能用。它会将模块下载安装到用户的根目录(&lt;code&gt;~&lt;/code&gt;)下。&lt;/p&gt;
&lt;p&gt;为了加快 cpanm 下载速度, 可以指定使用镜像，并只从镜像下载。如下：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sudo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;cpanm&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--mirror&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;http://mirrors.163.com/cpan&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--mirror-only&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;CGI::Session
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;二windows-下-perl-模块安装&#34;&gt;二、windows 下 Perl 模块安装&lt;a class=&#34;headerlink&#34; href=&#34;#二windows-下-perl-模块安装&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;在开始介绍 windows 下 Perl 模块安装前，我们先来了解一些关于 make、gmake、nmake、dmake 等编译工具。&lt;/p&gt;
&lt;p&gt;Make 是一种自动化构建工具，用于从源码自动生成可执行程序和库（通常借助于 makefile 来推导出目标程序）；Make 有多个版本，如 Unix/Linux 下 的 GNU Make（之所以有 gmake，是因为在别的平台上 make 一般被占用，GNU make 只好叫 gmake 了）、Windows 下的 Microsoft nmake 等。dmake 则是一个适用于 Linux、Solaris、Win32 以及其他平台的跨平台的命令行编译工具，除此之外，跨平台编译工具中还有一个大名鼎鼎的 cmake。&lt;/p&gt;
&lt;p&gt;关于 Make 的详细介绍，具体可参考：&lt;a href=&#34;http://en.wikipedia.org/wiki/Make_%28software%29&#34;&gt;Wikipedia: Make (Software)&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;dmake 工具：&lt;a href=&#34;https://metacpan.org/release/dmake&#34;&gt;https://metacpan.org/release/dmake&lt;/a&gt;，具体安装方法请自行谷歌（dmake 貌似是 cpan 环境配置好就有了在 &amp;ldquo;C:\Perl\site\bin&amp;rdquo; 下）。&lt;/p&gt;
&lt;p&gt;nmake 是 Microsoft Visual Studio 中的附带命令，需要安装 VS；安装 VS 后，nmake.exe 出现在  &lt;code&gt;C:\Program Files (x86)\Microsoft Visual Studio 9\VC\bin&lt;/code&gt;   目录下（bin 文件夹的位置根据每个人系统不同，找到自己的安装位置，bin 文件夹中包含 nmake 即可）。如果 VS 安装过程中，没有注册 VS 的环境变量，因此直接在 cmd 的 DOC 中输入 nmake 就会出现：&amp;ldquo;&amp;lsquo;nmake&amp;rsquo; 不是内部或者外部命令，也不是可运行的程序或批处理文件&amp;rdquo;  报错。&lt;/p&gt;
&lt;p&gt;使用 nmake 的方法有两种：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;打开 VS 自带的命令行 &amp;ldquo;&lt;code&gt;Visual Studio 2008 Command Prompt&lt;/code&gt;&amp;ldquo;，然后在该命令行中使用 nmake；&lt;/li&gt;
&lt;li&gt;将路径 &amp;ldquo;&lt;code&gt;C:\Program Files (x86)\Microsoft Visual Studio 9\VC\bin&lt;/code&gt;&amp;rdquo;  设置到环境变量中去，然后在 DOS 命令行中使用 nmake。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;21-解压编译手动安装&#34;&gt;2.1 解压编译手动安装&lt;a class=&#34;headerlink&#34; href=&#34;#21-解压编译手动安装&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;windows 下手动 Perl 模块方法跟 Linux 类似。都需要解压后执行：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;perl makefile.pl
nmake/dmake
nmake/dmake test
nmake/dmake install
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;22-cpan-自动安装&#34;&gt;2.2 cpan 自动安装&lt;a class=&#34;headerlink&#34; href=&#34;#22-cpan-自动安装&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;安装前需要对 cpan 配置，cpan 需要安装其他的模块 &lt;a href=&#34;https://metacpan.org/release/dmake&#34;&gt;dmake&lt;/a&gt;  和 &lt;a href=&#34;http://www.mingw.org/&#34;&gt;MinGw gcc compiler&lt;/a&gt;。完成后，进入 cpan 交互界面安装（参考上面的 linux cpan 自动安装）。&lt;/p&gt;
&lt;h3 id=&#34;23-ppm-自动安装&#34;&gt;2.3 PPM 自动安装&lt;a class=&#34;headerlink&#34; href=&#34;#23-ppm-自动安装&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;如果使用 ActivePerl，可以使用 PPM（Perl Package Manager） 来安装，使用 PPM GUI 或 PPM Commandline。PPM commandline 实例如下：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;add correct repositories.&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:\&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;perl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;\&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;\&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ppm&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;repo&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;add&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;http&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;://&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;theoryx5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uwinnipeg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ca&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ppms&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;package&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lst&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:\&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;perl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;\&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;\&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ppm&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;repo&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;add&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;http&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;://&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;www&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;roth&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;net&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;perl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;packages&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;/&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;通过设置不同的 repositories 可以加速部分 Perl 模块的下载，我们也可以通过 ppm 命令查看可用的  repositories list：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c&#34;&gt;# Use the command ppm repo list to list all installed PPM repositories in ActivePerl 5.10 through 5.14.&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;PS &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;C&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:\&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ppm&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;repo&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;list&lt;/span&gt;
&lt;span class=&#34;err&#34;&gt;┌────┬───────┬────────────────────────────────┐&lt;/span&gt;
&lt;span class=&#34;err&#34;&gt;│&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;id&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;│&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pkgs&lt;/span&gt;  &lt;span class=&#34;err&#34;&gt;│&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;                           &lt;span class=&#34;err&#34;&gt;│&lt;/span&gt;
&lt;span class=&#34;err&#34;&gt;├────┼───────┼────────────────────────────────┤&lt;/span&gt;
&lt;span class=&#34;err&#34;&gt;│&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;│&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;13334&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;│&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ActiveState&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Package&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Repository&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;│&lt;/span&gt;
&lt;span class=&#34;err&#34;&gt;│&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;2&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;│&lt;/span&gt;   &lt;span class=&#34;n&#34;&gt;294&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;│&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Theoryx&lt;/span&gt;                        &lt;span class=&#34;err&#34;&gt;│&lt;/span&gt;
&lt;span class=&#34;err&#34;&gt;└────┴───────┴────────────────────────────────┘&lt;/span&gt;
 &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;2&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;enabled&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;repositories&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;PS &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;C&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:\&amp;gt;&lt;/span&gt;

&lt;span class=&#34;c&#34;&gt;# The command ppm repo desc #, where &amp;quot;#&amp;quot; is the number of the repository (in the order it was added), will display information about that repository:&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;PS &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;C&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:\&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ppm&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;repo&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;desc&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;2&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;2&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Theoryx&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;URL&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;http&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;://&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cpan&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;uwinnipeg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ca&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;PPMPackages&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;14xx&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;/&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Enabled&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;yes&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Last-Status&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;200&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;OK&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Last-Access&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;9&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;seconds&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ago&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Refresh-In&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;day&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;install the packages&lt;/li&gt;
&lt;/ol&gt;
&lt;!----&gt;

&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;c:\perl\bin\ppm install Carp-Assert

c:\perl\bin\ppm install Log-Log4perl

c:\perl\bin\ppm install YAML-Syck
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;更多关于 ActivePerl 的文档与资料，可以参考：&lt;a href=&#34;http://docs.activestate.com/&#34;&gt;http://docs.activestate.com/&lt;/a&gt;。&lt;/p&gt;
&lt;h2 id=&#34;三其他异常处理&#34;&gt;三、其他异常处理&lt;a class=&#34;headerlink&#34; href=&#34;#三其他异常处理&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&#34;31-not-contain-a-line-count-heade&#34;&gt;3.1 not contain a Line-Count heade&lt;a class=&#34;headerlink&#34; href=&#34;#31-not-contain-a-line-count-heade&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;使用 cpan 安装 PERL 模块的时候，遇到下面的问题导致无法安装 Perl 模块，具体错误信息如下：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;cpan&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;install&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;Getopt::&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Long&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;.........&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;...........&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Going&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;to&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;read&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;sr&#34;&gt;/root/&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cpan&lt;/span&gt;&lt;span class=&#34;sr&#34;&gt;/sources/mo&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dules&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mo&#34;&gt;02&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;packages&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;details&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;txt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;gz&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Warning:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Your&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;sr&#34;&gt;/root/&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cpan&lt;/span&gt;&lt;span class=&#34;sr&#34;&gt;/sources/mo&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dules&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mo&#34;&gt;02&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;packages&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;details&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;txt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;gz&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;does&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;ow&#34;&gt;not&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;contain&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Line&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Count&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;header&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Please&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;check&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;the&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;validity&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;of&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;the&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;index&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;by&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;comparing&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;it&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;to&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;more&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;than&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;one&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;CPAN&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mirror&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;I&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ll&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;continue&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;but&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;problems&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;seem&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;likely&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;to&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;happen&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Warning:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Your&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;sr&#34;&gt;/root/&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cpan&lt;/span&gt;&lt;span class=&#34;sr&#34;&gt;/sources/mo&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dules&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mo&#34;&gt;02&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;packages&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;details&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;txt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;gz&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;does&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;ow&#34;&gt;not&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;contain&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Last&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Updated&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;header&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;原因是由于 &lt;code&gt;cpan&lt;/code&gt;  模块中的数据损坏造成。解决方法如下：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;删除用户主目录下面的 cpan 目录：&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;rm&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-rf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~/.cpan
&lt;span class=&#34;c1&#34;&gt;# 也可以直接删除提示异常的 02packages.details.txt.gz&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# rm -rf /root/.cpan/sources/modules/02packages.details.txt.gz&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;执行 &lt;code&gt;perl -MCPAN -e shell&lt;/code&gt;  命令，输入：&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;cpan&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;reload&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;index
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;安装此模块：&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;cpan&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Bundle::CPAN
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;最后执行&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;cpan&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;reload&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;CPAN
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;这样即可正常通过命令行 install MODULES 模块的正常安装了。&lt;/p&gt;
&lt;h2 id=&#34;四参考资料&#34;&gt;四、参考资料&lt;a class=&#34;headerlink&#34; href=&#34;#四参考资料&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;itybku，《&lt;a href=&#34;http://www.361way.com/change-cpan-default-mirror/5094.html&#34;&gt;修改 CPAN mirror 的默认源&lt;/a&gt;》，运维之路的博客&lt;/li&gt;
&lt;li&gt;生信菜鸟团，《&lt;a href=&#34;http://www.bio-info-trainee.com/2451.html&#34;&gt;perl 模块安装大全&lt;/a&gt;》，WordPress 博客&lt;/li&gt;
&lt;li&gt;xianguang，《&lt;a href=&#34;https://www.cnblogs.com/xianguang/p/9845375.html&#34;&gt;Perl 模块安装&lt;/a&gt;》，博客园&lt;/li&gt;
&lt;li&gt;luckcy，《&lt;a href=&#34;https://blog.51cto.com/lxsym/484820&#34;&gt;解决 perl 模块无法安装的问题&lt;/a&gt;》，51CTO 博客&lt;/li&gt;
&lt;/ul&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/Perl/2020-06-19-how-to-install-perl-modules/</link>
      <pubDate>Fri, 19 Jun 2020 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/Perl/2020-06-19-how-to-install-perl-modules/</guid>
      
    </item>
    
    <item>
      <title>R 语言 download.file 的 SSL connect error</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2020-06-19&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2020-06-19T00:00:00&#39;&gt;2020-06-19&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-06-25&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-06-25T10:41:01&#39;&gt;2021-06-25&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;异常信息：&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;install.packages&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;rms&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;---&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Please&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;select&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;CRAN&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mirror&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;use&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;this&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;session&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;---&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Warning&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;failed&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;to&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;download&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mirrors&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;file &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cannot&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;open&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;URL&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;https://cran.r-project.org/CRAN_mirrors.csv&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;using&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;local&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;/home/shenweiyan/software/R/R-3.6.1/lib64/R/doc/CRAN_mirrors.csv&amp;#39;&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;trying&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;URL&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;http://mirrors.tuna.tsinghua.edu.cn/CRAN/src/contrib/rms_6.0-0.tar.gz&amp;#39;&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Content&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;application/x-gzip&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;length&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;623859&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;bytes &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;609&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;KB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;==================================================&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;downloaded&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;609&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;KB&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;......&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;DONE &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rms&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;The&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;downloaded&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;packages&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;are&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;in&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;‘&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tmp&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;RtmpJF5nYY&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;downloaded_packages&lt;/span&gt;’
&lt;span class=&#34;n&#34;&gt;Updating&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;HTML&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;index&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;of&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;packages&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;.Library&amp;#39;&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Making&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;packages.html&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;...&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;done&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Warning&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;message&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;In&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;download.file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;destfile&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;quiet&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;TRUE&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;URL&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;https://cran.r-project.org/CRAN_mirrors.csv&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;status&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;was&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;SSL connect error&amp;#39;&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;参考方法：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;先设置镜像，再执行包安装。&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# CRAN 镜像源配置文件之一是 .Rprofile (linux 下位于 ~/.Rprofile )，可以在文末添加如下语句:&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;options&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;repos&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;CRAN&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;https://mirrors.tuna.tsinghua.edu.cn/CRAN/&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;也有可能是由于 CentOS 6.x 自带的 OpenSSL（最高版本是 openssl-1.0.1e-15.el6.x86_64）引发的一个 bug，如果是这种情况，请参考这篇文章解决。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&#34;https://www.yuque.com/shenweiyan/cookbook/ssl-issues?view=doc_embed&#34;&gt;服务器关于 OpenSSL/SSL 的异常处理备忘&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;参考资料&#34;&gt;参考资料&lt;a class=&#34;headerlink&#34; href=&#34;#参考资料&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Tuna，&lt;a href=&#34;https://mirrors.tuna.tsinghua.edu.cn/help/CRAN/&#34;&gt;CRAN 镜像使用帮助&lt;/a&gt;，&lt;a href=&#34;https://mirrors.tuna.tsinghua.edu.cn/&#34;&gt;清华大学开源软件镜像站&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;rstudio，&lt;a href=&#34;https://support.rstudio.com/hc/en-us/articles/206827897-Secure-Package-Downloads-for-R&#34;&gt;Secure Package Downloads for R&lt;/a&gt;，&lt;a href=&#34;https://support.rstudio.com/hc/en-us&#34;&gt;RStudio Suppor&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/R/2020-06-19-r-download-file-ssl-error/</link>
      <pubDate>Fri, 19 Jun 2020 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/R/2020-06-19-r-download-file-ssl-error/</guid>
      
    </item>
    
    <item>
      <title>一款强大而实用的图片去水印神器</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2020-06-17&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2020-06-17T00:00:00&#39;&gt;2020-06-17&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-06-25&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-06-25T10:47:58&#39;&gt;2021-06-25&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;今天推荐一款图片去水印神器，它就是 &lt;a href=&#34;https://theinpaint.com/&#34;&gt;Inpaint&lt;/a&gt;，是一款可以从图片上去除不必要的物体，让您轻松摆脱照片上的水印、划痕、污渍、标志等瑕疵的实用型软件。&lt;/p&gt;
&lt;p&gt;简单说来，Inpaint 就是一款强大实用的图片去水印软件，您的图片中不想要的部分，如额外的线、人物、文字等。当我们选定需要移除的区域后，Inpaint 会帮你全自动进行擦除，同时 Inpaint 会根据附近图片区域重建擦除的区域，使看起来完美无瑕，没有痕迹。&lt;/p&gt;
&lt;p&gt;Inpaint 官网提供了 windows、mac 的免费下载，任何人都可以下载并安装，但是非付费用户无法保存处理后的图片，虽然付费版本的 Inpaint 只需要 &lt;strong&gt;$19.99&lt;/strong&gt;！！！
&lt;img alt=&#34;inpaint-buy.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FkMCt_YQG8AkwUCaL_8Tcdfsbe5T.jpeg&#34; /&gt;&lt;/p&gt;
&lt;p&gt;下面要介绍的是已经激活后的 Inpaint，无需安装即可使用，强大便捷。想要下载该激活后的 Inpaint，你可以去百度一下，或者在本公众号后台回复 &lt;strong&gt;&amp;ldquo;inpaint&amp;rdquo;&lt;/strong&gt; 获取下载链接。&lt;/p&gt;
&lt;h2 id=&#34;使用步骤&#34;&gt;使用步骤&lt;a class=&#34;headerlink&#34; href=&#34;#使用步骤&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;一，下载完成之后，双击对应版本的 exe 文件（无需安装），即可进入软件（一定要选择自己电脑相匹配的版本哦）。
&lt;img alt=&#34;inpaint-1.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fj_hW1Ga9nW2Aifp9nq07QpHSk1I.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;二，点击这里导入你需要去除水印或者瑕疵的图片（例如我想要去除知乎中所带的水印）。
&lt;img alt=&#34;inpaint-upload-img.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FnnctafXR-T3VsQi1R-zXaaML9Hd.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;三，点击“魔术笔”按钮，选择点击红色按钮（即移除区）。
&lt;img alt=&#34;inpaint-select.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FsJkX0mnCkvfWtvQ_Nz84gYEbTe-.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;四，把你想要去除水印的部分涂抹上（用鼠标涂抹）。
&lt;img alt=&#34;inpaint-remove.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FsvZgwEglbuWStpfWPLbv_ZYrgO5.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;五，点击处理图像。
&lt;img alt=&#34;inpaint-handle.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FiBuhEFIzoXnbV4uH2H2yzNJvrHc.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;六，完成图片处理。
&lt;img alt=&#34;inpaint-done.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FnqwFFIxKihXh7sjH32XV0mfN0ps.jpeg&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;其他功能&#34;&gt;其他功能&lt;a class=&#34;headerlink&#34; href=&#34;#其他功能&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;此软件不仅仅有去水印的功能，还能对照片中的瑕疵进行修复。&lt;/p&gt;
&lt;p&gt;例如，移除图片中不需要的元素。
&lt;img alt=&#34;screenshot2.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FtTQzwPcC8QhkPqMruOHqq9VoxEP.jpeg&#34; /&gt;&lt;/p&gt;
&lt;p&gt;例如，从图片中删除一些微小的物品对象。
&lt;img alt=&#34;screenshot4.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FjSS8sbvIE-g3OYEBNmtB5Iwskbp.jpeg&#34; /&gt;&lt;/p&gt;
&lt;p&gt;例如，修复一些旧的照片。
&lt;img alt=&#34;screenshot3.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fkl0myK6JiNH4eSrK9FC2On0WlXA.jpeg&#34; /&gt;&lt;/p&gt;
&lt;p&gt;例如，对你照片中的一些皮肤皱纹、痘痘进行修复改善。
&lt;img alt=&#34;screenshot5.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FuICBX-NuENXJWQcGos7FHMd161y.jpeg&#34; /&gt;&lt;/p&gt;
&lt;p&gt;Inpaint 是一款操作简单，但功能强大的图片处理神奇，更多功能等你去探索哦。&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/Windows/2020-06-17-inpaint/</link>
      <pubDate>Wed, 17 Jun 2020 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/Windows/2020-06-17-inpaint/</guid>
      
    </item>
    
    <item>
      <title>R 语言关于 SSL 证书异常处理笔记</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2020-06-11&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2020-06-11T00:00:00&#39;&gt;2020-06-11&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2023-07-10&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2023-07-10T16:32:03&#39;&gt;2023-07-10&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;ssl.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fud21xdJYwOyX5x2rMd29G6uNZYl.jpeg&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;一关于-tcgabiolinks&#34;&gt;一、关于 TCGAbiolinks&lt;a class=&#34;headerlink&#34; href=&#34;#一关于-tcgabiolinks&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;TCGAbiolinks 是一个用于 TCGA 数据综合分析的 R/BioConductor 软件包，能够通过 GDC Application Programming Interface (API) 访问 National Cancer Institute (NCI) Genomic Data Commons (GDC) ，来搜索、下载和准备相关数据，以便在 R 中进行分析。&lt;/p&gt;
&lt;h2 id=&#34;二问题&#34;&gt;二、问题&lt;a class=&#34;headerlink&#34; href=&#34;#二问题&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;神奇的是，今天在 R 操作 TCGAbiolinks 却遇到了一个极其棘手的问题：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nf&#34;&gt;library&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;TCGAbiolinks&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;query&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;GDCquery&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;project&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;TARGET-OS&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;                  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data.category&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;Transcriptome Profiling&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;                  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data.type&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;Gene Expression Quantification&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;                  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;workflow.type&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;HTSeq - Counts&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;gdc-server-down.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fp1rdqfkUkqDET2HNBAeyAsaIFIp.png&#34; /&gt;
拿着这个 error 去谷歌，看到的结果都是教你用 devtools 或者 TCGAbiolink 官网提供的方法从 github 重装一遍这个包：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;devtools&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;install_github&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;BioinformaticsFMRP/TCGAbiolinks&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;BiocManager&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;install&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;BioinformaticsFMRP/TCGAbiolinks&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;google-gdc-error.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FotaPM7dMID-C-ktkZKEwJ85WoYy.png&#34; /&gt;
然而这些方法都未能解决我的问题，于是乎有了下面的一些探索。&lt;/p&gt;
&lt;h2 id=&#34;三源码分析&#34;&gt;三、源码分析&lt;a class=&#34;headerlink&#34; href=&#34;#三源码分析&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;首先，我去 TCGAbiolink 中的源码看这个异常是在哪里导致的，在 R/internal.R 中发现：
&lt;img alt=&#34;get-gdc-info.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FtJNUd5A5Wc5zmqnd1Jf913oyu6q.png&#34; /&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;library&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;jsonlite&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;fromJSON&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;https://api.gdc.cancer.gov/status&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;simplifyDataFrame&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;TRUE&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Error&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;open.connection&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;con&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;rb&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SSL&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;certificate&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;problem&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;unable&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;to&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;local&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;issuer&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;certificate&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;后来又看了一下 &lt;code&gt;jsonlite&lt;/code&gt;  的 &lt;code&gt;fromJSON&lt;/code&gt;  函数，发现它其实是基于 &lt;code&gt;curl&lt;/code&gt;  包来实现获取，以及下载相关的数据。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The curl package provides bindings to the &lt;a href=&#34;https://curl.haxx.se/libcurl/&#34;&gt;libcurl&lt;/a&gt; C library for R. The package supports retrieving data in-memory, downloading to disk, or streaming using the &lt;a href=&#34;https://stat.ethz.ch/R-manual/R-devel/library/base/html/connections.html&#34;&gt;R “connection” interface&lt;/a&gt;. Some knowledge of curl is recommended to use this package. For a more user-friendly HTTP client, have a look at the &lt;a href=&#34;https://cran.r-project.org/package=httr/vignettes/quickstart.html&#34;&gt;httr&lt;/a&gt; package which builds on curl with HTTP specific tools and logic.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img alt=&#34;curl-fail.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FjYgbIsfonnHL2KbOs-3psDhzZtM.png&#34; /&gt;
curl 去访问 https 的站点报错&lt;/p&gt;
&lt;p&gt;看了一下 curl 和 curl 命令都是支持 ssl 的：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;curl&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;V&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;curl&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;7.19&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;7&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x86_64&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;redhat&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;linux&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;gnu&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;libcurl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;7.47&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;OpenSSL&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1.0&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;zlib&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1.2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;8&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;libidn&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1.18&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Protocols&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dict&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ftp&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ftps&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;gopher&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;http&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;https&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;imap&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;imaps&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pop3&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pop3s&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rtsp&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;smb&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;smbs&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;smtp&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;smtps&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;telnet&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tftp&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Features&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;IDN&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;IPv6&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Largefile&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;NTLM&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SSL&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;libz&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;curl&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;h&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;grep&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ssl&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ftp&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ssl&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Try&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SSL&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;TLS&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ftp&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;transfer &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ftp&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ssl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ccc&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Send&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;CCC&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;after&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;authenticating &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ftp&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ssl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ccc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mode&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;active&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;passive&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Set&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;CCC&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;mode &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ftp&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ssl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;control&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Require&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SSL&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;TLS&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ftp&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;login&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;clear&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;transfer &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ftp&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ssl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;reqd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Require&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SSL&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;TLS&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ftp&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;transfer &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;-2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/--&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sslv2&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;         &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Use&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;SSLv2 &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SSL&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;-3&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/--&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sslv3&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;         &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Use&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;SSLv3 &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SSL&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;curl 的默认证书路径可以通过下面的命令查看：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;curl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-v&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://www.baidu.com&lt;span class=&#34;p&#34;&gt;|&amp;amp;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;grep&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;CAfile
*&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;CAfile:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/etc/pki/tls/certs/ca-bundle.crt

$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;curl-config&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--ca
/etc/pki/tls/certs/ca-bundle.crt
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;在前面 &lt;code&gt;jsonlite&lt;/code&gt; 的 &lt;code&gt;fromJSON&lt;/code&gt; 报错信息中有一个 More details here 的提示，里面给了证书下载地址：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;http://curl.haxx.se/docs/sslcerts.html
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;ca.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FoBx529dQMZYOUY3aEizYeedqHKI.png&#34; /&gt;
下载并绑定证书：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;wget&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://curl.haxx.se/ca/cacert.pem&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--no-check-certificate
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;CURL_CA_BUNDLE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;/home/shenweiyan/certs/cacert.pem&amp;quot;&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;curl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-v&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://api.gdc.cancer.gov/status
*&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;Trying&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;192&lt;/span&gt;.170.230.246...
*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Connected&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;api.gdc.cancer.gov&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;192&lt;/span&gt;.170.230.246&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;port&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;443&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;#0)&lt;/span&gt;
*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Cipher&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;selection:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;successfully&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;certificate&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;verify&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;locations:
*&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;CAfile:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/home/shenweiyan/cacert.pem
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;CApath:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;none
*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;TLSv1.2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;OUT&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;TLS&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;handshake,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Client&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;hello&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;:
*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;TLSv1.2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;IN&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;TLS&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;handshake,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Server&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;hello&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;:
*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;TLSv1.2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;IN&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;TLS&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;handshake,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Certificate&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;11&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;:
*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;TLSv1.2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;IN&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;TLS&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;handshake,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Server&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;key&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;exchange&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;12&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;:
*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;TLSv1.2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;IN&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;TLS&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;handshake,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Server&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;finished&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;:
*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;TLSv1.2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;OUT&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;TLS&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;handshake,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Client&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;key&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;exchange&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;16&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;:
*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;TLSv1.2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;OUT&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;TLS&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;change&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;cipher,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Client&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;hello&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;:
*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;TLSv1.2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;OUT&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;TLS&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;handshake,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Finished&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;20&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;:
*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;TLSv1.2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;IN&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;TLS&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;change&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;cipher,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Client&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;hello&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;:
*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;TLSv1.2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;IN&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;TLS&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;handshake,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Finished&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;20&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;:
*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;SSL&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;connection&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;using&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;TLSv1.2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ECDHE-RSA-AES256-GCM-SHA384
*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Server&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;certificate:
*&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;subject:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;CN&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;api.gdc.cancer.gov
*&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;start&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;date:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Jan&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;29&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;00&lt;/span&gt;:00:00&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2020&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;GMT
*&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;expire&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;date:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Feb&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;16&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;23&lt;/span&gt;:59:59&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2022&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;GMT
*&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;subjectAltName:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;api.gdc.cancer.gov&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;matched
*&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;issuer:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;C&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;FR&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;ST&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;Paris&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;L&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;Paris&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;O&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;Gandi&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;CN&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;Gandi&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Standard&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;SSL&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;CA&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;
*&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;SSL&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;certificate&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;verify&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ok.
&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;GET&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/status&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;HTTP/1.1
&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Host:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;api.gdc.cancer.gov
&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;User-Agent:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;curl/7.19.7&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;x86_64-redhat-linux-gnu&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;libcurl/7.47.1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;OpenSSL/1.0.1e&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;zlib/1.2.8&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;libidn/1.18
&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Accept:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;*/*
&amp;gt;
&amp;lt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;HTTP/1.1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;200&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;OK
&amp;lt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Date:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Thu,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;11&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Jun&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2020&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;09&lt;/span&gt;:17:33&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;GMT
&amp;lt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Server:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Apache
&amp;lt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Content-Length:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;144&lt;/span&gt;
&amp;lt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Access-Control-Allow-Origin:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;*
&amp;lt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Access-Control-Expose-Headers:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Content-Disposition
&amp;lt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Content-Type:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;application/json
&amp;lt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;X-Frame-Options:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;SAMEORIGIN
&amp;lt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Strict-Transport-Security:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;max-age&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;63072001&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;includeSubdomains&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;preload
&amp;lt;
&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;commit&amp;quot;&lt;/span&gt;:&lt;span class=&#34;s2&#34;&gt;&amp;quot;ab22b47a0f2ba62dd69e83fc287fe0581e839cad&amp;quot;&lt;/span&gt;,&lt;span class=&#34;s2&#34;&gt;&amp;quot;data_release&amp;quot;&lt;/span&gt;:&lt;span class=&#34;s2&#34;&gt;&amp;quot;Data Release 24.0 - May 07, 2020&amp;quot;&lt;/span&gt;,&lt;span class=&#34;s2&#34;&gt;&amp;quot;status&amp;quot;&lt;/span&gt;:&lt;span class=&#34;s2&#34;&gt;&amp;quot;OK&amp;quot;&lt;/span&gt;,&lt;span class=&#34;s2&#34;&gt;&amp;quot;tag&amp;quot;&lt;/span&gt;:&lt;span class=&#34;s2&#34;&gt;&amp;quot;2.1.2&amp;quot;&lt;/span&gt;,&lt;span class=&#34;s2&#34;&gt;&amp;quot;version&amp;quot;&lt;/span&gt;:1&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Connection&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;#0 to host api.gdc.cancer.gov left intact&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;四解决问题与验证&#34;&gt;四、解决问题与验证&lt;a class=&#34;headerlink&#34; href=&#34;#四解决问题与验证&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;虽然环境变量 CURL_CA_BUNDLE （也可以添加到 \~/.bashrc 中）可以解决 curl 命令行中的证书问题，但是在 R 中依然没办法解决 SL certificate problem: unable to get local issuer certificate 的问题。折腾了许久，找到两个方法。&lt;/p&gt;
&lt;h3 id=&#34;1-更新系统默认证书&#34;&gt;1. 更新系统默认证书&lt;a class=&#34;headerlink&#34; href=&#34;#1-更新系统默认证书&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;这是最快捷的方法，但需要管理员的权限。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;## 管理员权限下，所有操作都应该备份。&lt;/span&gt;
mv&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ca-bundle.crt&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;gt;ca-bundle.crt.bak

&lt;span class=&#34;c1&#34;&gt;## 下载新的证书&lt;/span&gt;
wget&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://curl.haxx.se/ca/cacert.pem&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--no-check-certificate

&lt;span class=&#34;c1&#34;&gt;## 更新证书&lt;/span&gt;
cat&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ca-bundle.crt.bak&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;cacert.pem&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;gt;ca-bundle.crt
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;2-新装-curl绑定证书重新编译-r&#34;&gt;2. 新装 curl，绑定证书，重新编译 R&lt;a class=&#34;headerlink&#34; href=&#34;#2-新装-curl绑定证书重新编译-r&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;wget&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://curl.haxx.se/download/curl-7.64.1.tar.gz&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--no-check-certificate
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tar&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;zvxf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;curl-7.64.1.tar.gz
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;curl-7.64.1

&lt;span class=&#34;c1&#34;&gt;## 不指定证书&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;./configure&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/Bioinfo/SoftWare/NewLibs/curl-7.64.1

&lt;span class=&#34;c1&#34;&gt;## 指定证书(推荐)&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;wget&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://curl.haxx.se/ca/cacert.pem&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-O&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/Bioinfo/SoftWare/certs/ca-bundle.crt&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--no-check-certificate
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;./configure&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/Bioinfo/SoftWare/NewLibs/curl-7.64.1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--with-ca-bundle&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/Bioinfo/SoftWare/certs/ca-bundle.crt

$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;R 的编译请参考：
&lt;a href=&#34;https://www.yuque.com/shenweiyan/cookbook/install-latest-r-from-source?view=doc_embed&#34;&gt;手把手教你在 Linux 源码安装最新版本的 R&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;3-问题解决&#34;&gt;3. 问题解决&lt;a class=&#34;headerlink&#34; href=&#34;#3-问题解决&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;一切准备就绪后，重新打开 R，验证问题是否解决。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;library&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;TCGAbiolinks&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;query&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;GDCquery&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;project&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;TARGET-OS&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;                   &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data.category&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;Transcriptome Profiling&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;                   &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data.type&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;Gene Expression Quantification&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;                   &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;workflow.type&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;HTSeq - Counts&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;--------------------------------------&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;o&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;GDCquery&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Searching&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;GDC&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;database&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;--------------------------------------&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Genome&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;of&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;reference&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hg38&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;--------------------------------------------&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;oo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Accessing&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;GDC.&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;This&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;might&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;take&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;while...&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;--------------------------------------------&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;ooo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Project&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;TARGET&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;OS&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;--------------------&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;oo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Filtering&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;results&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;--------------------&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;ooo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;By&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data.type&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;ooo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;By&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;workflow.type&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;----------------&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;oo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Checking&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;----------------&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;ooo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Check&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;there&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;are&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;duplicated&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cases&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;ooo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Check&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;there&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;results&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;the&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;query&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;-------------------&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;o&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Preparing&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;output&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;-------------------&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;五总结&#34;&gt;五、总结&lt;a class=&#34;headerlink&#34; href=&#34;#五总结&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;从 TCGAbiolinks 的 GDC server down 到 SSL certificate problem: unable to get local issuer certificate，从发现问题到谷歌、定位解决，前后耗费了差不多整整一天的时间！&lt;/p&gt;
&lt;p&gt;R 语言的 curl 包和系统 curl 的关系目前看不太懂，虽然 curl 包为 R 提供了到 libcurl c 语言库的绑定，但貌似 &lt;a href=&#34;https://stat.ethz.ch/R-manual/R-devel/library/base/html/connections.html&#34;&gt;R “connection” interface&lt;/a&gt; 才是 curl 实现 retrieving data in-memory, downloading to disk, or streaming 的关键。&lt;/p&gt;
&lt;p&gt;包括 curl 在内有些后续的问题，需要深入再研究一下，也希望有此问题的同行们多多指教。&lt;/p&gt;
&lt;h2 id=&#34;六参考资料&#34;&gt;六、参考资料&lt;a class=&#34;headerlink&#34; href=&#34;#六参考资料&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;奔狼的春晓，《&lt;a href=&#34;https://blog.csdn.net/lixuande19871015/article/details/88788699?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&amp;amp;depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&#34;&gt;curl 支持 ssl 报错：SSL certificate problem: unable to get local issuer certificate&lt;/a&gt;》，CSDN&lt;/li&gt;
&lt;li&gt;curl，《&lt;a href=&#34;https://curl.haxx.se/docs/sslcerts.html&#34;&gt;SSL Certificate Verification&lt;/a&gt;》，curl.haxx.se&lt;/li&gt;
&lt;li&gt;curl vignettes，《&lt;a href=&#34;https://cran.r-project.org/web/packages/curl/vignettes/intro.html&#34;&gt;The curl package: a modern R interface to libcurl&lt;/a&gt;》，cran.r-project.org&lt;/li&gt;
&lt;li&gt;《&lt;a href=&#34;https://serverfault.com/questions/394815/how-to-update-curl-ca-bundle-on-redhat&#34;&gt;How to update cURL CA bundle on RedHat?&lt;/a&gt;》，Server Falut&lt;/li&gt;
&lt;/ol&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/R/2020-06-11-r-ssl-certificate/</link>
      <pubDate>Thu, 11 Jun 2020 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/R/2020-06-11-r-ssl-certificate/</guid>
      
    </item>
    
    <item>
      <title>科学上网之部署使用详解</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2020-06-05&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2020-06-05T00:00:00&#39;&gt;2020-06-05&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2026-02-24&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2026-02-24T00:00:00&#39;&gt;2026-02-24&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Shadowsocks （中文名称：影梭，下面简称 SS）是使用 Python 等语言开发的、基于 Apache 许可证开源的代理软件。SS 使用 socks5 代理，由于其流量特征不明显，不太容易用技术手段拦截，因此用于保护网络流量。&lt;/p&gt;
&lt;h2 id=&#34;1-ss-特点&#34;&gt;1. SS 特点&lt;a class=&#34;headerlink&#34; href=&#34;#1-ss-特点&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;省电，在电量查看里几乎看不到它的身影；
支持开机自启动，且断网无影响，无需手动重连，方便网络不稳定或者 3G &amp;amp; Wi-Fi 频繁切换的小伙伴；
可使用自己的服务器，安全和速度的保证；
支持区分国内外流量，传统 VPN 在翻出墙外后访问国内站点会变慢；
可对应用设置单独代理，5.0 之后的系统无需 root。
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;2-ss-科学上网原理&#34;&gt;2. SS 科学上网原理&lt;a class=&#34;headerlink&#34; href=&#34;#2-ss-科学上网原理&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Shadowsocks 客户端启动后会在本地开启一个代理，可以理解为一个数据的出入口。用户想通过 SS 访问墙外网站的请求都要经过这个本地代理。&lt;/p&gt;
&lt;p&gt;通过 SS 科学上网的过程是这样的：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;用户发起一个网络访问请求，比如用浏览器访问 google.com，请求被发送到本地代理。
客户端从本地代理拿到请求数据，然后发送至墙外的 SS 服务端。
服务端向 google.com 发起请求，然后收到 google 的响应数据，也就是 google 首页的数据。
服务端把响应数据发回客户端。
客户端再通过本地代理把响应数据交给浏览器，google 首页就显示出来了。
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;整个过程中的第 2 步和第 4 步都是通过 SS 自定义的协议隐蔽地进行，很难被过滤，所以我们才能一直用它顺畅地科学上网。&lt;/p&gt;
&lt;h2 id=&#34;3-ss-服务搭建指南&#34;&gt;3. SS 服务搭建指南&lt;a class=&#34;headerlink&#34; href=&#34;#3-ss-服务搭建指南&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&#34;31-购买-vps-服务器&#34;&gt;3.1 购买 VPS 服务器&lt;a class=&#34;headerlink&#34; href=&#34;#31-购买-vps-服务器&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;SS 的正常使用需要服务器端，其实，所有的科学上网软件都是通过服务器端，而搭建服务器端，你就需要有自己的 VPS，所以第一步你就是需要购买一个自己的 VPS (或者你可以跟别人合租)，现在普遍使用的搭建服务器端的 vps 有很多，在这里我们主要介绍性价比比较高的 4 种，一个是 &lt;strong&gt;Linode&lt;/strong&gt;，一个是 &lt;strong&gt;DigitalOcean&lt;/strong&gt;，一个是 &lt;strong&gt;BandwagonHOST (搬瓦工)&lt;/strong&gt;，还有就是 &lt;strong&gt;vultr&lt;/strong&gt;，这是从价格，性能等方面做出的推荐，当然，一分价钱一分货，你可以根据自己的实际需求以及支付能力自由选择。&lt;/p&gt;
&lt;h4 id=&#34;311-linode&#34;&gt;3.1.1 Linode&lt;a class=&#34;headerlink&#34; href=&#34;#311-linode&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Linode 是国外非常著名的 VPS 商之一，目前在国内站长圈中备受推崇，被许多使用用户评为 &amp;ldquo;高富帅&amp;rdquo; 主机产品。Linode 目前最低的 1G 内存方案，1T 流量/月，25G 固态 SSD 硬盘仅需 5 美金一月，折合 RMB 也就在 35 元左右。截止 2018.07.01，Linode VPS   主机报价，详情参考：&lt;a href=&#34;https://www.linode.com/pricing&#34;&gt;https://www.linode.com/pricing&lt;/a&gt;。
&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fmj2r1NGkk7-loRFfKgYju4oibyq.png&#34; /&gt;&lt;/p&gt;
&lt;h4 id=&#34;312-digitalocean&#34;&gt;3.1.2 DigitalOcean&lt;a class=&#34;headerlink&#34; href=&#34;#312-digitalocean&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;digitalocean 是一家成立于 2012 年的总部设置在纽约的云主机商家，采用 KVM 虚拟，配置高性能的 SSD 做储存。截止 2018.07.01，DigitalOcean VPS 主机报价，其中最低 1G 内存方案，1T 流量/月，25G 固态 SSD 硬盘需 5 美金一月（与 Linode 一样），详情参考：&lt;a href=&#34;https://www.digitalocean.com/pricing/&#34;&gt;https://www.digitalocean.com/pricing/&lt;/a&gt;。
&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FsRLIL_nT3Uha-EEiWP0WaYvhjwo.png&#34; /&gt;&lt;/p&gt;
&lt;h4 id=&#34;313-vultr&#34;&gt;3.1.3 Vultr&lt;a class=&#34;headerlink&#34; href=&#34;#313-vultr&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Vultr 是全球最大的游戏主机提供商之一，上线之后以高质的性价比、15 个数据中心，以及新注册账户赠送 5 美金的账户使用金优惠促销，吸引广大的用户。作为 Vultr 的用户，日本、洛杉矶等数据中心速度较好，如果有需要海外其他机房也可以在其 12 个数据中心中选择到适合自己的。&lt;/p&gt;
&lt;p&gt;截止 2018.07.01，Vultr VPS 主机报价，目前最低的 1G 内存方案，500G 流量/月，512M 硬盘仅需 2.5 美金一月，性价比相当不错，详情参考：&lt;a href=&#34;https://www.vultr.com/pricing/&#34;&gt;https://www.vultr.com/pricing/&lt;/a&gt;。
&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fu63JxMf6tRuOCt5DD4U-I8MrkM2.png&#34; /&gt;&lt;/p&gt;
&lt;h4 id=&#34;314-bandwagonhost&#34;&gt;3.1.4 BandwagonHOST&lt;a class=&#34;headerlink&#34; href=&#34;#314-bandwagonhost&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;搬瓦工 VPS 是一款性价比较高的便宜 VPS 主机，且适合入门级网友学习 Linux 和建站用途。&lt;/p&gt;
&lt;p&gt;截止 2018.07.01，BanwagonHOST VPS 主机报价（搬瓦工最新 10G VPS、20G VPS 虚拟主机现在都是按年服务，以前按月服务的已经找不到），详情参考：&lt;a href=&#34;https://bwh1.net/vps-hosting.php&#34;&gt;https://bwh1.net/vps-hosting.php&lt;/a&gt;。
&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FjRCpf7sGt_yaGqUymGXbT5LKU0d.png&#34; /&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;以下 VPS 的购买以 2017 年按月付费的 BanwagonHOST VPS 为例。2018 最新按年服务的 BanwagonHOST VPS 购买和部署使用步骤也一样。&lt;/p&gt;
&lt;p&gt;2017 年按月付费的 BanwagonHOST VPS：
&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FmxWf3ozZLEzUHKKg4w9DVgZIt6q.png&#34; /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;首先选择 $4.99 的 KVM 搬瓦工 VPS 主机，点击 &amp;ldquo;Order KVM&amp;rdquo; 进入购买配置页：&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fj8QV8y40V_Z0t6sEBHETsFwhhiq.png&#34; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在上一步的 Product Configuration 页面点击鼠标右键，选择&amp;rdquo;查看页面源代码&amp;rdquo;，获取优惠码：&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FjSXIgoCacd41k-_0TsFnscB9uEZ.png&#34; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在 Product Configuration 页面，点击&amp;rdquo;Add to Cart&amp;rdquo;。在出现的 Order Summary 页面输入 Promotional Code：&lt;strong&gt;BWH1ZBPVK&lt;/strong&gt;，点击 &amp;ldquo;Validate Code&amp;rdquo; 验证优惠码：
   &lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FkFtsoI-PoXUPFeymufFZJkiMLJL.png&#34; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;点击 &amp;ldquo;Checkout&amp;rdquo; 填写注册信息，选择使用支付宝支付。
   &lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FqDkoUujhvPdjJU8OYh0pqVLWOz4.png&#34; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;最后点击 &amp;ldquo;Complete Order&amp;rdquo; 完成订单，KiwiVM 会把所有买 VPS 主机的 IP、root 密码、SSH 端口信息发送到你的注册邮箱，当然你也可以登陆 BanwagonHOST (&lt;a href=&#34;https://bwh1.net/clientarea.php&#34;&gt;https://bwh1.net/clientarea.php&lt;/a&gt;) 去查看。   &lt;br /&gt;
&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FkiEX-Lw2gbh7L8hZU2vcqzc641U.png&#34; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;32-ss-服务端搭建&#34;&gt;3.2 SS 服务端搭建&lt;a class=&#34;headerlink&#34; href=&#34;#32-ss-服务端搭建&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;SecureCRT 或 putty 或者 xshell 连接服务器。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;环境安装与更新。搬瓦工 $4.99/mon VPS 主机默认为 centos-6 操作系统，Shadowsocks 服务端搭建我们推荐使用一键安装脚本，使用 root 用户登录，运行以下命令：
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;wget&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--no-check-certificate&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-O&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;shadowsocks-all.sh&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://raw.githubusercontent.com/teddysun/shadowsocks_install/master/shadowsocks-all.sh
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;chmod&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;+x&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;shadowsocks-all.sh
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;./shadowsocks-all.sh&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&amp;gt;&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tee&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;shadowsocks-all.log
Which&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Shadowsocks&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;server&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;you&lt;span class=&#34;s1&#34;&gt;&amp;#39;d select:&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;1) Shadowsocks-Python&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;2) ShadowsocksR&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;3) Shadowsocks-Go&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;4) Shadowsocks-libev&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;Please enter a number (Default Shadowsocks-Python):1   # 选择安装 Python 版 shadowsocks&lt;/span&gt;

&lt;span class=&#34;s1&#34;&gt;You choose = Shadowsocks-Python&lt;/span&gt;

&lt;span class=&#34;s1&#34;&gt;Please enter password for Shadowsocks-Python&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;(Default password: teddysun.com): xxxx   # 设置密码&lt;/span&gt;

&lt;span class=&#34;s1&#34;&gt;password = xxxx&lt;/span&gt;

&lt;span class=&#34;s1&#34;&gt;Please enter a port for Shadowsocks-Python [1-65535]&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;(Default port: 8989): 18989   # 设置默认端口&lt;/span&gt;

&lt;span class=&#34;s1&#34;&gt;port = 18989&lt;/span&gt;

&lt;span class=&#34;s1&#34;&gt;Please select stream cipher for Shadowsocks-Python:&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;1) aes-256-gcm&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;2) aes-192-gcm&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;3) aes-128-gcm&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;4) aes-256-ctr&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;5) aes-192-ctr&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;6) aes-128-ctr&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;7) aes-256-cfb&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;8) aes-192-cfb&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;9) aes-128-cfb&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;10) camellia-128-cfb&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;11) camellia-192-cfb&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;12) camellia-256-cfb&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;13) xchacha20-ietf-poly1305&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;14) chacha20-ietf-poly1305&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;15) chacha20-ietf&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;16) chacha20&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;17) salsa20&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;18) rc4-md5&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;Which cipher you&amp;#39;&lt;/span&gt;d&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;select&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;Default:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;aes-256-gcm&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;:9&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 选择加密方式；如不设定，Python 和 libev 版默认为 aes-256-gcm，R 和 Go 版默认为 aes-256-cfb&lt;/span&gt;

&lt;span class=&#34;nv&#34;&gt;cipher&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;aes-128-cfb

Press&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;any&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;key&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;start...or&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Press&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Ctrl+C&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;cancel
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;Info&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Checking&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;EPEL&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;repository...
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;Info&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Checking&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;EPEL&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;repository&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;complete...
....

Starting&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Shadowsocks&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;success

Congratulations,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Shadowsocks-Python&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;server&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;completed!
Your&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Server&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;IP&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;:&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;xxx.xxx.xxx.xxx
Your&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Server&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Port&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;:&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;18989&lt;/span&gt;
Your&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Password&lt;span class=&#34;w&#34;&gt;         &lt;/span&gt;:&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;xxxxxx
Your&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Encryption&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Method:&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;aes-128-cfb

Your&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;QR&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Code:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;For&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Shadowsocks&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Windows,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;OSX,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Android&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;and&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;iOS&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;clients&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ss://xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxk&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;
Your&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;QR&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Code&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;has&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;been&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;saved&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;as&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;a&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;PNG&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;path:
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/data/shadowsocks_python_qr.png

Welcome&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;visit:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://teddysun.com/486.html
Enjoy&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;it!
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;安装完成后，从脚本提示获取服务器 IP、密码、端口、加密方式、二维码等客户端登陆必须的信息。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;SS 卸载，若已安装多个版本，则卸载时也需多次运行（每次卸载一种）。使用 root 用户登录，运行以下命令：
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;./shadowsocks-all.sh&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;uninstall
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;启动脚本。启动脚本后面的参数含义，从左至右依次为：启动，停止，重启，查看状态。
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# Shadowsocks-Python 版&lt;/span&gt;
/etc/init.d/shadowsocks-python&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;start&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;stop&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;restart&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;status

&lt;span class=&#34;c1&#34;&gt;# ShadowsocksR 版&lt;/span&gt;
/etc/init.d/shadowsocks-r&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;start&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;stop&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;restart&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;status

&lt;span class=&#34;c1&#34;&gt;# Shadowsocks-Go 版&lt;/span&gt;
/etc/init.d/shadowsocks-go&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;start&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;stop&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;restart&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;status

&lt;span class=&#34;c1&#34;&gt;# Shadowsocks-libev 版&lt;/span&gt;
/etc/init.d/shadowsocks-libev&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;start&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;stop&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;restart&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;status
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;各版本默认配置文件
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# Shadowsocks-Python 版&lt;/span&gt;
/etc/shadowsocks-python/config.json

&lt;span class=&#34;c1&#34;&gt;# ShadowsocksR 版&lt;/span&gt;
/etc/shadowsocks-r/config.json

&lt;span class=&#34;c1&#34;&gt;# Shadowsocks-Go 版&lt;/span&gt;
/etc/shadowsocks-go/config.json

&lt;span class=&#34;c1&#34;&gt;# Shadowsocks-libev 版&lt;/span&gt;
/etc/shadowsocks-libev/config.json
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;33-ss-客户端使用&#34;&gt;3.3 SS 客户端使用&lt;a class=&#34;headerlink&#34; href=&#34;#33-ss-客户端使用&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;各个平台下 SS 客户端列表：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align: left;&#34;&gt;平台&lt;/th&gt;
&lt;th style=&#34;text-align: left;&#34;&gt;软件名&lt;/th&gt;
&lt;th style=&#34;text-align: left;&#34;&gt;链接&lt;/th&gt;
&lt;th style=&#34;text-align: left;&#34;&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align: left;&#34;&gt;Windows&lt;/td&gt;
&lt;td style=&#34;text-align: left;&#34;&gt;影梭&lt;/td&gt;
&lt;td style=&#34;text-align: left;&#34;&gt;&lt;a href=&#34;https://github.com/shadowsocks/shadowsocks-windows/releases&#34;&gt;https://github.com/shadowsocks/shadowsocks-windows/releases&lt;/a&gt;&lt;/td&gt;
&lt;td style=&#34;text-align: left;&#34;&gt;GitHub 官方下载&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align: left;&#34;&gt;Android&lt;/td&gt;
&lt;td style=&#34;text-align: left;&#34;&gt;-&lt;/td&gt;
&lt;td style=&#34;text-align: left;&#34;&gt;&lt;a href=&#34;https://github.com/shadowsocks/shadowsocks-android/releases&#34;&gt;https://github.com/shadowsocks/shadowsocks-android/releases&lt;/a&gt;&lt;/td&gt;
&lt;td style=&#34;text-align: left;&#34;&gt;下载 APK，安装后完成设置即可&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align: left;&#34;&gt;iOS&lt;/td&gt;
&lt;td style=&#34;text-align: left;&#34;&gt;OpenWingy&lt;/td&gt;
&lt;td style=&#34;text-align: left;&#34;&gt;APP Store 搜索 OpenWingy 进行安装&lt;/td&gt;
&lt;td style=&#34;text-align: left;&#34;&gt;AppStore 搜索 OpenWingy，安装后完成设置即可&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align: left;&#34;&gt;linux&lt;/td&gt;
&lt;td style=&#34;text-align: left;&#34;&gt;shadowsocks-qt5&lt;/td&gt;
&lt;td style=&#34;text-align: left;&#34;&gt;deepin linux 应用商店&lt;/td&gt;
&lt;td style=&#34;text-align: left;&#34;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 id=&#34;331-windows-下使用&#34;&gt;3.3.1 windows 下使用&lt;a class=&#34;headerlink&#34; href=&#34;#331-windows-下使用&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;SS 常规版 windowns 客户端下载地址：&lt;a href=&#34;https://github.com/shadowsocks/shadowsocks-windows/releases&#34;&gt;https://github.com/shadowsocks/shadowsocks-windows/releases&lt;/a&gt;。客户端下载解压后，只需要按照服务器的配置填写服务器 IP 地址、服务器端口、本地端口（如果没有本地端口选项，就是默认的 1080）、密码、加密方式等参数就可以愉快地科学上网了。&lt;/p&gt;
&lt;h4 id=&#34;332-linux-下使用&#34;&gt;3.3.2 Linux 下使用&lt;a class=&#34;headerlink&#34; href=&#34;#332-linux-下使用&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;这里主要说一下 deepin linux 中 SS 的配置使用。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;进入&amp;rdquo;深度商店&amp;rdquo;，搜索 &amp;ldquo;shadowsocks-qt5&amp;rdquo;，点击完成安装。     &lt;/li&gt;
&lt;li&gt;在系统启动器中找到 SS，点击启动，设置连接。     &lt;/li&gt;
&lt;li&gt;安装完后连接代理服务器，发现 google 依然无法访问，这里需要浏览器插件支持才能访问。以 chrome 为例，安装 &lt;strong&gt;SwitchyOmega&lt;/strong&gt; 插件。安装教程：&lt;a href=&#34;https://www.switchyomega.com/download.html&#34;&gt;https://www.switchyomega.com/download.html&lt;/a&gt;。&lt;/li&gt;
&lt;li&gt;设置代理服务器，点击 &amp;ldquo;应用选项&amp;rdquo; 保存设置。
   &lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FtxwGgKdj6wCLUO1MDEPlIQ7E07b.png&#34; /&gt;&lt;/li&gt;
&lt;li&gt;连接上网，登陆 YouTube 测试。
   &lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FtswMpZkODct0fCF_yBlBqofNgQk.png&#34; /&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;4-参考资料&#34;&gt;4. 参考资料&lt;a class=&#34;headerlink&#34; href=&#34;#4-参考资料&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Shadowsocks 一键安装脚本（四合一）：&lt;a href=&#34;https://teddysun.com/486.html&#34;&gt;https://teddysun.com/486.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GiuHub：shadowsocks/shadowsocks-windows 客户端：&lt;a href=&#34;https://github.com/shadowsocks/shadowsocks-windows/releases&#34;&gt;https://github.com/shadowsocks/shadowsocks-windows/releases&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;从零开始：史上最详尽 Shadowsocks 搭建教程：&lt;a href=&#34;https://www.iwwenbo.com/0-1-shadowsocks-start/&#34;&gt;https://www.iwwenbo.com/0-1-shadowsocks-start/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;使用 VPS 搭建 shadowsocks 服务：&lt;a href=&#34;http://blog.csdn.net/asliulue/article/details/54949475&#34;&gt;http://blog.csdn.net/asliulue/article/details/54949475&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Deepin（基于 Debian 的 Linux 系统）安装 Shadowsocks：&lt;a href=&#34;http://blog.csdn.net/wan_yanyan528/article/details/52572786&#34;&gt;http://blog.csdn.net/wan_yanyan528/article/details/52572786&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;科学上网利器(1) – Shadowsocks vps 设置方法：&lt;a href=&#34;https://www.1-17.cn/shadowsocks-online/&#34;&gt;https://www.1-17.cn/shadowsocks-online/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E5%90%8E%E7%AB%AF/2020-06-05-ss-vps/</link>
      <pubDate>Fri, 05 Jun 2020 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E5%90%8E%E7%AB%AF/2020-06-05-ss-vps/</guid>
      
    </item>
    
    <item>
      <title>RStudio Linux Server 安装配置说明</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2020-06-04&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2020-06-04T00:00:00&#39;&gt;2020-06-04&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2022-03-02&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2022-03-02T23:53:11&#39;&gt;2022-03-02&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&#34;https://blog.csdn.net/redmoon729/article/details/51179040&#34;&gt;https://blog.csdn.net/redmoon729/article/details/51179040&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;一安装-rstudio-server&#34;&gt;一、安装 RStudio Server&lt;a class=&#34;headerlink&#34; href=&#34;#一安装-rstudio-server&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;RStudio 下载地址：&lt;a href=&#34;http://rstudio.org/download/&#34;&gt;http://rstudio.org/download/&lt;/a&gt;
安装 RStudio 工具之前需要先安装好 R，关与  Linux 下 R 的安装，参考：&lt;/p&gt;
&lt;h2 id=&#34;二rstudio-server-一些命令&#34;&gt;二、RStudio Server 一些命令&lt;a class=&#34;headerlink&#34; href=&#34;#二rstudio-server-一些命令&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;rstudio-server&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;start&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;## 启动 rstudio&lt;/span&gt;
rstudio-server&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;stop&lt;span class=&#34;w&#34;&gt;         &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;## 关闭 rstudio&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# 查看 rstudio 运行状态&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# 运行 rstudio-server status 出现 &amp;quot;Active: active (running)&amp;quot; 表示 rstudio 已启动&lt;/span&gt;
rstudio-server&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;status

rstudio-server&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;verify-installation&lt;span class=&#34;w&#34;&gt;                  &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;## 查看 rstudio 安装错误&lt;/span&gt;
rstudio-server&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;restart&lt;span class=&#34;w&#34;&gt;                                          &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;## 重启&lt;/span&gt;

ifconfig&lt;span class=&#34;w&#34;&gt;                                                                        &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;## 查看服务器ip地址。&lt;/span&gt;

rstudio-server&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;active-sessions&lt;span class=&#34;w&#34;&gt;                          &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;## 查看运行中R进程&lt;/span&gt;

rstudio-server&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;suspend-session&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;lt;pid&amp;gt;&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;## 指定 PID，停止运行中的 R 进程&lt;/span&gt;
rstudio-server&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;suspend-all&lt;span class=&#34;w&#34;&gt;                                  &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;## 停止所有运行中的R进程&lt;/span&gt;
rstudio-server&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;force-suspend-session&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;lt;pid&amp;gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;## 强制停止运行中的R进程，优先级最高，立刻执行&lt;/span&gt;
rstudio-server&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;force-suspend-all&lt;span class=&#34;w&#34;&gt;                        &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;## 强制停止所有运行中的R进程&lt;/span&gt;

rstudio-server&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;offline&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;## RStudio Server 临时下线，不允许 web 访问，并给用户友好提示&lt;/span&gt;
rstudio-server&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;online&lt;span class=&#34;w&#34;&gt;               &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;## RStudio Server 临时上线&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;三rstudio-server-系统设置&#34;&gt;三、RStudio Server 系统设置&lt;a class=&#34;headerlink&#34; href=&#34;#三rstudio-server-系统设置&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;主要有两个配置文件，默认文件不存在（非必要，可不做修改）。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;/etc/rstudio/rserver.conf&lt;/li&gt;
&lt;li&gt;/etc/rstudio/rsession.conf&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;## 设置端口和 ip 控制:&lt;/span&gt;
vi&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/etc/rstudio/rserver.conf
www-port&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;8080&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;                       &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 监听端口,默认是8787，可以不做修改&lt;/span&gt;
www-address&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;127&lt;/span&gt;.0.0.0&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 允许访问的IP地址，默认0.0.0.0&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;##  会话配置管理&lt;/span&gt;
vi&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/etc/rstudio/rsession.conf
session-timeout-minutes&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;30&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;                                      &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 会话超时时间&lt;/span&gt;
r-cran-repos&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;http://ftp.ctex.org/mirrors/CRAN&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# CRAN 资源库&lt;/span&gt;
rsession-which-r&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/bin/R&lt;span class=&#34;w&#34;&gt;                       &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 如果非root安装，更改成R 所在目录。&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;## 重启服务器，生效&lt;/span&gt;
rstudio-server&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;restart


更换服务器&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;R&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;的版本（四步走即可完成&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;R&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;版本切换）
&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;在服务器上安装新的R：
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;R&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;.6
&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;.&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;把新安装的&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;R&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;的安装目录放到配置文件里（注意：更改配置文件后要重启&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;R&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;server&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;服务器才生效）：
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;sudo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;vi&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/etc/rstudio/rserver.conf
&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;.&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;重启R&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;server（使配置的更改生效）:
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;rstudio-server&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;stop
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;rstudio-server&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;start
&lt;span class=&#34;m&#34;&gt;4&lt;/span&gt;.&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;在&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;rstudio&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;界面操作：
&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;session--&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;quit&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;session
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;四通过浏览器连接-rstudio-server&#34;&gt;四、通过浏览器连接 RStudio Server&lt;a class=&#34;headerlink&#34; href=&#34;#四通过浏览器连接-rstudio-server&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;直接打开浏览器，输入  &lt;a href=&#34;http://&amp;lt;服务器ip&amp;gt;:8787&#34;&gt;http://&amp;lt;服务器 ip&amp;gt;:8787&lt;/a&gt;，如果修改过 rserver.conf 文件，后面的 8787 端口改为相应的端口即可。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;这里需要我们输入用户名和密码。关于用户名有 2 点注意事项：&lt;/strong&gt;
（1）不允许使用 system 用户登陆，即用户 ids 小于 100 的用户。只能用普通用户登录。
（2）用户的认证可以使用 RSA。&lt;/p&gt;
&lt;p&gt;如果没有普通用户，可以添加：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 添加一个名为 shen 的用户, 指定用户组为 rstudio 并把它添加到 bioinfo 组；指定 home 目录。&lt;/span&gt;
useradd&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;shen&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-g&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;rstudio&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-G&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bioinfo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-d&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/data/rstudio

&lt;span class=&#34;c1&#34;&gt;# 给新用户 shen 设置密码，密码需是复杂密码，否则可能通不过。&lt;/span&gt;
passwd&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;shen
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;在用 useradd 添加用户之后，在默认的情况下，该账号是暂时被封锁的， 也就是说，该账号是无法登录，须要用 passwd 命令来给新创建的用户设置密码之后才可以使用。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;普通用户登陆 RStudio-Server，会默认生成一个 &lt;strong&gt;\~/R/x86_64-pc-linux-gnu-library/&lt;R version&gt;/&lt;/strong&gt;  的目录，此后该用户安装的 R 包也会默认在该目录下。&lt;strong&gt;可以通过创建用户时指定 home 路径来更改该路径。&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/R/2020-06-04-xxli8d/</link>
      <pubDate>Thu, 04 Jun 2020 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/R/2020-06-04-xxli8d/</guid>
      
    </item>
    
    <item>
      <title>生信服务器入门级基本设置</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2020-06-03&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2020-06-03T00:00:00&#39;&gt;2020-06-03&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-07-19&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-07-19T11:20:16&#39;&gt;2021-07-19&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;前两天拿到了云筏科技提供的一台 4 核 16G 内存，1TB 硬盘，300M 带宽的服务器（看了一下 IP，应该是位于加拿大的服务器）！虽然是国外的服务器，但从国内 ssh 上去后的各种操作还是非常流畅的，而且前期白菜般的体验价格和飞一般的带宽的确也很有吸引力，像我用来做 Galaxy 和一些 web 开发测试完全是没问题。另外该服务器还自带了一个开箱即用的 RStudio-Server，对生信入门者来说也算是比较友好了，最起码节省了不少部署设置的功夫。&lt;/p&gt;
&lt;p&gt;作为体验性服务器，这里简单介绍一下拿到服务器后的一些基本设置。
&lt;img alt=&#34;cr-rstudio.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fl7tAv0j29yaClshZLBsurEvzHKR.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;1-查看配置信息&#34;&gt;1. 查看配置信息&lt;a class=&#34;headerlink&#34; href=&#34;#1-查看配置信息&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;查看内核版本&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@r0sasd1bQi&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# cat /proc/version  # 可以看到该服务器为 Redhat/CentOS 发行版本&lt;/span&gt;
Linux&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;version&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;.10.0-957.el7.x86_64&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;mockbuild@kbuilder.bsys.centos.org&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;gcc&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;version&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4&lt;/span&gt;.8.5&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;20150623&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;Red&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Hat&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4&lt;/span&gt;.8.5-36&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;GCC&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;#1 SMP Thu Nov 8 23:39:32 UTC 2018&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;查看详细版本信息&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 如果 lsb_release command not found，通过下面的方式安装&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@r0sasd1bQi&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# yum install redhat-lsb -y&lt;/span&gt;

&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@r0sasd1bQi&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# lsb_release -a     # 列出所有版本信息&lt;/span&gt;
LSB&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Version:&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;:core-4.1-amd64:core-4.1-noarch:cxx-4.1-amd64:cxx-4.1-noarch:desktop-4.1-amd64:desktop-4.1-noarch:languages-4.1-amd64:languages-4.1-noarch:printing-4.1-amd64:printing-4.1-noarch
Distributor&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ID:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;CentOS
Description:&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;CentOS&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Linux&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;release&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;7&lt;/span&gt;.6.1810&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;Core&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
Release:&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;7&lt;/span&gt;.6.1810
Codename:&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;Core
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;查看 cpu 数&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 总核数 = 物理CPU个数 X 每颗物理CPU的核数&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# 查看物理CPU个数&lt;/span&gt;
cat&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/proc/cpuinfo&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;grep&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;physical id&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sort&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;uniq&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;wc&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-l

&lt;span class=&#34;c1&#34;&gt;# 查看每个物理CPU中core的个数(即核数)&lt;/span&gt;
cat&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/proc/cpuinfo&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;grep&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;cpu cores&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;uniq

&lt;span class=&#34;c1&#34;&gt;# 查看逻辑CPU的个数&lt;/span&gt;
cat&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/proc/cpuinfo&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;grep&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;processor&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;wc&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-l
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;查看内存（可用 &lt;code&gt;top&lt;/code&gt;  命令直接查看，或者安装 &lt;code&gt;htop&lt;/code&gt;  查看）&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 在 CentOS 7 上启用 epel 版本&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@r0sasd1bQi&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# yum -y install epel-release&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# 安装 htop&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@r0sasd1bQi&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# yum -y install htop&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# 查看内存、CPU&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@r0sasd1bQi&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# htop&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;htop.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FqKKMNZ9J75Qb40n5iChJmY3cSIH.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;2-账号与用户名管理&#34;&gt;2. 账号与用户名管理&lt;a class=&#34;headerlink&#34; href=&#34;#2-账号与用户名管理&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;拿到服务器第一件事就是修改用户名密码，以及创建新账号，毕竟 root 权限太大！&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;修改 root 密码&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@r0sasd1bQi&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# passwd&lt;/span&gt;
Changing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;password&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;user&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;root.
New&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;password:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;lt;输入新的密码&amp;gt;
Retype&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;new&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;password:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;lt;再次输入新的密码&amp;gt;
passwd:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;all&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;authentication&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tokens&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;updated&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;successfully.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;创建用户与工作组&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 创建工作组&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@r0sasd1bQi&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# groupadd bioinfo   //新建 bioinfo 工作组&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# 新建用户并指定工作组(-g 所属组；-d 家目录；-s 所用的 SHELL)&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@r0sasd1bQi&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# useradd shenweiyan -g bioinfo   //新建 shenweiyan 用户并增加到 bioinfo 工作组&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# 查看用户信息&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@r0sasd1bQi&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# id shenweiyan&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;uid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1001&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;shenweiyan&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;gid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1001&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;bioinfo&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;groups&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1001&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;bioinfo&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# 修改用户密码&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@r0sasd1bQi&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# passwd shenweiyan&lt;/span&gt;
Changing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;password&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;user&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;shenweiyan.
New&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;password:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;lt;输入新的密码&amp;gt;
Retype&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;new&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;password:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;lt;再次输入新的密码&amp;gt;
passwd:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;all&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;authentication&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tokens&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;updated&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;successfully.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;3-个性化设置&#34;&gt;3. 个性化设置&lt;a class=&#34;headerlink&#34; href=&#34;#3-个性化设置&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&#34;变更-hostname&#34;&gt;变更 hostname&lt;a class=&#34;headerlink&#34; href=&#34;#变更-hostname&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;新的服务器一般自带的 hostname 都是一串无规律的字符串，很难记也不好看（例如我们这个服务器的 r0sasd1bQi ），对于有强迫症的童鞋可以参考下面的方法去修改。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;在 CentOS 7 中，有三种定义的主机名：静态的（static）、瞬态的（transient）、灵活的（pretty）。“静态”主机名也称为内核主机名，是系统在启动时从 /etc/hostname 自动初始化的主机名。“瞬态”主机名是在系统运行时临时分配的主机名，例如，通过 DHCP 或 mDNS 服务器分配。静态主机名和瞬态主机名都遵从作为互联网域名同样的字符限制规则。而另一方面，“灵活”主机名则允许使用自由形式（包括特殊/空白字符）的主机名，以展示给终端用户。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;方法一，通过 &lt;code&gt;hostnamectl&lt;/code&gt;  来修改主机名。修改后需要重启服务器。&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@r0sasd1bQi&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# hostnamectl   #查看一下当前主机名的情况&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;Static&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;hostname:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;r0sasd1bQi
&lt;span class=&#34;w&#34;&gt;         &lt;/span&gt;Icon&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;name:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;computer-vm
&lt;span class=&#34;w&#34;&gt;           &lt;/span&gt;Chassis:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;vm
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;Machine&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ID:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;b6302a1a586547a09aae75efbfa34901
&lt;span class=&#34;w&#34;&gt;           &lt;/span&gt;Boot&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ID:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;f75d72657c524500b47edc250c13c6f2
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;Virtualization:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;kvm
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Operating&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;System:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;CentOS&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Linux&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;7&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;Core&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;CPE&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;OS&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Name:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;cpe:/o:centos:centos:7
&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;Kernel:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Linux&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;.10.0-957.el7.x86_64
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;Architecture:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;x86-64

&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@r0sasd1bQi&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# hostnamectl set-hostname bioitee-server --static&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@r0sasd1bQi&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# hostnamectl status&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;Static&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;hostname:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bioitee-server
&lt;span class=&#34;w&#34;&gt;         &lt;/span&gt;Icon&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;name:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;computer-vm
&lt;span class=&#34;w&#34;&gt;           &lt;/span&gt;Chassis:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;vm
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;Machine&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ID:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;b6302a1a586547a09aae75efbfa34901
&lt;span class=&#34;w&#34;&gt;           &lt;/span&gt;Boot&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ID:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;f75d72657c524500b47edc250c13c6f2
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;Virtualization:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;kvm
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Operating&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;System:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;CentOS&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Linux&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;7&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;Core&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;CPE&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;OS&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Name:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;cpe:/o:centos:centos:7
&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;Kernel:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Linux&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;.10.0-957.el7.x86_64
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;Architecture:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;x86-64

&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@r0sasd1bQi&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# reboot now    # 重启服务器&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;方法二，通过修改文件 &lt;code&gt;/etc/hostname&lt;/code&gt;  来实现主机名的修改。把该文件内容替换成自己想要的主机名重启即可。&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@r0sasd1bQi&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# vim /etc/hostname      # 修改 hostname&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@r0sasd1bQi&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# reboot now                 # 重启服务器&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;————————————————
版权声明：本文为 CSDN 博主「点亮梦想那束光」的原创文章，遵循 CC 4.0 BY-SA 版权协议，转载请附上原文出处链接及本声明。
原文链接：&lt;a href=&#34;https://blog.csdn.net/solaraceboy/java/article/details/78563537&#34;&gt;https://blog.csdn.net/solaraceboy/java/article/details/78563537&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img alt=&#34;hostname.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fmcf0bFiRfvZF4V66GmwxJvEj8GG.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;个性化命令行提示符&#34;&gt;个性化命令行提示符&lt;a class=&#34;headerlink&#34; href=&#34;#个性化命令行提示符&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;bash 中命令行提示符的格式是由 PS1 来控制的。 &lt;code&gt;/etc/bashrc&lt;/code&gt;  中 PS1 的格式定义用于控制全局用户的命令行提示符样式；而针对个人用户的  PS1 设置，位于 &lt;code&gt;~/.bashrc&lt;/code&gt;  中。&lt;/p&gt;
&lt;p&gt;我自己的 PS1 定义：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nv&#34;&gt;PS1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;\033[35;1m\u@\h \[\e[m\]\t \[\033[36;1m\]$(pwd) \n$ \[\e[m\]&amp;#39;&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/data&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;clear&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;bashrc.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FvpFQwosMTxV8Ulwu342gWjOXSkg.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;有关于 PS1 的格式介绍如下：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;序列&lt;span class=&#34;w&#34;&gt;                  &lt;/span&gt;说明
&lt;span class=&#34;se&#34;&gt;\a&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;ASCII&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;响铃字符（也可以键入&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\0&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;07&lt;/span&gt;）
&lt;span class=&#34;se&#34;&gt;\d&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;Wed Sep 06&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;格式的日期
&lt;span class=&#34;se&#34;&gt;\e&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;ASCII&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;转义字符（也可以键入&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\0&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;33&lt;/span&gt;）
&lt;span class=&#34;se&#34;&gt;\h&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;主机名的第一部分（如&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;mybox&amp;quot;&lt;/span&gt;）
&lt;span class=&#34;se&#34;&gt;\H&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;主机的全称（如&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;mybox.mydomain.com&amp;quot;&lt;/span&gt;）
&lt;span class=&#34;se&#34;&gt;\j&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;在此&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;shell&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;中通过按&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;^Z&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;挂起的进程数
&lt;span class=&#34;se&#34;&gt;\l&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;此&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;shell&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;的终端设备名（如&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;ttyp4&amp;quot;&lt;/span&gt;）
&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;换行符
&lt;span class=&#34;se&#34;&gt;\r&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;回车符
&lt;span class=&#34;se&#34;&gt;\s&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;shell&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;的名称（如&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;bash&amp;quot;&lt;/span&gt;）
&lt;span class=&#34;se&#34;&gt;\t&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;24&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;小时制时间（如&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;23:01:01&amp;quot;&lt;/span&gt;）
&lt;span class=&#34;se&#34;&gt;\T&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;12&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;小时制时间（如&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;11:01:01&amp;quot;&lt;/span&gt;）
&lt;span class=&#34;se&#34;&gt;\@&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;带有&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;am/pm&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;的&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;12&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;小时制时间
&lt;span class=&#34;se&#34;&gt;\u&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;用户名
&lt;span class=&#34;se&#34;&gt;\v&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;bash&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;的版本（如&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;.04）
&lt;span class=&#34;se&#34;&gt;\V&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;Bash&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;版本（包括补丁级别）
&lt;span class=&#34;se&#34;&gt;\w&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;当前工作目录（如&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;/home/shenweiyan&amp;quot;&lt;/span&gt;）
&lt;span class=&#34;se&#34;&gt;\W&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;当前工作目录的&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;basename&amp;quot;&lt;/span&gt;（如&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;shenweiyan&amp;quot;&lt;/span&gt;）
&lt;span class=&#34;se&#34;&gt;\!&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;当前命令在历史缓冲区中的位置
&lt;span class=&#34;se&#34;&gt;\#&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;命令编号（只要您键入内容，它就会在每次提示时累加）
&lt;span class=&#34;se&#34;&gt;\$&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;如果您不是超级用户&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;root&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;，则插入一个&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;$&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;；如果您是超级用户，则显示一个&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;#&amp;quot;&lt;/span&gt;
&lt;span class=&#34;se&#34;&gt;\x&lt;/span&gt;xx&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;插入一个用三位数&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;xxx（用零代替未使用的数字，如&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;\007&amp;quot;&lt;/span&gt;）表示的&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ASCII&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;字符
&lt;span class=&#34;se&#34;&gt;\\&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;反斜杠
&lt;span class=&#34;se&#34;&gt;\[&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;这个序列应该出现在不移动光标的字符序列（如颜色转义序列）之前。它使&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bash&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;能够正确计算自动换行。
&lt;span class=&#34;se&#34;&gt;\]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;这个序列应该出现在非打印字符序列之后。
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;以上就是今天关于服务器入门的一些基本设置。在个性化设置上我们还可以进行 Alias、History、PATH 环境变量等的配置；在更高水平上的一些服务器安全策略，欢迎参考相关链接。&lt;/p&gt;
&lt;p&gt;随着使用的不断深入，如果你发现了其他一些更强大更好玩的服务器使用或者设置小技巧，不妨在留言区写下你的分享！&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%85%8D%E7%BD%AE%E4%BD%BF%E7%94%A8/2020-06-03-bio-server-basic/</link>
      <pubDate>Wed, 03 Jun 2020 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%85%8D%E7%BD%AE%E4%BD%BF%E7%94%A8/2020-06-03-bio-server-basic/</guid>
      
    </item>
    
    <item>
      <title>顶级生物信息学 RSS 订阅源</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2020-05-28&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2020-05-28T00:00:00&#39;&gt;2020-05-28&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-06-25&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-06-25T10:34:33&#39;&gt;2021-06-25&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;早在 2018 年的时候我在&amp;rdquo;生信草堂&amp;rdquo;的公众号上写过一篇关于 RSS 的文章《&lt;a href=&#34;https://www.yuque.com/shenweiyan/cookbook/rss-for-top-news&#34;&gt;使用 RSS 打造你的科研资讯头条&lt;/a&gt;》，介绍了关于 RSS 的一些内容和如何使用 inoreader 来订阅你感兴趣的一些科研资讯。&lt;/p&gt;
&lt;p&gt;今天主要来给大家推荐一些常用的生物信息学的 RSS  订阅源，通过这些订阅源你可以及时掌握和了解到一些比较前沿的生物信息学研究资讯。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;inoreader.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FoxwAl1VepxM5qehdtUxP3hLOKZF.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;1-bio-it-world-rss-feed&#34;&gt;1. &lt;a href=&#34;https://www.feedspot.com/infiniterss.php?_src=feed_title&amp;amp;followfeedid=1765882&amp;amp;q=site:http%3A%2F%2Fwww.bio-itworld.com%2FRSS%2FBioIT_WorldNews_RSS.aspx&#34;&gt;Bio-IT World RSS Feed&lt;/a&gt;&lt;a class=&#34;headerlink&#34; href=&#34;#1-bio-it-world-rss-feed&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;RSS Feed：&lt;/strong&gt; &lt;a href=&#34;http://www.bio-itworld.com/RSS/BioIT_WorldNews_RSS.aspx&#34;&gt;http://www.bio-itworld.com/RSS/BioIT_WorldNews_RSS.aspx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;网站：&lt;/strong&gt; &lt;a href=&#34;http://www.bio-itworld.com/&#34;&gt;bio-itworld.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;简介：&lt;/strong&gt; 它涵盖了信息学、IT 和计算机科学在生物医学研究和药物发现中的应用。随着生命科学逐渐成为一门越来越定量的学科，Bio-IT World 提供了时事新闻报道和最前沿技术的分析，以应对在千万亿次计算中的海量数据增长，以及提供个性化药物的工具。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;更新频率：&lt;/strong&gt; 4 posts / week&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;2-biomedcentral---bioinformatics-rss-feed&#34;&gt;2. &lt;a href=&#34;https://www.feedspot.com/infiniterss.php?_src=feed_title&amp;amp;followfeedid=4718217&amp;amp;q=site:https%3A%2F%2Fbmcbioinformatics.biomedcentral.com%2Farticles%2Fmost-recent%2Frss.xml&#34;&gt;BioMedcentral - Bioinformatics RSS Feed&lt;/a&gt;&lt;a class=&#34;headerlink&#34; href=&#34;#2-biomedcentral---bioinformatics-rss-feed&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;RSS Feed：&lt;/strong&gt; &lt;a href=&#34;https://bmcbioinformatics.biomedcentral.com/articles/most-recent/rss.xml&#34;&gt;https://bmcbioinformatics.biomedcentral.com/articles/most-recent/rss.xml&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;网站：&lt;/strong&gt; &lt;a href=&#34;https://bmcbioinformatics.biomedcentral.com/&#34;&gt;https://bmcbioinformatics.biomedcentral.com/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;简介：&lt;/strong&gt; BMC 生物信息学是一个开放存取，同行评审的期刊，考虑文章的所有方面的发展，测试和新的应用计算和统计方法的建模和分析各种生物数据，以及其他领域的计算生物学。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;更新频率：&lt;/strong&gt; 6 posts / week&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;3-reddit---bioinformatics-rss-feed&#34;&gt;3. &lt;a href=&#34;https://www.feedspot.com/infiniterss.php?_src=feed_title&amp;amp;followfeedid=4717789&amp;amp;q=site:https%3A%2F%2Fwww.reddit.com%2Fr%2Fbioinformatics%2F.rss%3Fformat%3Dxml&#34;&gt;Reddit - Bioinformatics RSS Feed&lt;/a&gt;&lt;a class=&#34;headerlink&#34; href=&#34;#3-reddit---bioinformatics-rss-feed&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;RSS Feed：&lt;/strong&gt; &lt;a href=&#34;https://www.reddit.com/r/bioinformatics/.rss?format=xml&#34;&gt;https://www.reddit.com/r/bioinformatics/.rss?format=xml&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;网站：&lt;/strong&gt; &lt;a href=&#34;https://www.reddit.com/r/bioinformatics/&#34;&gt;https://www.reddit.com/r/bioinformatics/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;简介：&lt;/strong&gt; 基因组学中的 hackers 新闻社区  —— 它是 Reddit 的一个子社区，致力于生物信息学，计算基因组学和系统生物学。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;更新频率：&lt;/strong&gt; 9 posts / day&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;4-rna-seq-blog--transcriptome-research--industry-news-rss-feed&#34;&gt;4. &lt;a href=&#34;https://www.feedspot.com/infiniterss.php?_src=feed_title&amp;amp;followfeedid=769978&amp;amp;q=site:http%3A%2F%2Fwww.rna-seqblog.com%2Ffeed%2F&#34;&gt;RNA-Seq Blog | Transcriptome Research &amp;amp; Industry News RSS Feed&lt;/a&gt;&lt;a class=&#34;headerlink&#34; href=&#34;#4-rna-seq-blog--transcriptome-research--industry-news-rss-feed&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;RSS Feed：&lt;/strong&gt; &lt;a href=&#34;http://www.rna-seqblog.com/feed/&#34;&gt;http://www.rna-seqblog.com/feed/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;网站：&lt;/strong&gt; &lt;a href=&#34;http://www.rna-seqblog.com/&#34;&gt;http://www.rna-seqblog.com/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;简介：&lt;/strong&gt; RNA-seq，也称为全转录物组散彈枪法测序（Whole Transcriptome），是指利用高通量测序技术对 cDNA 进行测序，以获取样本 RNA 含量的信息。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;更新频率：&lt;/strong&gt; 10 posts / week&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;5-naturecom---computational-biology-and-bioinformatics-rss-feed&#34;&gt;5. &lt;a href=&#34;https://www.feedspot.com/infiniterss.php?_src=feed_title&amp;amp;followfeedid=4718196&amp;amp;q=site:https%3A%2F%2Fwww.nature.com%2Fsubjects%2Fcomputational-biology-and-bioinformatics.rss&#34;&gt;nature.com - Computational biology and bioinformatics RSS Feed&lt;/a&gt;&lt;a class=&#34;headerlink&#34; href=&#34;#5-naturecom---computational-biology-and-bioinformatics-rss-feed&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;RSS Feed：&lt;/strong&gt; &lt;a href=&#34;https://www.nature.com/subjects/computational-biology-and-bioinformatics.rss&#34;&gt;https://www.nature.com/subjects/computational-biology-and-bioinformatics.rss&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;网站：&lt;/strong&gt; &lt;a href=&#34;https://www.nature.com/subjects/computational-biology-and-bioinformatics&#34;&gt;https://www.nature.com/subjects/computational-biology-and-bioinformatics&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;简介：&lt;/strong&gt; 来自于自然杂志网站关于计算生物学和生物信息学的最新消息和研究。Nature Research  是  Springer Nature，一个领先的全球研究，教育和专业出版商的一部分。施普林格·自然（Springer Nature）出版社是世界上最大的学术图书出版商，世界上最有影响力的期刊的出版商，也是开放研究领域的先驱。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;更新频率：&lt;/strong&gt; 1 post / day&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;6-plos-computational-biology-rss-feed&#34;&gt;6. &lt;a href=&#34;https://www.feedspot.com/infiniterss.php?_src=feed_title&amp;amp;followfeedid=4479477&amp;amp;q=site:https%3A%2F%2Fjournals.plos.org%2Fploscompbiol%2Ffeed%2Fatom&#34;&gt;PLOS Computational Biology RSS Feed&lt;/a&gt;&lt;a class=&#34;headerlink&#34; href=&#34;#6-plos-computational-biology-rss-feed&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;网站：&lt;/strong&gt; &lt;a href=&#34;https://journals.plos.org/ploscompbiol/&#34;&gt;https://journals.plos.org/ploscompbiol/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;简介：&lt;/strong&gt; 通过应用计算方法在生物学的不同领域建立联系，公共科学图书馆 · 计算生物学（PLOS Computational Biology）为从纳米到宏观，以及从分子科学、神经科学和生理学到生态学和种群生物学等多个学科的生命系统提供了大量的新见解。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;更新频率：&lt;/strong&gt; 3 posts / day&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;7-news-medicalnet---bioinformatics-news-rss-feed&#34;&gt;7. &lt;a href=&#34;https://www.feedspot.com/infiniterss.php?_src=feed_title&amp;amp;followfeedid=4719854&amp;amp;q=site:https%3A%2F%2Fwww.news-medical.net%2Ftag%2Ffeed%2FBioinformatics.aspx&#34;&gt;News-Medical.Net - Bioinformatics News RSS Feed&lt;/a&gt;&lt;a class=&#34;headerlink&#34; href=&#34;#7-news-medicalnet---bioinformatics-news-rss-feed&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;RSS Feed：&lt;/strong&gt; &lt;a href=&#34;https://www.news-medical.net/tag/feed/Bioinformatics.aspx&#34;&gt;https://www.news-medical.net/tag/feed/Bioinformatics.aspx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;网站：&lt;/strong&gt; &lt;a href=&#34;https://www.news-medical.net/?tag=/Bioinformatics&#34;&gt;https://www.news-medical.net/?tag=/Bioinformatics&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;简介：&lt;/strong&gt; Net 旨在向世界各地尽可能广泛的潜在受益者进行分类、介绍和分发医学新闻，提供一个思想、辩论和学习的论坛，并促进世界各地医学保健科学界各部分之间的互动。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;更新频率：&lt;/strong&gt; 3 posts / day&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;8-applied-informatics-we-do-things-most-companies-cant-rss-feed&#34;&gt;8. &lt;a href=&#34;https://www.feedspot.com/infiniterss.php?_src=feed_title&amp;amp;followfeedid=4719887&amp;amp;q=site:http%3A%2F%2Fblog.appliedinformaticsinc.com%2Ffeed%2F&#34;&gt;Applied Informatics We do things most companies can&amp;rsquo;t RSS Feed&lt;/a&gt;&lt;a class=&#34;headerlink&#34; href=&#34;#8-applied-informatics-we-do-things-most-companies-cant-rss-feed&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;RSS Feed：&lt;/strong&gt; &lt;a href=&#34;https://www.feedspot.com/infiniterss.php?_src=feed_title&amp;amp;followfeedid=4719887&amp;amp;q=site:http%3A%2F%2Fblog.appliedinformaticsinc.com%2Ffeed%2F&#34;&gt;https://www.feedspot.com/infiniterss.php?_src=feed_title&amp;amp;followfeedid=4719887&amp;amp;q=site:http%3A%2F%2Fblog.appliedinformaticsinc.com%2Ffeed%2F&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;网站：&lt;/strong&gt; &lt;a href=&#34;http://blog.appliedinformaticsinc.com/&#34;&gt;http://blog.appliedinformaticsinc.com/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;简介：&lt;/strong&gt; 开发伟大的信息解决方案一直是我们作为公司的推动力，这可以追溯到我们在哥伦比亚大学生物信息学系的研究生时期。这种探索使得应用信息学成为左脑和右脑的独特组合，将设计和工程思维融为一体。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;更新频率：&lt;/strong&gt; Null&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;9-the-openhelix-rss-feed&#34;&gt;9. &lt;a href=&#34;https://www.feedspot.com/infiniterss.php?_src=feed_title&amp;amp;followfeedid=769979&amp;amp;q=site:http%3A%2F%2Fopenhelix.eu%2Ffeed%2F&#34;&gt;The OpenHelix RSS Feed&lt;/a&gt;&lt;a class=&#34;headerlink&#34; href=&#34;#9-the-openhelix-rss-feed&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;RSS Feed：&lt;/strong&gt; &lt;a href=&#34;http://openhelix.eu/feed/&#34;&gt;http://openhelix.eu/feed/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;网站：&lt;/strong&gt; &lt;a href=&#34;http://openhelix.eu/&#34;&gt;http://openhelix.eu/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;简介：&lt;/strong&gt; OpenHelix Bioinformatics &amp;amp; Genomics Group  是一个论坛，提供数以千计有关生物信息学和基因组学资源的新闻、信息和对话。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;更新频率：&lt;/strong&gt; 4 posts / year&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;10-bioinformatics-llc-rss-feed&#34;&gt;10. &lt;a href=&#34;https://www.feedspot.com/infiniterss.php?_src=feed_title&amp;amp;followfeedid=4717794&amp;amp;q=site:https%3A%2F%2Fwww.gene2drug.com%2Ffeed&#34;&gt;BioInformatics LLC RSS Feed&lt;/a&gt;&lt;a class=&#34;headerlink&#34; href=&#34;#10-bioinformatics-llc-rss-feed&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;RSS Feed：&lt;/strong&gt; &lt;a href=&#34;https://www.gene2drug.com/feed&#34;&gt;https://www.gene2drug.com/feed&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;网站：&lt;/strong&gt; &lt;a href=&#34;https://www.gene2drug.com/blog/&#34;&gt;https://www.gene2drug.com/blog/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;简介：&lt;/strong&gt; 生物信息学和我们的 SDi 部门结合起来，形成领先的研究和咨询公司服务于生命科学，分析仪器和诊断行业。 我们的专长包括评估市场的规模和吸引力，优化产品配置和定价，验证企业收购，衡量客户的品牌忠诚度，以及评估品牌实力和地位。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;更新频率：&lt;/strong&gt; 21 posts / year&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;11-innovation-center-for-biomedical-informatics-rss-feed&#34;&gt;11. &lt;a href=&#34;https://www.feedspot.com/infiniterss.php?_src=feed_title&amp;amp;followfeedid=4719001&amp;amp;q=site:https%3A%2F%2Fblogs.commons.georgetown.edu%2Ficbi%2Ffeed&#34;&gt;Innovation Center for Biomedical Informatics RSS Feed&lt;/a&gt;&lt;a class=&#34;headerlink&#34; href=&#34;#11-innovation-center-for-biomedical-informatics-rss-feed&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;RSS Feed：&lt;/strong&gt; &lt;a href=&#34;https://blogs.commons.georgetown.edu/icbi/feed&#34;&gt;https://blogs.commons.georgetown.edu/icbi/feed&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;网站：&lt;/strong&gt; &lt;a href=&#34;https://blogs.commons.georgetown.edu/icbi/&#34;&gt;https://blogs.commons.georgetown.edu/icbi/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;简介：&lt;/strong&gt; 乔治敦大学是世界领先的学术和研究机构之一，提供独特的教育体验。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;更新频率：&lt;/strong&gt; Null&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;12-basespace-informatics-rss-feed&#34;&gt;12. &lt;a href=&#34;https://www.feedspot.com/infiniterss.php?_src=feed_title&amp;amp;followfeedid=4718801&amp;amp;q=site:https%3A%2F%2Fblog.basespace.illumina.com%2Ffeed%2F&#34;&gt;BaseSpace Informatics RSS Feed&lt;/a&gt;&lt;a class=&#34;headerlink&#34; href=&#34;#12-basespace-informatics-rss-feed&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;RSS Feed：&lt;/strong&gt; &lt;a href=&#34;https://blog.basespace.illumina.com/feed/&#34;&gt;https://blog.basespace.illumina.com/feed/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;网站：&lt;/strong&gt; &lt;a href=&#34;https://blog.basespace.illumina.com/&#34;&gt;https://blog.basespace.illumina.com/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;简介：&lt;/strong&gt; BaseSpace 信息学套件是一个完全集成的、基于云的信息学平台，它统一了快速提供高质量基因组信息的关键功能。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;更新频率：&lt;/strong&gt; 1 post / month&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;13-creative-diagnostics--antibodies-antigens-elisa-kits-for-life-science-rss-feed&#34;&gt;13. &lt;a href=&#34;https://www.feedspot.com/infiniterss.php?_src=feed_title&amp;amp;followfeedid=4785822&amp;amp;q=site:http%3A%2F%2Fwww.creative-diagnostics.com%2Fblog%2Findex.php%2Ffeed%2F&#34;&gt;Creative Diagnostics | Antibodies, Antigens, Elisa Kits for Life Science RSS Feed&lt;/a&gt;&lt;a class=&#34;headerlink&#34; href=&#34;#13-creative-diagnostics--antibodies-antigens-elisa-kits-for-life-science-rss-feed&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;RSS Feed：&lt;/strong&gt; &lt;a href=&#34;http://www.creative-diagnostics.com/blog/index.php/feed/&#34;&gt;http://www.creative-diagnostics.com/blog/index.php/feed/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;网站：&lt;/strong&gt; &lt;a href=&#34;http://www.creative-diagnostics.com/blog/&#34;&gt;http://www.creative-diagnostics.com/blog/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;简介：&lt;/strong&gt; 创造性诊断制造商，提供全球最高质量、创新、专业的免疫分析和市场。利用先进的 direct label  技术，可提供全自动和半自动的系统选择，以满足大型和小型独立实验室和医院实验室的吞吐量需要。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;更新频率：&lt;/strong&gt; 4 posts / month&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;14-lifebit-blog-rss-feed&#34;&gt;14. &lt;a href=&#34;https://www.feedspot.com/infiniterss.php?_src=feed_title&amp;amp;followfeedid=5096089&amp;amp;q=site:https%3A%2F%2Fblog.lifebit.ai%2Ffeed&#34;&gt;Lifebit Blog RSS Feed&lt;/a&gt;&lt;a class=&#34;headerlink&#34; href=&#34;#14-lifebit-blog-rss-feed&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;RSS Feed：&lt;/strong&gt; &lt;a href=&#34;https://blog.lifebit.ai/feed&#34;&gt;https://blog.lifebit.ai/feed&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;网站：&lt;/strong&gt; &lt;a href=&#34;https://blog.lifebit.ai/&#34;&gt;https://blog.lifebit.ai/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;简介：&lt;/strong&gt; Lifebit 的博客，包括基因组学、个体化医学、云、大数据和人工智能。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;更新频率：&lt;/strong&gt; 3 posts / month&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;15-seven-bridges-genomics---the-biomedical-data-analysis-company-rss-feed&#34;&gt;15. &lt;a href=&#34;https://www.feedspot.com/infiniterss.php?_src=feed_title&amp;amp;followfeedid=4717776&amp;amp;q=site:https%3A%2F%2Fwww.sevenbridges.com%2Ffeed%2F&#34;&gt;Seven Bridges Genomics - The biomedical data analysis company RSS Feed&lt;/a&gt;&lt;a class=&#34;headerlink&#34; href=&#34;#15-seven-bridges-genomics---the-biomedical-data-analysis-company-rss-feed&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;RSS Feed：&lt;/strong&gt; &lt;a href=&#34;https://www.sevenbridges.com/feed/&#34;&gt;https://www.sevenbridges.com/feed/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;网站：&lt;/strong&gt; &lt;a href=&#34;https://www.sevenbridges.com/blog/&#34;&gt;https://www.sevenbridges.com/blog/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;简介：&lt;/strong&gt; Seven Bridges 是一家生物医学数据分析公司，致力于癌症、药物开发和精准医学基因组学研究的突破。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;更新频率：&lt;/strong&gt; 3 posts / month&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;16-dave-tangs-blog-rss-feed&#34;&gt;16. &lt;a href=&#34;https://www.feedspot.com/infiniterss.php?_src=feed_title&amp;amp;followfeedid=4717632&amp;amp;q=site:https%3A%2F%2Fdavetang.org%2Fmuse%2Ffeed%2F&#34;&gt;Dave Tang&amp;rsquo;s blog RSS Feed&lt;/a&gt;&lt;a class=&#34;headerlink&#34; href=&#34;#16-dave-tangs-blog-rss-feed&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;RSS Feed：&lt;/strong&gt; &lt;a href=&#34;https://davetang.org/muse/feed/&#34;&gt;https://davetang.org/muse/feed/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;网站：&lt;/strong&gt; &lt;a href=&#34;https://davetang.org/muse/&#34;&gt;https://davetang.org/muse/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;简介：&lt;/strong&gt; 一个使用 R 和 Perl 的基因组学研究人员(因为我在 2005 年左右接触到了生物信息学)的个人博客。这个博客的大部分内容是关于基因组学的分析。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;更新频率：&lt;/strong&gt; 5 posts / quarter&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;17-obf-news--open-source-bioinformatics-news-rss-feed&#34;&gt;17. &lt;a href=&#34;https://www.feedspot.com/infiniterss.php?_src=feed_title&amp;amp;followfeedid=4717950&amp;amp;q=site:https%3A%2F%2Fnews.open-bio.org%2Ffeed&#34;&gt;O|B|F News | Open Source Bioinformatics news RSS Feed&lt;/a&gt;&lt;a class=&#34;headerlink&#34; href=&#34;#17-obf-news--open-source-bioinformatics-news-rss-feed&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;RSS Feed：&lt;/strong&gt; &lt;a href=&#34;https://news.open-bio.org/feed&#34;&gt;https://news.open-bio.org/feed&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;网站：&lt;/strong&gt; &lt;a href=&#34;https://news.open-bio.org/&#34;&gt;https://news.open-bio.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;简介：&lt;/strong&gt; The Open Bioinformatics Foundation 或 O|B|F 是一个非盈利志愿者运营的组织，致力于支持生物信息学中的开源编程。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;更新频率：&lt;/strong&gt; 1 post / week&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;18-front-line-genomics---bioinformatics-rss-feed&#34;&gt;18. &lt;a href=&#34;https://www.feedspot.com/infiniterss.php?_src=feed_title&amp;amp;followfeedid=4717887&amp;amp;q=site:http%3A%2F%2Fwww.frontlinegenomics.com%2Ftopic%2Fbioinformatics%2Ffeed%2F&#34;&gt;Front Line Genomics - Bioinformatics RSS Feed&lt;/a&gt;&lt;a class=&#34;headerlink&#34; href=&#34;#18-front-line-genomics---bioinformatics-rss-feed&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;RSS Feed：&lt;/strong&gt; &lt;a href=&#34;http://www.frontlinegenomics.com/topic/bioinformatics/feed/&#34;&gt;http://www.frontlinegenomics.com/topic/bioinformatics/feed/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;网站：&lt;/strong&gt; &lt;a href=&#34;http://www.frontlinegenomics.com/topic/bioinformatics/&#34;&gt;http://www.frontlinegenomics.com/topic/bioinformatics/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;简介：&lt;/strong&gt; 我们的目标是通过支持科学家、临床医生、商业 / 研究领导者和官员，更快地为患者带来基因组学的好处。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;更新频率：&lt;/strong&gt; 2 posts / quarter&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;19-elucidata-rss-feed&#34;&gt;19. &lt;a href=&#34;https://www.feedspot.com/infiniterss.php?_src=feed_title&amp;amp;followfeedid=5156339&amp;amp;q=site:https%3A%2F%2Felucidata.io%2Ffeed&#34;&gt;Elucidata RSS Feed&lt;/a&gt;&lt;a class=&#34;headerlink&#34; href=&#34;#19-elucidata-rss-feed&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;RSS Feed：&lt;/strong&gt; &lt;a href=&#34;https://elucidata.io/feed&#34;&gt;https://elucidata.io/feed&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;网站：&lt;/strong&gt; &lt;a href=&#34;https://elucidata.io/blog/&#34;&gt;https://elucidata.io/blog/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;简介：&lt;/strong&gt; Elucidata  的使命是使用数据分析，以改变在生物技术和制药公司的研发实验室的决策过程。在他们的博客上，你会发现易于理解和可行的见解，以帮助您的公司改善其数据管理。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;更新频率：&lt;/strong&gt; 1 post / week&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;20-t-bioinfo-in-education---news-and-updates-in-bioinformatic-education-rss-feed&#34;&gt;20. &lt;a href=&#34;https://www.feedspot.com/infiniterss.php?_src=feed_title&amp;amp;followfeedid=4907201&amp;amp;q=site:https%3A%2F%2Fedu.t-bio.info%2Fblog%2Ffeed%2F&#34;&gt;T-BioInfo in Education - News and Updates in Bioinformatic Education RSS Feed&lt;/a&gt;&lt;a class=&#34;headerlink&#34; href=&#34;#20-t-bioinfo-in-education---news-and-updates-in-bioinformatic-education-rss-feed&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;RSS Feed：&lt;/strong&gt; &lt;a href=&#34;https://edu.t-bio.info/blog/feed/&#34;&gt;https://edu.t-bio.info/blog/feed/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;网站：&lt;/strong&gt; &lt;a href=&#34;https://edu.t-bio.info/blog/&#34;&gt;https://edu.t-bio.info/blog/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;简介：&lt;/strong&gt; 关注我们的博客，了解来自 Tbio 的最新消息、最新动态和新闻。 进入我们的在线课程，开始您的生物信息学教育！&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;更新频率：&lt;/strong&gt; 1 post / week&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;21-biomedical-computation-review-rss-feed&#34;&gt;21. &lt;a href=&#34;https://www.feedspot.com/infiniterss.php?_src=feed_title&amp;amp;followfeedid=1351635&amp;amp;q=site:http%3A%2F%2Fbiomedicalcomputationreview.org%2Fissue-articles-rss&#34;&gt;Biomedical Computation Review RSS Feed&lt;/a&gt;&lt;a class=&#34;headerlink&#34; href=&#34;#21-biomedical-computation-review-rss-feed&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;RSS Feed：&lt;/strong&gt; &lt;a href=&#34;http://biomedicalcomputationreview.org/issue-articles-rss&#34;&gt;http://biomedicalcomputationreview.org/issue-articles-rss&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;网站：&lt;/strong&gt; &lt;a href=&#34;http://biomedicalcomputationreview.org/&#34;&gt;http://biomedicalcomputationreview.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;简介：&lt;/strong&gt; Biomedical Computation Review  是一个季度性开放获取的杂志，由国立卫生研究院资助和 Simbios 负责出版，位于斯坦福大学的国家生物医学计算中心之一。 Bcr 涵盖了分子动力学、基因组学、蛋白质组学、基于物理的模拟、系统生物学和其他涉及计算生物学的研究。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;更新频率：&lt;/strong&gt; Null&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;22-advaita-bioinformatics-rss-feed&#34;&gt;22. &lt;a href=&#34;https://www.feedspot.com/infiniterss.php?_src=feed_title&amp;amp;followfeedid=4717738&amp;amp;q=site:https%3A%2F%2Fadvaitabio.com%2Fblog%2Ffeed%2F&#34;&gt;Advaita Bioinformatics RSS Feed&lt;/a&gt;&lt;a class=&#34;headerlink&#34; href=&#34;#22-advaita-bioinformatics-rss-feed&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;RSS Feed：&lt;/strong&gt; &lt;a href=&#34;https://advaitabio.com/blog/feed/&#34;&gt;https://advaitabio.com/blog/feed/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;网站：&lt;/strong&gt; &lt;a href=&#34;https://advaitabio.com/blog/&#34;&gt;https://advaitabio.com/blog/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;简介：&lt;/strong&gt; Advaita Bioinformatics  开发生物信息学软件工具，用于研究和制药行业的基因表达分析。Advaita 是生物信息技术领域中唯一一家专注于路径分析而非数据的公司。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;更新频率：&lt;/strong&gt; Null&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;23-opiniomics-rss-feed&#34;&gt;23. &lt;a href=&#34;https://www.feedspot.com/infiniterss.php?_src=feed_title&amp;amp;followfeedid=4475607&amp;amp;q=site:http%3A%2F%2Fwww.opiniomics.org%2Ffeed%2F&#34;&gt;Opiniomics RSS Feed&lt;/a&gt;&lt;a class=&#34;headerlink&#34; href=&#34;#23-opiniomics-rss-feed&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;RSS Feed：&lt;/strong&gt; &lt;a href=&#34;http://www.opiniomics.org/feed/&#34;&gt;http://www.opiniomics.org/feed/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;网站：&lt;/strong&gt; &lt;a href=&#34;http://www.opiniomics.org/&#34;&gt;http://www.opiniomics.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;简介：&lt;/strong&gt; 生物信息学，基因组，生物学等信息。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;更新频率：&lt;/strong&gt; 3 posts / year&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;24-living-in-an-ivory-basement-rss-feed&#34;&gt;24. &lt;a href=&#34;https://www.feedspot.com/infiniterss.php?_src=feed_title&amp;amp;followfeedid=258044&amp;amp;q=site:http%3A%2F%2Fivory.idyll.org%2Fblog%2Ffeeds%2Fall.atom.xml&#34;&gt;Living in an Ivory Basement RSS Feed&lt;/a&gt;&lt;a class=&#34;headerlink&#34; href=&#34;#24-living-in-an-ivory-basement-rss-feed&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;RSS Feed：&lt;/strong&gt; &lt;a href=&#34;http://ivory.idyll.org/blog/feeds/all.atom.xml&#34;&gt;http://ivory.idyll.org/blog/feeds/all.atom.xml&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;网站：&lt;/strong&gt; &lt;a href=&#34;http://ivory.idyll.org/blog/&#34;&gt;http://ivory.idyll.org/blog/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;简介：&lt;/strong&gt; 提供有关科学，测试和编程的信息。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;更新频率：&lt;/strong&gt; 2 posts / month&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;26-bits-of-dna-rss-feed&#34;&gt;26. &lt;a href=&#34;https://www.feedspot.com/infiniterss.php?_src=feed_title&amp;amp;followfeedid=4229243&amp;amp;q=site:https%3A%2F%2Fliorpachter.wordpress.com%2Ffeed%2F&#34;&gt;Bits of DNA RSS Feed&lt;/a&gt;&lt;a class=&#34;headerlink&#34; href=&#34;#26-bits-of-dna-rss-feed&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;RSS Feed：&lt;/strong&gt; &lt;a href=&#34;https://liorpachter.wordpress.com/feed/&#34;&gt;https://liorpachter.wordpress.com/feed/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;网站：&lt;/strong&gt; &lt;a href=&#34;https://liorpachter.wordpress.com/&#34;&gt;https://liorpachter.wordpress.com/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;简介：&lt;/strong&gt; Lior Pachter 的网站评论和计算生物学  Reviews。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;更新频率：&lt;/strong&gt; 9 posts / year&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;26-genohub-blog--next-generation-sequencing-experts-rss-feed&#34;&gt;26. &lt;a href=&#34;https://www.feedspot.com/infiniterss.php?_src=feed_title&amp;amp;followfeedid=4718872&amp;amp;q=site:https%3A%2F%2Fblog.genohub.com%2Ffeed%2F&#34;&gt;Genohub Blog | Next Generation Sequencing Experts RSS Feed&lt;/a&gt;&lt;a class=&#34;headerlink&#34; href=&#34;#26-genohub-blog--next-generation-sequencing-experts-rss-feed&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;RSS Feed：&lt;/strong&gt; &lt;a href=&#34;https://blog.genohub.com/feed/&#34;&gt;https://blog.genohub.com/feed/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;网站：&lt;/strong&gt; &lt;a href=&#34;https://blog.genohub.com/&#34;&gt;https://blog.genohub.com/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;简介：&lt;/strong&gt; Genohub 是找到和订购下一代测序服务最容易和最可靠的方式。他们将服务提供者与对测序、图书馆准备和生物信息学服务感兴趣的研究人员和临床医生联系起来。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;更新频率：&lt;/strong&gt; 1 post / year&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;27-coregenomics-rss-feed&#34;&gt;27. &lt;a href=&#34;https://www.feedspot.com/infiniterss.php?_src=feed_title&amp;amp;followfeedid=1305556&amp;amp;q=site:http%3A%2F%2Fcore-genomics.blogspot.com%2Ffeeds%2Fposts%2Fdefault&#34;&gt;CoreGenomics RSS Feed&lt;/a&gt;&lt;a class=&#34;headerlink&#34; href=&#34;#27-coregenomics-rss-feed&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;RSS Feed：&lt;/strong&gt; &lt;a href=&#34;http://core-genomics.blogspot.com/feeds/posts/default&#34;&gt;http://core-genomics.blogspot.com/feeds/posts/default&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;网站：&lt;/strong&gt; &lt;a href=&#34;http://core-genomics.blogspot.com/&#34;&gt;http://core-genomics.blogspot.com/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;简介：&lt;/strong&gt; 这个博客由詹姆斯哈德菲尔德从令人兴奋的和快速移动的世界基因组学提供了一些评论和分析。它集中于下一代测序和微阵列技术，虽然它可能会走出切线的时间。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;更新频率：&lt;/strong&gt; Null&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;28-python-for-bioinformatics---adventures-in-bioinformatics-rss-feed&#34;&gt;28. &lt;a href=&#34;https://www.feedspot.com/infiniterss.php?_src=feed_title&amp;amp;followfeedid=119933&amp;amp;q=site:https%3A%2F%2Ftelliott99.blogspot.com%2Ffeeds%2Fposts%2Fdefault&#34;&gt;Python for Bioinformatics - adventures in bioinformatics RSS Feed&lt;/a&gt;&lt;a class=&#34;headerlink&#34; href=&#34;#28-python-for-bioinformatics---adventures-in-bioinformatics-rss-feed&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;RSS Feed：&lt;/strong&gt; &lt;a href=&#34;https://telliott99.blogspot.com/feeds/posts/default&#34;&gt;https://telliott99.blogspot.com/feeds/posts/default&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;网站：&lt;/strong&gt; &lt;a href=&#34;https://telliott99.blogspot.com/&#34;&gt;https://telliott99.blogspot.com/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;简介：&lt;/strong&gt; 一个微生物学研究老师在微生物学方面教书和做研究。这个博客记录了他学习生物信息学和使用 Python 的冒险经历。 它已经扩展到包括 Cocoa、 r、简单数学和各种主题。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;更新频率：&lt;/strong&gt; 12 posts / week&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;29-omics-omics-rss-feed&#34;&gt;29. &lt;a href=&#34;https://www.feedspot.com/infiniterss.php?_src=feed_title&amp;amp;followfeedid=103650&amp;amp;q=site:http%3A%2F%2Fomicsomics.blogspot.com%2Ffeeds%2Fposts%2Fdefault&#34;&gt;Omics! Omics! RSS Feed&lt;/a&gt;&lt;a class=&#34;headerlink&#34; href=&#34;#29-omics-omics-rss-feed&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;RSS Feed：&lt;/strong&gt; &lt;a href=&#34;http://omicsomics.blogspot.com/feeds/posts/default&#34;&gt;http://omicsomics.blogspot.com/feeds/posts/default&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;网站：&lt;/strong&gt; &lt;a href=&#34;http://omicsomics.blogspot.com/&#34;&gt;http://omicsomics.blogspot.com/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;简介：&lt;/strong&gt; 计算生物学家对新技术、出版物的基因组学和蛋白质组学及其对药物发现影响个人意见 。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;更新频率：&lt;/strong&gt; 10 posts / quarter&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;30-informatics-professor-rss-feed&#34;&gt;30. &lt;a href=&#34;https://www.feedspot.com/infiniterss.php?_src=feed_title&amp;amp;followfeedid=1361652&amp;amp;q=site:http%3A%2F%2Finformaticsprofessor.blogspot.com%2Ffeeds%2Fposts%2Fdefault&#34;&gt;Informatics Professor RSS Feed&lt;/a&gt;&lt;a class=&#34;headerlink&#34; href=&#34;#30-informatics-professor-rss-feed&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;RSS Feed：&lt;/strong&gt; &lt;a href=&#34;http://informaticsprofessor.blogspot.com/feeds/posts/default&#34;&gt;http://informaticsprofessor.blogspot.com/feeds/posts/default&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;网站：&lt;/strong&gt; &lt;a href=&#34;http://informaticsprofessor.blogspot.com/&#34;&gt;http://informaticsprofessor.blogspot.com/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;简介：&lt;/strong&gt; 这个博客保存了俄勒冈健康与科学大学医学信息与临床流行病学系教授兼主席 William Hersh 博士关于生物医学和医学信息学流行病学的各种主题的想法。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;更新频率：&lt;/strong&gt; 1 post / week&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;关于作者与数据来源&#34;&gt;关于作者与数据来源&lt;a class=&#34;headerlink&#34; href=&#34;#关于作者与数据来源&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;以上 RSS 主要来源于  &lt;a href=&#34;https://blog.feedspot.com/bioinformatics_rss_feeds/&#34;&gt;https://blog.feedspot.com/bioinformatics_rss_feeds/&lt;/a&gt;，作者：&lt;a href=&#34;https://blog.feedspot.com/author/kajalshah400092/&#34;&gt;Anuj Agarwal&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;这是一个拥有超过 25 名专家的团队，他们的目标是对博客、播客和 youtube 频道进行几个类别的排名。发布者使用他们网站提供的表单在 Feedspot 上提交他们的博客或播客。Feedspot 的专家编辑团队审查并将它们添加到相关的分类列表中。排名是基于相关性，博客发布频率(新鲜度) ，社会指标，领域权威，流量和许多其他参数。他们也经常删除不活跃的博客和那些不再与给定列表相关的博客。当收到新的博客提交后会变更新的表单，并每隔几个星期进行重新排名。&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E7%94%9F%E7%89%A9%E4%BF%A1%E6%81%AF/%E8%B5%84%E6%BA%90/2020-05-28-bio-rss-feeds/</link>
      <pubDate>Thu, 28 May 2020 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E7%94%9F%E7%89%A9%E4%BF%A1%E6%81%AF/%E8%B5%84%E6%BA%90/2020-05-28-bio-rss-feeds/</guid>
      
    </item>
    
    <item>
      <title>如何在 5 分钟内建立一个数据驱动的新型冠状病毒肺炎应用程序</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2020-05-25&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2020-05-25T00:00:00&#39;&gt;2020-05-25&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-06-30&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-06-30T09:42:13&#39;&gt;2021-06-30&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;许多数据库都与新型冠状病毒肺炎有关，但是目前还没有一个虚拟平台对这些数据源中的大部分数据进行集成。因此想要对 &lt;a href=&#34;https://covid19datahub.io/&#34;&gt;COVID-19&lt;/a&gt;  相关的数据进行全面的分析是有难度的，也很难将这些通常是医学信息和外部因素，特别是社会政治因素联系起来。考虑到这一点，新型冠状病毒肺炎数据中心  （&lt;a href=&#34;https://covid19datahub.io/&#34;&gt;COVID-19 Data Hub&lt;/a&gt;）致力于开发一个统一的数据集，有助于更好地理解新型冠状病毒肺炎数据。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The goal of COVID-19 Data Hub is to provide the research community with a &lt;a href=&#34;https://covid19datahub.io/articles/data.html&#34;&gt;unified data hub&lt;/a&gt; by collecting worldwide fine-grained case data, merged with exogenous variables helpful for a better understanding of COVID-19.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;在本教程中，我们将使用 COVID19 的 R 包来构建一个简单而完整的 Shiny 应用程序，这个应用程序是通过 COVID19 这个 R 包来连接新型冠状病毒肺炎数据中心的。&lt;/p&gt;
&lt;p&gt;我们假定大家对对 Shiny (web apps) 和 plotly (interactive plot) 有一个基本的了解，下面我们只需要通过简单的复制粘贴就可以构建一个功能完备的 app。 加载以下软件包以便开始：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nf&#34;&gt;library&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;shiny&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;library&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;plotly&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;library&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;COVID19&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;covid19&#34;&gt;COVID19&lt;a class=&#34;headerlink&#34; href=&#34;#covid19&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;COVID19 的 R  包通过 &lt;code&gt;COVID19()&lt;/code&gt;  函数提供了与新型冠状病毒肺炎数据中心的无缝集成。关于这个函数的更多参数说明，我们可以通过 &lt;code&gt;?covid19&lt;/code&gt; 进行查看。下面我们将使用：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;country&lt;/code&gt;：vector of country names or ISO codes. 国家名称或国际标准化组织代码的矢量。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;level&lt;/code&gt;：granularity level; data by (1) country, (2) region, (3) city. 粒度级别；按(1)国家、(2)地区、(3)城市分列的数据。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;start&lt;/code&gt;：the start date of the period of interest. 感兴趣的开始日期。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;end&lt;/code&gt;： the end date of the period of interest. 感兴趣的结束日期。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;定义用户界面&#34;&gt;定义用户界面&lt;a class=&#34;headerlink&#34; href=&#34;#定义用户界面&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;定义以下输入。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;country：the country name. Note that the options are automatically populated using the &lt;code&gt;covid19()&lt;/code&gt; function. 国家名称。请注意，选项是使用 covid19() 函数&lt;/li&gt;
&lt;li&gt;type：the metric to use. One of &lt;code&gt;c(&#34;confirmed&#34;, &#34;tests&#34;, &#34;recovered&#34;, &#34;deaths&#34;)&lt;/code&gt;, but many others are avaibale. See &lt;a href=&#34;https://covid19datahub.io/articles/doc/data.html&#34;&gt;here&lt;/a&gt; for the full list.  使用的度量标准，可以是 &lt;code&gt;c(&#34;confirmed&#34;, &#34;tests&#34;, &#34;recovered&#34;, &#34;deaths&#34;)&lt;/code&gt; 中的一种  , 也可以是除此以外的其他值，完整的名单参考&lt;a href=&#34;https://covid19datahub.io/articles/doc/data.html&#34;&gt;这里&lt;/a&gt;。&lt;/li&gt;
&lt;li&gt;level：granularity level (country – region – city). 粒度级别(国家-地区-城市)。&lt;/li&gt;
&lt;li&gt;date：start and end dates. 开始和结束日期。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;输出。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;covid19plot&lt;/code&gt;： plotly output that will render an interactive plot. 显示交互式图形的 plotly 输出。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;将所有内容打包到 &lt;code&gt;fluidPage&lt;/code&gt;  函数中：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# Define UI for application&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;ui&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;fluidPage&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;

&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;selectInput&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;country&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;label&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;Country&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;multiple&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;TRUE&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;choices&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;unique&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;covid19&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;administrative_area_level_1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;selected&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;Italy&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;selectInput&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;type&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;label&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;type&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;choices&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;confirmed&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;tests&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;recovered&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;deaths&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)),&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;selectInput&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;level&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;label&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;Granularity&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;choices&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;Country&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;Region&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;City&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;selected&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;dateRangeInput&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;date&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;label&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;Date&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;start&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;2020-01-01&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;

&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;plotlyOutput&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;covid19plot&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;服务器逻辑&#34;&gt;服务器逻辑&lt;a class=&#34;headerlink&#34; href=&#34;#服务器逻辑&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;在 UI 中定义了响应式输入之后，我们将这些输入连接到 &lt;code&gt;covid19()&lt;/code&gt;  函数以获取数据。下面的代码片段显示了如何呈现交互式绘图 ，当任何输入发生更改时，交互式绘图会自动更新。注意，因为  &lt;code&gt;covid19()&lt;/code&gt;  函数使用了内部的缓存系统（&lt;strong&gt;memory caching system&lt;/strong&gt;），因此数据不会被下载两次。多次调用这个函数是非常高效和用户友好的。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# Define server logic&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;server&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;output&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;

&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;output&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;covid19plot&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;renderPlotly&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;({&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;!&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;is.null&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;country&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)){&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;covid19&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;country&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;country&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;level&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;level&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;start&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;date&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;end&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;date&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;paste0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;administrative_area_level_&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;level&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;plot_ly&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[[&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;date&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]],&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]],&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]])&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;})&lt;/span&gt;

&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;运行应用程序&#34;&gt;运行应用程序&lt;a class=&#34;headerlink&#34; href=&#34;#运行应用程序&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;这个示例应用程序在线可以通过下面的地址预览：&lt;a href=&#34;https://bioitee.shinyapps.io/covid-19-shiny-apps/&#34;&gt;https://bioitee.shinyapps.io/covid-19-shiny-apps/&lt;/a&gt;
&lt;img alt=&#34;covid-19-shiny-apps-online.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FhKfJ06meFO_ow8c6RBhSJ84jrez.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;在本地 RStudio 运行后的截图如下：
&lt;img alt=&#34;covid-19-shiny-apps.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FhDPLiq12n1xxdsIEk8TupAYoUPe.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;简单总结&#34;&gt;简单总结&lt;a class=&#34;headerlink&#34; href=&#34;#简单总结&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;我们构建了一个简单的应用程序，将 Shiny 与 COVID19 的 R 包连接起来，呈现了一个可重用的通用体系结构。这个示例应用程序可以用作更高级的新型冠状病毒肺炎数据驱动应用程序的构建块。特别是，可以通过 &lt;code&gt;covid19()&lt;/code&gt;  函数获得的数据集包括关于新型冠状病毒肺炎案例、政策措施、地理信息和其他相关的额外指标，这些指标使得数据集可以很容易地扩展到世界银行开放数据（&lt;a href=&#34;https://data.worldbank.org/&#34;&gt;World Bank Open Data&lt;/a&gt;）、谷歌移动报告（&lt;a href=&#34;https://www.google.com/covid19/mobility/&#34;&gt;Google Mobility Reports&lt;/a&gt;）、苹果移动报告（&lt;a href=&#34;https://www.apple.com/covid19/mobility&#34;&gt;Apple Mobility Reports&lt;/a&gt;）和当地政府数据。请参阅完整的数据集文档（&lt;a href=&#34;https://covid19datahub.io/articles/doc/data.html&#34;&gt;full dataset documentation&lt;/a&gt;）和 COVID19 代码片段（&lt;a href=&#34;https://covid19datahub.io/articles/api/r.html&#34;&gt;COVID19 code snippets&lt;/a&gt;）。&lt;/p&gt;
&lt;p&gt;截止本文章推送前（2020-05-25），小编在  COVID-19 Data Hub 官网看了一下，它们目前已经支持将近 190 个国家的 COVID-19 相关数据，但没有中国的。另外，该开源项目还提供基于 Python、MATLAB、Julia，以及 Node.js 等语言的 API，感兴趣的童鞋可以参考它们在 Github 的源码。&lt;/p&gt;
&lt;h2 id=&#34;参考资料&#34;&gt;参考资料&lt;a class=&#34;headerlink&#34; href=&#34;#参考资料&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;COVID-19 Data Hub 官网：&lt;a href=&#34;https://covid19datahub.io/&#34;&gt;https://covid19datahub.io/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Shinyapps.io - Getting started：&lt;a href=&#34;https://shiny.rstudio.com/articles/shinyapps.html&#34;&gt;https://shiny.rstudio.com/articles/shinyapps.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <link>https://shenwy.com/yuque/%E5%8F%AF%E8%A7%86%E5%8C%96/R%E8%AF%AD%E8%A8%80%E5%8F%AF%E8%A7%86%E5%8C%96/2020-05-25-covid-19-shiny-apps/</link>
      <pubDate>Mon, 25 May 2020 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%8F%AF%E8%A7%86%E5%8C%96/R%E8%AF%AD%E8%A8%80%E5%8F%AF%E8%A7%86%E5%8C%96/2020-05-25-covid-19-shiny-apps/</guid>
      
    </item>
    
    <item>
      <title>使用镜像加速 Rtools 下载与安装</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2020-05-25&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2020-05-25T00:00:00&#39;&gt;2020-05-25&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-06-25&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-06-25T10:41:19&#39;&gt;2021-06-25&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id=&#34;rtools-是什么&#34;&gt;Rtools 是什么&lt;a class=&#34;headerlink&#34; href=&#34;#rtools-是什么&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;在 windows 使用 R，尤其是安装 R 包的时候，经常会遇到一些 Rtools 的问题。Rtools 作用很大，但我们一般不怎么会直接使用。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Rtools provides a toolchain for Windows platform that work well with R. It mainly includes GNU make, GNU gcc, and other utilities commonly used on UNIX-ish platform. R statistical language &amp;amp; environment is that it is open source and cross-platform.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;rtools-安装&#34;&gt;Rtools 安装&lt;a class=&#34;headerlink&#34; href=&#34;#rtools-安装&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;在 RStudio 中安装 shiny 包的时候，就出现了要安装 Rtools 的 warning，提示信息中还给出了下载的链接地址。但问题是  &lt;a href=&#34;https://cran.rstudio.com/bin/windows/Rtools/&#34;&gt;https://cran.rstudio.com/bin/windows/Rtools/&lt;/a&gt;  是位于国外的服务器，下载速度慢的令人发指。
&lt;img alt=&#34;Rtools.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FlFdrUE7yY-fxOa_xV4JL1njI0nP.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;方法一&#34;&gt;方法一&lt;a class=&#34;headerlink&#34; href=&#34;#方法一&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;使用清华大学的 CRAN 镜像下载 Rtools，镜像地址：&lt;a href=&#34;https://mirrors.tuna.tsinghua.edu.cn/CRAN/&#34;&gt;https://mirrors.tuna.tsinghua.edu.cn/CRAN/&lt;/a&gt;，如果你记不住这一串常常地址，可以从 CRAN 官网点击进去。
&lt;img alt=&#34;cran-mirrors.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fh9lDB_tIj_d10FyEu489TCJYQgD.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;在清华大学的 CRAN 页面选择  &lt;a href=&#34;https://mirrors.tuna.tsinghua.edu.cn/CRAN/bin/windows/&#34;&gt;Download R for Windows&lt;/a&gt;，在出现的 R for Windows 页面选择 Rtools：
&lt;img alt=&#34;r-for-win.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FvVvo41dX4Ii00yCL-vrbouQDjYJ.png&#34; /&gt;
&lt;img alt=&#34;rtootls.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FohxkjxwTpndCpbuN04GLyZIZe5Q.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;在 Rtools 选择下载最新版本的 Rtools，或者下载 R 版本对应 Rtools：
&lt;img alt=&#34;rtools-main.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FoJQZqNUIiZ7D5K2m7VZnY5OpzNu.png&#34; /&gt;
&lt;img alt=&#34;rtools-download.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FouJ2qmcRIHkGPhHtEdgtacDQec7.png&#34; /&gt;**&lt;/p&gt;
&lt;p&gt;:::tips
&lt;strong&gt;注意！！！&lt;/strong&gt;
**
**当我们通过下面*&lt;strong&gt;*的链接直接访问清华大学 CRAN 的 Rtools 时：**&lt;/strong&gt; &lt;strong&gt;&lt;a href=&#34;https://mirrors.tuna.tsinghua.edu.cn/CRAN/bin/windows/Rtools/&#34;&gt;&lt;strong&gt;https://mirrors.tuna.tsinghua.edu.cn/CRAN/bin/windows/Rtools/&lt;/strong&gt;&lt;/a&gt;&lt;/strong&gt; **
**
&lt;strong&gt;这里面有一个问题需要注意，即点击 &amp;ldquo;this page&amp;rdquo; 访问 R 其他版本对应的 Rtools 时会默认跳转到 CRAN 官网默认的****页面！&lt;/strong&gt;
&lt;a href=&#34;https://cran.r-project.org/bin/windows/Rtools/history.html&#34;&gt;&lt;strong&gt;https://cran.r-project.org/bin/windows/Rtools/history.html&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;正常情况下应该是跳转到清华大学的 Rtools history 页面****才对！！！&lt;/strong&gt;
&lt;a href=&#34;https://mirrors.tuna.tsinghua.edu.cn/CRAN/bin/windows/Rtools/history.html&#34;&gt;&lt;strong&gt;https://mirrors.tuna.tsinghua.edu.cn/CRAN/bin/windows/Rtools/history.html&lt;/strong&gt;&lt;/a&gt;
:::&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://mirrors.tuna.tsinghua.edu.cn/CRAN/bin/windows/Rtools/history.html&#34;&gt;Building R for Windows&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;bug-cran-rtools.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FstA08MbJIAHF0uIfZD7i-ZYGVrU.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;最后，安装 Rtools，这没什么好说的，按照默认设置一路 Next 下去，最后就安装成功，这里只强调一点是把勾选添加 rtools 到环境变量中。
&lt;img alt=&#34;add-rtools-to-path.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FsJDVwIrbX-Bi9RkRtqzJ7TI3fMm.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;方法二&#34;&gt;方法二&lt;a class=&#34;headerlink&#34; href=&#34;#方法二&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;第二种方法，我是在网络上看到，大家也可以参考一下。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nf&#34;&gt;options&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;repos&amp;quot;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;CRAN&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;https://mirrors.tuna.tsinghua.edu.cn/CRAN/&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;install.packages&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;installr&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;library&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;installr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;install.Rtools&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;这是通过设置清华大学 CRAN 后，先安装  installr 包，再通过这个包直接下载安装 Rtools，速度上同样也是杠杠的。**&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/R/2020-05-25-rtools-install-mirrors/</link>
      <pubDate>Mon, 25 May 2020 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/R/2020-05-25-rtools-install-mirrors/</guid>
      
    </item>
    
    <item>
      <title>ggplot2 调整绘图区域大小</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2020-05-20&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2020-05-20T00:00:00&#39;&gt;2020-05-20&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-10-03&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-10-03T08:38:03&#39;&gt;2021-10-03&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;熟悉 R 绘图的朋友肯定知道，在普通绘图中，图片的大小可以直接在 &lt;code&gt;png()&lt;/code&gt;  和 &lt;code&gt;pdf()&lt;/code&gt;  中指定，而绘图区大小则可以用 &lt;code&gt;par()&lt;/code&gt;  中的 &lt;code&gt;mar&lt;/code&gt;  或 &lt;code&gt;mai&lt;/code&gt;  来指定。&lt;/p&gt;
&lt;p&gt;但是在 ggplot2 中，图片大小依然可以在 &lt;code&gt;png&lt;/code&gt;  和 &lt;code&gt;pdf&lt;/code&gt;  中设定，但是边界大小， &lt;code&gt;par&lt;/code&gt;  函数似乎就不奏效了。至今天探索，才发现原来这个参数隐藏在 &lt;code&gt;theme&lt;/code&gt;  中，其名为 &lt;code&gt;plot.margin&lt;/code&gt; 。&lt;/p&gt;
&lt;h2 id=&#34;1-原图&#34;&gt;1. 原图&lt;a class=&#34;headerlink&#34; href=&#34;#1-原图&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nf&#34;&gt;library&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ggplot2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;library&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ggthemes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;ggplot&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mtcars&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;aes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mpg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;wt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;geom_point&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;aes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;colour&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;factor&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cyl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)))&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;guides&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;theme_solarized&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;light&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;FALSE&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;scale_colour_solarized&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;blue&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;ggsave&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;test0.png&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;units&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;in&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dpi&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;300&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;height&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;device&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;png&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;test0.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FsVQvwY2GAZJJU8-Uc8wHbB001in.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;2-第一次调整边界参数&#34;&gt;2. 第一次调整边界参数&lt;a class=&#34;headerlink&#34; href=&#34;#2-第一次调整边界参数&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nf&#34;&gt;library&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ggplot2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;library&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ggthemes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;ggplot&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mtcars&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;aes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mpg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;wt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;geom_point&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;aes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;colour&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;factor&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cyl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)))&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;guides&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;theme_solarized&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;light&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;FALSE&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;scale_colour_solarized&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;blue&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;theme&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;plot.margin&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;unit&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;rep&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;lines&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;ggsave&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;test1.png&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;units&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;in&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dpi&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;300&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;height&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;device&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;png&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;test1.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FlT7xm5tQQjc489eE0zd9BaCBR2v.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;3-第二次调整边界参数&#34;&gt;3. 第二次调整边界参数&lt;a class=&#34;headerlink&#34; href=&#34;#3-第二次调整边界参数&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nf&#34;&gt;library&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ggplot2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;library&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ggthemes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;ggplot&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mtcars&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;aes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mpg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;wt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;geom_point&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;aes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;colour&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;factor&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cyl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)))&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;guides&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;theme_solarized&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;light&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;FALSE&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;scale_colour_solarized&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;blue&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;theme&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;plot.margin&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;unit&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;rep&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;lines&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;ggsave&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;test2.png&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;units&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;in&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dpi&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;300&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;height&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;device&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;png&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;test3.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FlHN-gS_YGQorvGsJYBcIPSteTs2.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;比较上述 3 幅图片，可明显发现，随着边界参数值增大，绘图区与边界的距离不断增大，从而在图片上留出更多空白区域。&lt;/p&gt;
&lt;p&gt;此外， &lt;code&gt;plot.margin&lt;/code&gt;  是否跟 &lt;code&gt;par(mar=...)&lt;/code&gt;  一样遵循下、左、上、右的控制顺序呢？各位可以敲下代码，稍稍一试。&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E5%8F%AF%E8%A7%86%E5%8C%96/R%E8%AF%AD%E8%A8%80%E5%8F%AF%E8%A7%86%E5%8C%96/2020-05-20-ggplot_plot_margin/</link>
      <pubDate>Wed, 20 May 2020 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%8F%AF%E8%A7%86%E5%8C%96/R%E8%AF%AD%E8%A8%80%E5%8F%AF%E8%A7%86%E5%8C%96/2020-05-20-ggplot_plot_margin/</guid>
      
    </item>
    
    <item>
      <title>远程挂载 NFS 共享目录引发死机问题</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2020-05-18&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2020-05-18T00:00:00&#39;&gt;2020-05-18&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-06-25&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-06-25T10:54:51&#39;&gt;2021-06-25&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;集群的存储空间有限，把一些历史的归档数据放在了公司的另外一台老旧存储服务器上，并使用 NFS 把它挂载到了 log 节点。周末的时候机房空调故障，旧存储服务器挂掉了！周一上班，在集群登陆节点使用 df -Th 查看磁盘使用情况，发现 df 命令卡死，查看挂载盘目录的时候也卡死，本文为本次异常的一些处理记录。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;环境描述&#34;&gt;环境描述&lt;a class=&#34;headerlink&#34; href=&#34;#环境描述&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;A 机器（192.168.1.103）为数据的实际存储服务器。
B 机器（即集群登 log 陆节点）上挂载了 A 机器上的 hiseq3000 目录到本机的 /mnt/hiseq3000 目录（命令： &lt;code&gt;mount -t nfs 192.168.1.103:/hiseq3000 /mnt/hiseq3000&lt;/code&gt;）&lt;/p&gt;
&lt;h2 id=&#34;故障描述&#34;&gt;故障描述&lt;a class=&#34;headerlink&#34; href=&#34;#故障描述&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;现在因 A 机器（数据实际存储服务器）因故障无法访问，登录 B 机器以后执行 &lt;code&gt;mount&lt;/code&gt; ， &lt;code&gt;df -h&lt;/code&gt; ， &lt;code&gt;ll  /mnt/hiseq3000&lt;/code&gt;  等关于 /mnt 挂载点的时候都会卡住，ctrl + c  、 ctrl + z 都不能结束，只能退出重新登录。&lt;/p&gt;
&lt;h2 id=&#34;解决方法&#34;&gt;解决方法&lt;a class=&#34;headerlink&#34; href=&#34;#解决方法&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@log&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# umount -f /mnt/hiseq3000&lt;/span&gt;
umount2:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Device&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;or&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;resource&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;busy
umount.nfs:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/mnt/hiseq3000:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;device&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;is&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;busy
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@log&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# umount -f /mnt/hiseq3000&lt;/span&gt;
umount2:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Device&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;or&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;resource&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;busy
umount.nfs:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/mnt/hiseq3000:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;device&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;is&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;busy
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@log&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# umount -f /mnt/hiseq3000&lt;/span&gt;
umount2:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Device&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;or&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;resource&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;busy
umount.nfs:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/mnt/hiseq3000:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;device&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;is&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;busy
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@log&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# umount -f /mnt/hiseq3000&lt;/span&gt;
umount2:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Invalid&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;argument
umount:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/mnt/hiseq3000:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mounted
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;前面貌似执行  umount -f /mnt/hiseq3000 强制卸载时不起作用的，但是最后是能卸载掉的！！！&lt;/strong&gt;
**
**&lt;/p&gt;
&lt;h2 id=&#34;原因分析&#34;&gt;原因分析&lt;a class=&#34;headerlink&#34; href=&#34;#原因分析&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;**
当 NFS 服务端（即数据实际存储的 A 服务器）停止提供挂载服务时，客户端（集群登陆 log 挂载节点）会出现卡死的情况，导致文件系统不能查看相关信息，此时可以重新启动 nfs 服务端来恢复客户端的查询功能；如果不重启  nfs 服务端的话，只能通过上面的 &lt;code&gt;umount -f&lt;/code&gt;  进行强制卸载。
**
&lt;strong&gt;有人说为了避免这个问题，挂载的时候要加和上 soft 选项。（没亲自试过）&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;而导致此问题的原因是在使用 nfs 挂载的时候使用的是默认的 hard-mount 挂载功能，当服务端停止服务时，客户端加载 nfs 不成功，就会不断的重试，直到服务端恢复之前，挂载目录都会出现卡死的情况。hard-mount 是系统的缺省值。在选定 hard-mount 时，最好同时选 intr , 允许中断系统的调用请求，避免引起系统的挂起。当 NFS 服务器不能响应 NFS 客户端的 hard-mount 请求时， NFS 客户端会显示 &amp;ldquo;NFS server hostname not responding, still trying&amp;rdquo;。&lt;/p&gt;
&lt;p&gt;因此需要在挂载时更换为 soft-mount，使用此功能挂载后，当服务端出现停止服务的情况时，会重试 retrans 设定的固定次数。如果 retrans 次都不成功，则放弃此操作，返回错误信息 &amp;ldquo;Connect time out&amp;rdquo;。&lt;/p&gt;
&lt;p&gt;挂载命令（retry 和 retrans 两个参数的区别？？？）：&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;mount&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-t&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;nfs&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-o&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;rw,intr,soft,timeo&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;30&lt;/span&gt;,retry&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;nfs-server://share-path&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;local-path
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;/etc/fstab：&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;nfs-server:/share-path&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;/local-path&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;nfs&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;rw,soft,intr&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;nfs-服务器的故障排除&#34;&gt;&lt;strong&gt;NFS 服务器的故障排除&lt;/strong&gt;&lt;a class=&#34;headerlink&#34; href=&#34;#nfs-服务器的故障排除&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;NFS 出现了故障，可以从以下几个方面着手检查：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;NFS 客户机和服务器的负荷是否太高，服务器和客户端之间的网络是否正常。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;我们可以使用常见的网络连接和测试工具 ping 及 tracerroute 来测试网络连接及速度是否正常，网络连接正常是 NFS 作用的基础。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;/etc/exports 文件的正确性。&lt;/li&gt;
&lt;li&gt;必要时重新启动 NFS 或 portmap 服务。运行下列命令重新启动 portmap 和 NFS：&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# /etc/init.d/portmap restart       # 适用RHEL/CentOS 5.x&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# /etc/init.d/nfs restart&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# /etc/init.d/rpcbind restart   # 在RHEL/CentOS 6.x里面&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# chkconfig portmap on&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# chkconfig nfs on&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# chkconfig rpcbind on  # 在RHEL/CentOS 6.x里面&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;注意：在 RHEL/CentOS 6.x 里面，portmap 服务改名为 rpcbind 服务了；顺便说一下，rpcbind 服务也是图形界面的关键基础服务，不启动此服务，不能启动图形桌面。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;检查客户端中的 mount 命令或 /etc/fstab 的语法是否正确。&lt;/li&gt;
&lt;li&gt;查看内核是否支持 NFS 和 RPC 服务。一般正常安装的 Linux 系统都会默认支持 NFS 和 RPC 服务，除非你自己重新编译的内核，而且没选择 nfs 支持选项编译。&lt;/li&gt;
&lt;/ol&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%85%8D%E7%BD%AE%E4%BD%BF%E7%94%A8/2020-05-18-nfs-umount/</link>
      <pubDate>Mon, 18 May 2020 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%85%8D%E7%BD%AE%E4%BD%BF%E7%94%A8/2020-05-18-nfs-umount/</guid>
      
    </item>
    
    <item>
      <title>如何卸载 python setup.py install 安装的包？</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2020-05-09&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2020-05-09T00:00:00&#39;&gt;2020-05-09&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-06-25&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-06-25T10:44:56&#39;&gt;2021-06-25&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;当我们半自动安装某些 python 包时，总是存在很多依赖关系的问题，而这些问题还是很难避免的，所以，当我们安装一个不确定的包的时候，最好提前收集一些相关资料，或者请教他人，同时最好把安装过程都记录下来。不然到时候想要卸载半天都卸不干净，即麻烦又白白浪费时间。&lt;/p&gt;
&lt;h3 id=&#34;1-pip-方法&#34;&gt;1. pip 方法&lt;a class=&#34;headerlink&#34; href=&#34;#1-pip-方法&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;**直接使用 **&lt;code&gt;**pip uninstall package**&lt;/code&gt; 即可。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;## 卸载 numpy&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;pip3&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;uninstall&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;numpy&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;2-easy_install-方法&#34;&gt;2. easy_install 方法&lt;a class=&#34;headerlink&#34; href=&#34;#2-easy_install-方法&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;**直接使用 **&lt;code&gt;**easy_install -m lib**&lt;/code&gt; 卸载。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;## 卸载 numpy&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;easy_install&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;m&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;numpy&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;3-setuppy-方法&#34;&gt;3. setup.py 方法&lt;a class=&#34;headerlink&#34; href=&#34;#3-setuppy-方法&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;安装前记录安装细节，以便日后卸载。&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;## 记录安装日志&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# 安装numpy&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;python3&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;setup&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;py&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;install&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;record&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;install&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;log&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## 卸载的时候使用日志文件install.log&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;cat&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;install&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;log&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;xargs&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;rm&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rf&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;与安装时创建这些文件相反，读取日志文件 install.log，删除安装时创建的所有文件和目录。&lt;/strong&gt;
**&lt;/p&gt;
&lt;h3 id=&#34;4-卸载与-pip-的包依赖项&#34;&gt;4. 卸载与 Pip 的包依赖项&lt;a class=&#34;headerlink&#34; href=&#34;#4-卸载与-pip-的包依赖项&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;当使用 &lt;code&gt;pip&lt;/code&gt; 安装包时，它还会安装包所需的所有依赖项。 不幸的是，当您卸载原始包时，&lt;code&gt;pip&lt;/code&gt; 不会卸载依赖项。 这里有几个不同的过程可以用来卸载依赖项。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;如果一个软件包是通过 pip 需求文件安装的（即&lt;code&gt;pip install requirements.txt&lt;/code&gt;），那么这个软件包的依赖项可以通过下面的命令卸载：&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;pip&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;uninstall&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;requirements.txt
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;如果没有使用&lt;code&gt;requirements.txt&lt;/code&gt;，您可以使用&lt;code&gt;pip show&lt;/code&gt;命令输出指定软件包的所有依赖项：&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;pip&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;show&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;lt;packagename&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;例如，输入&lt;code&gt;pip show cryptography&lt;/code&gt;，即可看到类似  &lt;code&gt;&#39;Requires: six, cffi&#39;&lt;/code&gt;  的依赖提示：
&lt;img alt=&#34;pip-show.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FiXQc_h02lAJdYuTKQux-GJM__xl.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;然后，可以使用 &lt;code&gt;pip uninstall&lt;/code&gt;  命令来卸载这些依赖项。 但是，在卸载之前，应确保这些软件包不与其他现有软件包相关。&lt;/p&gt;
&lt;h3 id=&#34;5-资料链接&#34;&gt;5. 资料链接&lt;a class=&#34;headerlink&#34; href=&#34;#5-资料链接&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;activestate，&lt;a href=&#34;https://www.activestate.com/resources/quick-reads/how-to-uninstall-python-packages/&#34;&gt;How To Uninstall Python Packages&lt;/a&gt;，ActiveState&lt;/li&gt;
&lt;/ol&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/Python/2020-05-09-uninstall-setup-py/</link>
      <pubDate>Sat, 09 May 2020 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/Python/2020-05-09-uninstall-setup-py/</guid>
      
    </item>
    
    <item>
      <title>微信 | PC 端使用 USB 共享网络备份</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2020-04-29&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2020-04-29T00:00:00&#39;&gt;2020-04-29&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-11-02&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-11-02T11:37:31&#39;&gt;2021-11-02&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;微信如果想备份聊天记录到电脑，必须安装微信电脑端，而且要求在同一网络，但是很多网友都是台式电脑，就算用路由器发射的 wifi 信号连接属于同样的网络，但是备份或者恢复时会报错提示“&lt;strong&gt;请保持手机与电脑在同一网络后重试&lt;/strong&gt;”。
&lt;img alt=&#34;c0377dc45145720cecf8883330ec14d.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FjPCZ_rCQF_qMj-oMVrwwSYtbnmg.jpeg&#34; /&gt;
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FrqyueFWYOxet7Xhx-V6enxPVdag.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;使用本帖的方法即可解决。&lt;/p&gt;
&lt;p&gt;要求准备：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;电脑；&lt;/li&gt;
&lt;li&gt;数据线；&lt;/li&gt;
&lt;li&gt;可连接的网络；&lt;/li&gt;
&lt;li&gt;微信电脑端，微信电脑端下载：&lt;a href=&#34;https://pc.weixin.qq.com/&#34;&gt;https://pc.weixin.qq.com/&lt;/a&gt;。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;备份操作说明：&lt;/strong&gt;
:::tips
&lt;strong&gt;特别注意步骤 2 和 3，这就是解决备份提示手机电脑不是同一网络的方法！&lt;/strong&gt;
:::&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;打开电脑端微信登录；&lt;/li&gt;
&lt;li&gt;使用数据线连接电脑和手机；&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fug1ANRX9WrAKHo5x26VYDpdoDnI.png&#34; /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;以华为手机 HarmonyOS-2.0.0.165 系统为例，进入手机**设置 **→ **移动网络 **→ **个人热点 **→ **更多共享设置 **→ &lt;strong&gt;点击启用 USB 共享网络。&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;最后，点击电脑端微信左下角的【备份与恢复】然后按照提示备份即可。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/Windows/2020-04-29-hp5ywk/</link>
      <pubDate>Wed, 29 Apr 2020 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/Windows/2020-04-29-hp5ywk/</guid>
      
    </item>
    
    <item>
      <title>MobaXterm 客户端安装说明</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2020-04-21&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2020-04-21T00:00:00&#39;&gt;2020-04-21&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2024-08-05&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2024-08-05T15:07:08&#39;&gt;2024-08-05&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;MobaXterm 是一款基于 Xserver 服务器和 SSH 客户端而推出的远程计算机终端控制软件，集串口，SSH 远程登录和 FTP 传输三合一的工具，便携版操作简单，使用非常方便。MobaXterm 中文版内建多标签和多终端分屏，采用 sftp 文件传输，还支持运程运行 X 窗口程序，以其强大的功能而深受大众的喜爱。    &lt;br /&gt;
&lt;img alt=&#34;Cool-features.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FpTLo9aWhu8hBlydiGWZyDhX-BCy.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;常用配置&#34;&gt;常用配置&lt;a class=&#34;headerlink&#34; href=&#34;#常用配置&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;个人常用配置（&lt;strong&gt;Setting&lt;/strong&gt; → &lt;strong&gt;Configuration&lt;/strong&gt;）。    &lt;br /&gt;
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fj2hYMInrpeM5Lv4rmLzPq0a-A75.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;windows-安全中心&#34;&gt;Windows 安全中心&lt;a class=&#34;headerlink&#34; href=&#34;#windows-安全中心&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;在 Windows 10/11 下安装 MobaXterm 破解版本，可能会因为 Windows 安全或者防火墙导致压缩包无法下载（提示：&lt;strong&gt;检测到病毒，无法下载&lt;/strong&gt;，或者下载下来无法正常解压）！    &lt;br /&gt;
&lt;img alt=&#34;moba-keygen-unsafe&#34; src=&#34;https://kg.weiyan.cc/2024/08/moba-keygen-unsafe.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;这种情况，需要在 Windows 安全中心 → 病毒和威胁防护 → 排除项 中添加要从 Microsoft Defender 中排除的目录目录。      &lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;win-safe-setting-1&#34; src=&#34;https://kg.weiyan.cc/2024/08/win-safe-setting-1.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;win-defender&#34; src=&#34;https://kg.weiyan.cc/2024/08/win-defender.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;win-defender-add-folders&#34; src=&#34;https://kg.weiyan.cc/2024/08/win-defender-add-folders.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;专业版安装&#34;&gt;专业版安装&lt;a class=&#34;headerlink&#34; href=&#34;#专业版安装&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;下载 MobaXterm Professional Edition 压缩包（如，&lt;strong&gt;MobaXterm-Professional-Edition-24.2-Build-5220.zip&lt;/strong&gt;），解压缩：    &lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;mobatek-24&#34; src=&#34;https://kg.weiyan.cc/2024/08/mobatek-24.2-unzip.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;然后，把该目录下的 &lt;strong&gt;MobaXterm_installer_vxx.x.zip&lt;/strong&gt; 和 &lt;strong&gt;MobaXterm_Keygen_v1.5_By_DeltaFoX.rar&lt;/strong&gt; 也解压缩到当前目录：&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;mobatek-24&#34; src=&#34;https://kg.weiyan.cc/2024/08/mobatek-24.2-unzip-all.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;双击 &lt;strong&gt;MobaXterm_installer_vxx.xx.msi&lt;/strong&gt; 安装。  &lt;br /&gt;
&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FsuIvHKuqYasRoRkJKQrAt8-ljYJ.jpeg&#34; /&gt;&lt;/p&gt;
&lt;p&gt;根据安装步骤安装即可。  &lt;br /&gt;
&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FpXbeB0fu3oNHMNexbLmFqHWGP8L.jpeg&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;手动激活&#34;&gt;手动激活&lt;a class=&#34;headerlink&#34; href=&#34;#手动激活&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;这里，以手动激活 MobaXterm-Professional-Edition-23.0 为示例，其他的版本手动激活方法与此类似。&lt;/p&gt;
&lt;p&gt;在解压缩目录下双击 &lt;strong&gt;MobaXterm_Keygen_v1.5_By_DeltaFoX.exe&lt;/strong&gt;，先点击 &lt;strong&gt;&amp;ldquo;Get Version from File&amp;rdquo;&lt;/strong&gt; 按钮。   &lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FoHkyHp-b9lXGI0ss03m6HR4pZYG.jpeg&#34; /&gt;&lt;/p&gt;
&lt;p&gt;在出现的弹窗中选择软件主程序，然后点击 &lt;strong&gt;&amp;ldquo;打开&amp;rdquo;&lt;/strong&gt;。    &lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FuYn7z_OYoLRviAoNYd8VMKknnqX.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;再选择 &lt;strong&gt;&amp;ldquo;Generate&amp;rdquo;&lt;/strong&gt;，生成许可证即可。    &lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FrjxZ5qUgDwF0ovEG4deJ-HgT4Ji.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;专业版本-201&#34;&gt;专业版本 20.1&lt;a class=&#34;headerlink&#34; href=&#34;#专业版本-201&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;这里介绍一下基于软件+Keygen 的  MobaXterm Professional 20.1 破解版安装方法。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;把  &lt;strong&gt;MbaXtermPro-v20.1.zip&lt;/strong&gt; 解压，得到下面几个文件。    &lt;br /&gt;
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FuFtOLTdWbyUeVgCo3_jOXP0vHSQ.png&#34; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;点击 &amp;ldquo;&lt;strong&gt;解压密码+安装说明&lt;/strong&gt;&amp;ldquo;，即本文档获取解压密码：&lt;strong&gt;bioitee&lt;/strong&gt;。    &lt;br /&gt;
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FhkNPSdJHhVSaCsDi72ZtgwiK76d.png&#34; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;进入 &lt;strong&gt;&amp;ldquo;MobaXtermProfessional-v20.1&amp;rdquo;&lt;/strong&gt; 目录，双击  &lt;strong&gt;&amp;ldquo;MobaXterm_installer_20.1.msi&amp;rdquo;&lt;/strong&gt; 安装 MobaXterm。    &lt;br /&gt;
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FkeCvBVLc6ZllMOOb7sB9YWoTsQQ.png&#34; /&gt;       &lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;MobaXterm 安装完成后，点击 &lt;strong&gt;&amp;ldquo;MobaXterm_Keygen_v1.4_By_DeltaFoX.exe&amp;rdquo;&lt;/strong&gt; 创建激活码。    &lt;br /&gt;
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FlugTsKrGe4y_vpcn7VmsVU2aLrM.png&#34; /&gt;       &lt;br /&gt;
&lt;img alt=&#34;save-key.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FmmykrIvMcBmC2twwMTNC6Qj4Fpn.png&#34; /&gt;      &lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;最后，打开安装好的 MobaXterm，即可看到激活信息。
   &lt;img alt=&#34;mobaxterm-v20-1.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fl1zevSxnU-Gbk0hOSyeTf6v0aF7.png&#34; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;参考资料&#34;&gt;参考资料&lt;a class=&#34;headerlink&#34; href=&#34;#参考资料&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&#34;https://zhuanlan.zhihu.com/p/526667214&#34;&gt;解决 Windows10/11 系统无法下载文件被拦截问题&lt;/a&gt;，知乎&lt;/li&gt;
&lt;/ol&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/IDE/2020-04-21-mobaxterm-installation/</link>
      <pubDate>Tue, 21 Apr 2020 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/IDE/2020-04-21-mobaxterm-installation/</guid>
      
    </item>
    
    <item>
      <title>搜狗输入法的一些使用技巧</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2020-04-17&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2020-04-17T00:00:00&#39;&gt;2020-04-17&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2023-03-23&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2023-03-23T09:43:50&#39;&gt;2023-03-23&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h3 id=&#34;1-隐藏与恢复状态栏&#34;&gt;1. 隐藏与恢复状态栏&lt;a class=&#34;headerlink&#34; href=&#34;#1-隐藏与恢复状态栏&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;img alt=&#34;sougou-input-hide-status.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FqVqma_NyBloqLFGOmkSUjudJ0y7.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;2-手机搜狗输入法自定义符号&#34;&gt;2. 手机搜狗输入法自定义符号&lt;a class=&#34;headerlink&#34; href=&#34;#2-手机搜狗输入法自定义符号&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;打开搜狗输入法，在页面右下方依次选择“我的”→“设置”→“输入设置”→“自定义符号”。&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/Windows/2020-04-17-mc5bkg/</link>
      <pubDate>Fri, 17 Apr 2020 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/Windows/2020-04-17-mc5bkg/</guid>
      
    </item>
    
    <item>
      <title>使用 mv 重命名文件无需两次键入文件名称</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2020-04-17&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2020-04-17T00:00:00&#39;&gt;2020-04-17&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2023-08-01&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2023-08-01T01:13:48&#39;&gt;2023-08-01&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;linux-bash.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FuZTZ7gAI1jlk8WLq8mTcu0QfLCO.png&#34; /&gt;
使用过 Bash 的童鞋都知道 &lt;code&gt;mv&lt;/code&gt; 是一个可以用于文件改名的命令，而且使用这个命令修改文件名时我们需要输入两次文件名（旧名字和新名字）。&lt;/p&gt;
&lt;p&gt;如果有一种情况是只需要你改动文件名中的一个字母，而文件名又特别长，这就很烦人。这里有一个 Bash 技巧，可以让你输入最小化。&lt;/p&gt;
&lt;p&gt;例如，我要把 A 文件重命名为 B：&lt;/p&gt;
&lt;p&gt;A. LYM-NC-1803_19-3-24-2.&lt;strong&gt;read1&lt;/strong&gt;_Clean.uniq.sortByName.bam
B. LYM-NC-1803_19-3-24-2.&lt;strong&gt;read2&lt;/strong&gt;_Clean.uniq.sortByName.bam&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;mv&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;LYM-NC-1803_19-3-24-2.read&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;,2&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;_Clean.uniq.sortByName.bam
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;我们可以使用 &lt;strong&gt;“空”&lt;/strong&gt; 来添加或删除名称（例如将 C 文件重命名为 D）：&lt;/p&gt;
&lt;p&gt;C. C2C12-exoCTRL.sortByName.bam
D. C2C12-exoCTRL.sortByName&lt;strong&gt;.uniq&lt;/strong&gt;.bam&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;mv&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;C2C12-exoCTRL.sortByName&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;,.uniq&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;.bam
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;最后，安利一个使用 &lt;code&gt;mv&lt;/code&gt;  命令重命名 linux bash 中的文件，而无需两次输入全名的快捷方式。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;首先，把下面的代码粘贴到你的 &lt;code&gt;~/.bashrc&lt;/code&gt;  文件最后， &lt;code&gt;:wq&lt;/code&gt;  保存。&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# Put this function to your .bashrc file.&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# Usage: mv oldfilename&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# If you call mv without the second parameter it will prompt you to edit the filename on command line.&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# Original mv is called when it&amp;#39;s called with more than one argument.&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# It&amp;#39;s useful when you want to change just a few letters in a long name.&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;#&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# Also see:&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# - imv from renameutils&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# - Ctrl-W Ctrl-Y Ctrl-Y (cut last word, paste, paste)&lt;/span&gt;

&lt;span class=&#34;k&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mv&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$#&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-ne&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;||&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;!&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-e&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;command&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mv&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$@&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;

&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;read&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-ei&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;newfilename
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;command&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mv&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-v&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$newfilename&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;source ~/.bashrc&lt;/code&gt;  刷新环境变量。&lt;/li&gt;
&lt;li&gt;使用 &lt;code&gt;mv&lt;/code&gt;  命令重命名 linux 中的文件。如果您在命令中包含路径名部分，那么它也将与路径名部分一起工作，请参考下面的视频截图。
   &lt;a href=&#34;https://www.yuque.com/shenweiyan/cookbook/mv-skill?_lake_card=%7B%22status%22%3A%22done%22%2C%22name%22%3A%22mv-bash.mp4%22%2C%22size%22%3A16279195%2C%22taskId%22%3Anull%2C%22taskType%22%3A%22%22%2C%22url%22%3Anull%2C%22cover%22%3Anull%2C%22videoId%22%3A%22180267216f6149968e1a0466d290aedd%22%2C%22download%22%3Afalse%2C%22percent%22%3A0%2C%22coverUrl%22%3A%22https%3A%2F%2Fcdn.nlark.com%2Fyuque%2F0%2F2020%2Fjpeg%2F126032%2F1587101911476-aef2b2ff-bc67-44e4-bcc4-80fcb29ebb9f.jpeg%22%2C%22aliyunVideoSrc%22%3Anull%2C%22taobaoVideoId%22%3A%22259696476440%22%2C%22uploaderId%22%3A126032%2C%22docUrl%22%3A%22https%3A%2F%2Fwww.yuque.com%2Fshenweiyan%2Fcookbook%2Fmv-skill%22%2C%22id%22%3A%22oow6F%22%2C%22card%22%3A%22video%22%7D#oow6F&#34;&gt;&lt;img alt=&#34;mv-bash.mp4 (15.53MB)&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fm1y3biihJGP-U9hiN5r8qb1_SWk.jpeg&#34; /&gt;&lt;/a&gt;
   以上，就是使用 &lt;code&gt;mv&lt;/code&gt;  重命名文件无需两次键入文件名称的一个小技巧。我想如果我们需要对文件名进行一些复杂的编辑，则这两个小技巧会很有用，因为在这种情况下，您最多只能使用一个大括号组。但老实说，在这种情况下，只需双击第一个要选择的参数，然后单击鼠标中键进行粘贴，然后使用箭头键进行编辑，就可以了。&lt;/li&gt;
&lt;/ol&gt;</description>
      <link>https://shenwy.com/yuque/%E7%BC%96%E7%A8%8B%E6%8A%80%E6%9C%AF/Shell/2020-04-17-mv-skill/</link>
      <pubDate>Fri, 17 Apr 2020 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E7%BC%96%E7%A8%8B%E6%8A%80%E6%9C%AF/Shell/2020-04-17-mv-skill/</guid>
      
    </item>
    
    <item>
      <title>温故而知新，学习一下 ggplot2 饼图</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2020-03-19&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2020-03-19T00:00:00&#39;&gt;2020-03-19&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-06-30&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-06-30T09:42:41&#39;&gt;2021-06-30&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;其实 ggplot2 并没有类似于 &lt;code&gt;geom_pie()&lt;/code&gt;  这样的函数实现饼图的绘制，它是由 &lt;code&gt;geom_bar()&lt;/code&gt;  柱状图经过 &lt;code&gt;coord_polar()&lt;/code&gt;  极坐标弯曲从而得到的。&lt;/p&gt;
&lt;p&gt;对于为什么 ggplot2 中没有专门用于饼图绘制的函，有人说：“柱状图的高度，对应于饼图的弧度，饼图并不推荐，因为人类的眼睛比较弧度的能力比不上比较高度（柱状图）”。关于饼状图被批评为可视化效果差，不推荐在 R 社区中使用的文章在网络也有不少，感兴趣的可以去搜一下。&lt;/p&gt;
&lt;p&gt;不管怎么说，学习一下总不是坏事，趁着一些客户刚好对饼图有需求，学习重温一下。&lt;/p&gt;
&lt;h2 id=&#34;极坐标系&#34;&gt;极坐标系&lt;a class=&#34;headerlink&#34; href=&#34;#极坐标系&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;极坐标应该是高中数学的知识，对我而言，基本都已经忘光了，结合网上的一些资料重温一下。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;极坐标是指在平面内取一个定点 O，叫极点，引一条射线  Ox，叫做极轴，再选定一个长度单位和角度的正方向（通常取逆时针方向）。对于平面内任何一点 M，用   ρ 表示线段 OM 的长度（有时也用 r 表示），θ 表示从 Ox 到 OM 的角度，ρ 叫做点 M 的极径，θ 叫做点 M 的极角，有序数对 (ρ, θ) 就叫点 M 的极坐标，这样建立的坐标系叫做极坐标系。通常情况下，M 的极径坐标单位为 1（长度单位），极角坐标单位为 rad（或 °）。
&lt;img alt=&#34;jizuobiao.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fru75ZVd87mbHUQ7fqymH0cBDe3a.jpeg&#34; /&gt;
极坐标系中一个重要的特性是，平面直角坐标中的任意一点，可以在极坐标系中有无限种表达形式。通常来说，点（r, θ）可以任意表示为（r, θ ± n×360°）或 (−r, θ ± (2n + 1)180°)，这里 n 是任意整数。如果某一点的 r 坐标为 0，那么无论 θ 取何值，该点的位置都落在了极点上。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;笛卡尔坐标和极坐标之间的转换，请参考数学乐网站的《&lt;a href=&#34;https://www.shuxuele.com/polar-cartesian-coordinates.html&#34;&gt;极坐标与笛卡尔坐标&lt;/a&gt;》一文，非常详细直观。&lt;/p&gt;
&lt;h2 id=&#34;coord_polar&#34;&gt;coord_polar&lt;a class=&#34;headerlink&#34; href=&#34;#coord_polar&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;coord_polar()&lt;/code&gt;  是 &lt;code&gt;ggplot2&lt;/code&gt;  中的极坐标函数，它可以弯曲横纵坐标，使用这个函数做出蜘蛛图或饼图的效果。我在网络上查了一下，比较少看到关于 &lt;code&gt;coord_polar()&lt;/code&gt;  原理的介绍，只是在 &lt;code&gt;ggplot2&lt;/code&gt;  的 Tidyverse 上发现了几个&lt;a href=&#34;https://ggplot2.tidyverse.org/reference/coord_polar.html&#34;&gt;例子&lt;/a&gt;。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nf&#34;&gt;library&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ggpubr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;library&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ggplot2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;df&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;data.frame&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;A&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;B&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;C&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;50&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;30&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;ggplot&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;df&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;aes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fill&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;geom_bar&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;stat&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;identity&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;colour&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;black&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;ggplot&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;df&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;aes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fill&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;geom_bar&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;stat&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;identity&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;colour&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;black&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;用法&#34;&gt;用法&lt;a class=&#34;headerlink&#34; href=&#34;#用法&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;coord_polar()&lt;/code&gt;  主要有四个参数： &lt;code&gt;theta&lt;/code&gt;， &lt;code&gt;start&lt;/code&gt;， &lt;code&gt;direction&lt;/code&gt;  和 &lt;code&gt;clip&lt;/code&gt; 。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nf&#34;&gt;coord_polar&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;theta&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;x&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;start&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;direction&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;clip&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;on&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;theta：variable to map angle to ( &lt;code&gt;x&lt;/code&gt; or &lt;code&gt;y&lt;/code&gt; ).&lt;/li&gt;
&lt;li&gt;start：offset of starting point from 12 o&amp;rsquo;clock in radians.&lt;/li&gt;
&lt;li&gt;direction：1, clockwise; -1, anticlockwise.&lt;/li&gt;
&lt;li&gt;clip：Should drawing be clipped to the extent of the plot panel? A setting of &lt;code&gt;&#34;on&#34;&lt;/code&gt; (the default) means yes, and a setting of &lt;code&gt;&#34;off&#34;&lt;/code&gt; means no.&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;小知识：角度制 vs  弧度制&lt;/strong&gt; &amp;gt; **
1 度=π/180≈0.01745 弧度，1 弧度=180/π≈57.3 度。&lt;/p&gt;
&lt;p&gt;角的度量单位通常有两种，一种是角度制，另一种就是弧度制。 角度制，就是用角的大小来度量角的大小的方法。在角度制中，我们把周角的 1/360 看作 1 度，那么，半周就是 180 度，一周就是 360 度。由于 1 度的大小不因为圆的大小而改变，所以角度大小是一个与圆的半径无关的量。&lt;/p&gt;
&lt;p&gt;弧度制，顾名思义，就是用弧的长度来度量角的大小的方法。单位弧度定义为圆周上长度等于半径的圆弧与圆心构成的角。由于圆弧长短与圆半径之比，不因为圆的大小而改变，所以弧度数也是一个与圆的半径无关的量。角度以弧度给出时，通常不写弧度单位，有时记为 rad 或 R。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FmdfS2smgvYnMMV49idOwSHHJv9J.png&#34; /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;参数示例&#34;&gt;参数示例&lt;a class=&#34;headerlink&#34; href=&#34;#参数示例&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;结合一些示例，理解一下  &lt;code&gt;coord_polar()&lt;/code&gt;  的几个参数。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;theta=&amp;rdquo;x&amp;rdquo;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;**
x 轴极化，x 轴刻度值对应扇形弧度，y 轴刻度值对应圆环半径。p 中由于 x 是等长的，所以 p1 每一个弧度为 60 度；p2 的每一个弧度为 360 度。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;p1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;coord_polar&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;theta&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;x&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;labs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;theta=\&amp;quot;x\&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;g1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;coord_polar&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;theta&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;x&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;labs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;theta=\&amp;quot;x\&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;ggarrange&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;p1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;g1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ncol&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;nrow&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;labels&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;p&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;g&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;p1&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;g1&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fq2xCE3JEYXVFwD8ydg-5JRWxJ_D.png&#34; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;theta=&amp;rdquo;y&amp;rdquo;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;**
y 轴极化，y 轴刻度值对应扇形弧度，x 轴长度对应扇形半径。对于&lt;strong&gt;并列柱状图 p**，以最大的 y 值作为 360 度的弧度，剩下的按比例类推，由于 p 中 A、B、C 是等长的，所以在 p1 中它们的半径是 1:2:3。对于&lt;/strong&gt;堆叠柱状图 g**，把 y 值按照比例划分弧度，因此它们的弧度比等于各自的 y 值比例。
**&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;p2&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;coord_polar&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;theta&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;y&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;labs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;theta=\&amp;quot;y\&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;g2&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;coord_polar&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;theta&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;y&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;labs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;theta=\&amp;quot;y\&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;ggarrange&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;p2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;g2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ncol&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;nrow&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;labels&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;p&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;g&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;p2&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;g2&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FooAcYWzTBI28dhA-SbEVIR5qYB1.png&#34; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;start=pi/6, direction=1&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;**
起始位置为距离 12 点针方向 30 度，顺时针排列。
**&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;p3&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;coord_polar&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;theta&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;y&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;start&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;pi&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;6&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;direction&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;labs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;theta=\&amp;quot;x\&amp;quot;,start=pi/6,direction=1&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;g3&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;coord_polar&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;theta&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;y&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;start&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;pi&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;6&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;direction&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;labs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;theta=\&amp;quot;x\&amp;quot;,start=pi/6,direction=1&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;ggarrange&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;p3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;g3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ncol&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;nrow&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;labels&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;p&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;g&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;p3&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;g3&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FrUrp8Ekifh52FLtL1PfWqHECxYI.png&#34; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;start=pi/6, direction=-1&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;起始位置为距离 12 点针方向 30 度，逆时针排序。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;p4&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;coord_polar&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;theta&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;y&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;start&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;pi&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;6&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;direction&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;-1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;labs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;theta=\&amp;quot;y\&amp;quot;,start=pi/6,direction=-1&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;g4&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;coord_polar&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;theta&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;y&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;start&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;pi&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;6&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;direction&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;-1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;labs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;theta=\&amp;quot;y\&amp;quot;,start=pi/6,direction=-1&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;ggarrange&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;p4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;g4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ncol&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;nrow&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;labels&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;p&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;g&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;p4&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;g4&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FtrpqycSJnrCtX7W8gGtxnoNTR9N.png&#34; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;start=-pi/6, direction=1&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;起始位置为距离 12 点针方向负 30 度，顺时针排序。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;p5&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;coord_polar&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;theta&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;y&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;start&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=-&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;pi&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;6&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;direction&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;labs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;theta=\&amp;quot;y\&amp;quot;,start=-pi/6,direction=1&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;g5&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;coord_polar&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;theta&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;y&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;start&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=-&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;pi&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;6&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;direction&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;labs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;theta=\&amp;quot;y\&amp;quot;,start=-pi/6,direction=1&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;ggarrange&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;p5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;g5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ncol&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;nrow&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;labels&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;p&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;g&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;p5&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;g5&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FtUC1RZKUkypbz4UrLLHUS8P0fdH.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;Github 上有关于  &lt;a href=&#34;https://github.com/tidyverse/ggplot2/blob/master/R/coord-polar.r&#34;&gt;coord-pola.r&lt;/a&gt;  的源码，整个代码只有 300 多行，有兴趣的同学可以去研究一下，上面的理解如有不对的地方还请看官们帮忙指正。&lt;/p&gt;
&lt;h2 id=&#34;饼图中添加文字的位置控制---借助公式&#34;&gt;饼图中添加文字的位置控制 - 借助公式&lt;a class=&#34;headerlink&#34; href=&#34;#饼图中添加文字的位置控制---借助公式&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;绘制饼图的过程中，利用 &lt;code&gt;ggplot2&lt;/code&gt;  的 &lt;code&gt;geom_bar&lt;/code&gt;  结合 &lt;code&gt;coord_polar&lt;/code&gt;  实现。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# Load ggplot2&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;library&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ggplot2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# Create Data&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;data.frame&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;group&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;LETTERS&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;13&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;7&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;9&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;21&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# Basic piechart&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;ggplot&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;aes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fill&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;group&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;geom_bar&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;stat&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;identity&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;coord_polar&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;y&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;start&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fg1XhYHrN4WThwmqRUPzOgoYbeAh.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;需要理解的点是饼图的排布是按照 &lt;code&gt;aes(fill)&lt;/code&gt;  的因子顺序确定的。譬如数据如下：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dat&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;data.frame&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;LETTERS&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Num&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;90&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;34&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;56&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;99&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;15&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dat&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Num&lt;/span&gt;
&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;90&lt;/span&gt;
&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;34&lt;/span&gt;
&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;C&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;56&lt;/span&gt;
&lt;span class=&#34;m&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;99&lt;/span&gt;
&lt;span class=&#34;m&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;15&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;必须根据数据先确定 &lt;code&gt;mapping&lt;/code&gt;  中 &lt;code&gt;aes(fill)&lt;/code&gt;  的因子顺序，譬如这里会按照 &lt;code&gt;dat$type&lt;/code&gt;  填充，这种非有序因子会基于字母顺序来默认其填充顺序。&lt;/p&gt;
&lt;p&gt;为了确定数据填充的先后，同时方便在不同区域上填写上对应数据的大小，所以会先去创建有序因子，从而使数据列 &lt;code&gt;dat$Num&lt;/code&gt;  的自然顺序和因子的顺序在一定程度上一致（一致的同向对应或反向对应）。譬如如下使方向一致：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;dat&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;factor&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dat&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;levels&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dat&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;order&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;T&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;dat&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;type&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;有序因子的结果则如下，和 &lt;code&gt;dat$Num&lt;/code&gt;  的顺序能够一致上，不会出现对应错乱问题。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;C&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Levels&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;C&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;画图：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;p_pie&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;ggplot&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dat&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;aes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dat&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[,&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fill&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dat&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[,&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]))&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;geom_bar&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;stat&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;identity&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;coord_polar&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;theta&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;y&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;direction&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;scale_fill_brewer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;palette&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;Set3&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;direction&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;labs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fill&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;Type&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;ggtitle&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;label&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;test&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;subtitle&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;NULL&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;p_pie&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;结合下图结果可以看出坐标轴方向使顺时针，而颜色设置 &lt;code&gt;scale_fill_brewer(palette =&#34;Set3&#34;,direction = 1)&lt;/code&gt;  设定了第一个颜色填充到第一个因子对应的 “A” 上，这样就反映出在图片实际分布中数据和因子是反向对应的。虽然在 &lt;code&gt;dat&lt;/code&gt;  数据框中设置是顺序一致方向相同的对应，但图片分布中会改变。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;小知识：scale_fill_brewer&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;scale_fill_brewer 是一个 ggplot2 和 RColorBrewer 关联的一个扩展调色板，其他可用于 scale_fill_brewer  调色板的颜色包括：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Diverging&lt;/strong&gt;        BrBG, PiYG, PRGn, PuOr, RdBu, RdGy, RdYlBu, RdYlGn, Spectral
&lt;strong&gt;Qualitative&lt;/strong&gt;      Accent, Dark2, Paired, Pastel1, Pastel2, Set1, Set2, &lt;strong&gt;Set3&lt;/strong&gt; &amp;gt; &lt;strong&gt;Sequential&lt;/strong&gt;       Blues, BuGn, BuPu, GnBu, Greens, Greys, Oranges, OrRd, PuBu, PuBuGn, PuRd, Purples,
     RdPu, Reds, YlGn, YlGnBu, YlOrBr, YlOrRd&lt;/p&gt;
&lt;p&gt;参考：&lt;a href=&#34;https://ggplot2.tidyverse.org/reference/scale_brewer.html&#34;&gt;https://ggplot2.tidyverse.org/reference/scale_brewer.html&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FglvptxBVHUIXq9NdznBXv0KbfWc.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;结合图片中反向对应的关系，在 A 区块上中间位置填充上对应的文字 &amp;ldquo;Num:90&amp;rdquo;，它的坐标因该是 &lt;code&gt;sum(dat$Num)-90 +90/2&lt;/code&gt; ；如果是 B 区块对应的应该坐标为 &lt;code&gt;sum(dat$Num)-90-34 +34/2&lt;/code&gt; ，归纳为：&lt;strong&gt;sum(dat&lt;span class=&#34;arithmatex&#34;&gt;\(Num)-cumsum(dat\)&lt;/span&gt;Num)+dat$Num/2&lt;/strong&gt;，即：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;sum&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dat&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Num&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;cumsum&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dat&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Num&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dat&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Num&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;249.0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;187.0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;142.0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;64.5&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;7.5&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;小知识：R 语言  cumsum 函数&lt;/strong&gt; &amp;gt; ** &amp;gt; &lt;code&gt;cumsum&lt;/code&gt; 是 R 语言 &lt;code&gt;base&lt;/code&gt;  包 cum 系列的一个函数，它的功能是计算向量的累积和并返回。cum 系列还有另外三个函数： &lt;code&gt;cumprod&lt;/code&gt;， &lt;code&gt;cummin&lt;/code&gt;， &lt;code&gt;cummax&lt;/code&gt; ，它们的作用分别是计算向量的累积的乘积、极小值、极大值，并返回。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 对数值型向量求和&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;cumsum&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;6&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;15&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;21&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;28&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;36&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;45&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;55&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# 对数值型矩阵求和，结果返回仍是向量&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;cumsum&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;matrix&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;12&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;nrow&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;6&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;15&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;21&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;28&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;36&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;45&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;55&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;66&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;78&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# 对数据框求和，返回结果仍然是数据框，cumsum 会对对每个变量进行求和处理&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;cumsum&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;data.frame&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;21&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;30&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;
&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;21&lt;/span&gt;
&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;43&lt;/span&gt;
&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;6&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;66&lt;/span&gt;
&lt;span class=&#34;m&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;90&lt;/span&gt;
&lt;span class=&#34;m&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;15&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;115&lt;/span&gt;
&lt;span class=&#34;m&#34;&gt;6&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;21&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;141&lt;/span&gt;
&lt;span class=&#34;m&#34;&gt;7&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;28&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;168&lt;/span&gt;
&lt;span class=&#34;m&#34;&gt;8&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;36&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;196&lt;/span&gt;
&lt;span class=&#34;m&#34;&gt;9&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;45&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;225&lt;/span&gt;
&lt;span class=&#34;m&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;55&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;255&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;结合 &lt;code&gt;geom_text(aes(x,y))&lt;/code&gt;  的位置设置，保证中间文字填写不会出错：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;p_pie&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;p_pie&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;geom_text&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;aes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1.2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;sum&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dat&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Num&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;cumsum&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dat&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Num&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dat&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Num&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;label&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;as.character&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dat&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[,&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])),&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;p_pie&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FrSnhOW-AnO6gsfPPW-ZC5P9fFfO.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;如果最初构建有序因子的方向和实际数据的方向反向对应呢？&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;dat&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;factor&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dat&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;levels&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;rev&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dat&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;order&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;T&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;dat&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;type&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;p_pie&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;ggplot&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dat&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;aes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dat&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[,&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fill&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dat&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[,&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]))&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;geom_bar&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;stat&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;identity&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;coord_polar&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;theta&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;y&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;direction&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;scale_fill_brewer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;palette&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;Set3&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;direction&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;labs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fill&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;Type&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;ggtitle&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;label&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;test&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;subtitle&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;NULL&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;p_pie&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FjKTpPtJF6z2PFUysRBxWiLFPh-L.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;结合图片可以知道，第一个因子 &amp;ldquo;E&amp;rdquo; 对应了第一个颜色，不过从图片显示坐标中可以看到，&amp;rdquo;A&amp;rdquo; 在前，而 &amp;ldquo;A&amp;rdquo; 在原始数据  &lt;code&gt;dat$Num&lt;/code&gt;  中对应的数据也在前 90，这样计算位置就会发生改变了，这时候 &amp;ldquo;A&amp;rdquo; 文字应该对应 90-90/2，文字 &amp;ldquo;B&amp;rdquo; 将对应 90+34-34/2，&amp;hellip;，归纳为 &lt;code&gt;cumsum(dat$Num)-dat$Num/2&lt;/code&gt; 。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;cumsum&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dat&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Num&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dat&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Num&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;45.0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;107.0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;152.0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;229.5&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;286.5&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;而且图例也是反向的，需要结合 &lt;code&gt;guides(fill=guide_legend(reverse=T))&lt;/code&gt; ，并且希望第一个颜色对应最后一个因子 &amp;ldquo;A&amp;rdquo;， &lt;code&gt;scale_fill_brewer(palette =&#34;Set3&#34;,direction = -1)&lt;/code&gt; ：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;dat&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;factor&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dat&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;levels&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;rev&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dat&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;order&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;T&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;dat&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;type&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;p_pie&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;ggplot&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dat&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;aes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dat&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[,&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fill&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dat&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[,&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]))&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;geom_bar&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;stat&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;identity&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;coord_polar&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;theta&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;y&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;direction&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;scale_fill_brewer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;palette&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;Set3&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;direction&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;-1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;labs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fill&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;Type&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;ggtitle&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;label&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;test&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;subtitle&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;NULL&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;guides&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fill&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;guide_legend&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;reverse&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;T&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;geom_text&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;aes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1.2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;cumsum&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dat&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Num&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dat&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Num&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;label&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;as.character&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dat&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[,&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])),&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;p_pie&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FlvlTbhhFNnCcGcbap0cm_pB-IIL.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;总结可知：ggplot2 在画饼图的过程中设定填充的因子方向总和图片坐标中的方向相反，不过因子的顺序和数据 &lt;code&gt;dat$Num&lt;/code&gt;  的对应关系是正向对应或者反向对应，会影响相关区块的中心位置值计算的方式，从而影响 &lt;code&gt;geom_text&lt;/code&gt;  中文字定位。&lt;/p&gt;
&lt;h2 id=&#34;饼图中添加文字的位置控制---非公式&#34;&gt;饼图中添加文字的位置控制 - 非公式&lt;a class=&#34;headerlink&#34; href=&#34;#饼图中添加文字的位置控制---非公式&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;介绍一下，不利用公式，而利用 &lt;code&gt;geom_bar(position)&lt;/code&gt;  和 &lt;code&gt;geom_text(postion)&lt;/code&gt;  控制饼图文字的添加过程。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;数据&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;A&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;B&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;C&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;D&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;E&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Num&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;90&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;34&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;56&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;99&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;15&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dat&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;data.frame&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Num&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dat&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Num&lt;/span&gt;
&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;90&lt;/span&gt;
&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;34&lt;/span&gt;
&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;C&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;56&lt;/span&gt;
&lt;span class=&#34;m&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;99&lt;/span&gt;
&lt;span class=&#34;m&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;15&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;创建有序因子，方便颜色填充&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dat&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;factor&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dat&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;levels&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dat&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;order&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;T&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dat&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;type&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;C&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Levels&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;C&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;画图，柱状图  position_stack(reverse =T) 控制填充顺序反向，第一个起始于坐标 0 的位置&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;p_pie&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;ggplot&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dat&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;aes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dat&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[,&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fill&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dat&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[,&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]))&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;geom_bar&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;stat&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;identity&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;position&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;position_stack&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;reverse&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;T&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;p_pie&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fu9u6YldPecFMlftZDCaea1uFlRf.png&#34; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;极坐标变换与颜色等设置&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;###添加极坐标进行图片变换&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;p_pie&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;p_pie&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;coord_polar&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;theta&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;y&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;direction&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;p_pie&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FmgNLxhe6L9pJzrTAJ2vcOek8TMs.png&#34; /&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;###修改颜色、标签&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;p_pie&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;p_pie&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;scale_fill_brewer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;palette&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;Set3&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;direction&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;labs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fill&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;Type&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;ggtitle&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;label&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;test&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;subtitle&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;NULL&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;p_pie&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FtBWV16l00gIPBrWpqCAxAtzbHt4.png&#34; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;控制 geom_text(position)&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;### 添加文字，文字位置控制position = position_stack(reverse =T，vjust=0.5)&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;### reverse =T与柱子填充顺序同时反向，vjust=0.5在堆叠柱子的中间位置添加文字&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;p_pie&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;p_pie&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;geom_text&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;aes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1.2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;label&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;as.character&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dat&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[,&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])),&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;position&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;position_stack&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;reverse&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;T&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;vjust&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0.5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;p_pie&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FiHk_Iyf1ei0YCwUg3YSDeHexkx4.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;sessioninfo&#34;&gt;sessionInfo&lt;a class=&#34;headerlink&#34; href=&#34;#sessioninfo&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;本次学习 R 和相关包版本信息。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;sessionInfo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;R&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;version&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3.6&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2019-12-12&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Platform&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x86_64&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;conda_cos6&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;linux&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;gnu &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;64&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bit&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Running&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;under&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;CentOS&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Linux&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;7&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Core&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;Matrix&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;products&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;default&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;BLAS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;LAPACK&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;usr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;local&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;software&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;miniconda3&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lib&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;libopenblasp&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;r0.3.8.so&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;locale&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;LC_CTYPE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;en_US.UTF&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;-8&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;LC_NUMERIC&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;C&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;LC_TIME&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;en_US.UTF&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;-8&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;LC_COLLATE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;en_US.UTF&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;-8&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;LC_MONETARY&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;en_US.UTF&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;-8&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;LC_MESSAGES&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;en_US.UTF&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;-8&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;7&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;LC_PAPER&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;en_US.UTF&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;-8&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;LC_NAME&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;C&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;9&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;LC_ADDRESS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;C&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;               &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;LC_TELEPHONE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;C&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;11&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;LC_MEASUREMENT&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;en_US.UTF&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;-8&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;LC_IDENTIFICATION&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;C&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;attached&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;base&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;packages&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;stats&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;graphics&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;grDevices&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;utils&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;datasets&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;methods&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;base&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;other&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;attached&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;packages&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ggplot2_3.2.1&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;loaded&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;via&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;namespace &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;and&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;not&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;attached&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Rcpp_1.0.3&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;         &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;viridisLite_0.3.0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;digest_0.6.25&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;withr_2.1.2&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;crayon_1.3.4&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dplyr_0.8.3&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;assertthat_0.2.1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;grid_3.6.2&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;9&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;R6_2.4.0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;           &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;gtable_0.3.0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;magrittr_1.5&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;scales_1.0.0&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;13&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pillar_1.4.3&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rlang_0.4.5&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lazyeval_0.2.2&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;labeling_0.3&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;RColorBrewer_1.1&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;-2&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;glue_1.3.1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;         &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;purrr_0.3.2&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;munsell_0.5.0&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;21&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;compiler_3.6.2&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pkgconfig_2.0.3&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;colorspace_1.4&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;-1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tidyselect_0.2.5&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;25&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tibble_2.1.3&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;faq如何实现-r-语言饼图标签的-overlap-问题&#34;&gt;FAQ：如何实现 R 语言饼图标签的 overlap 问题？&lt;a class=&#34;headerlink&#34; href=&#34;#faq如何实现-r-语言饼图标签的-overlap-问题&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;有没有通用的 R 包或者函数，可以得到下面效果的饼图？&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;pie-1.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FkPAgSbYbQXKkQEE_UrAtkW81dEK.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;pie-2.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fm1Y5snZLSLrsEMGUglSerAevW0e.jpeg&#34; /&gt;
**&lt;/p&gt;
&lt;h2 id=&#34;参考资料&#34;&gt;参考资料&lt;a class=&#34;headerlink&#34; href=&#34;#参考资料&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Daitoue，《&lt;a href=&#34;https://www.omicsclass.com/article/376&#34;&gt;饼图 pie - ggplot2&lt;/a&gt;》，OmicsClass&lt;/li&gt;
&lt;li&gt;Daitoue，《&lt;a href=&#34;https://www.omicsclass.com/article/415&#34;&gt;饼图中添加文字的位置控制-ggplot2（非公式）&lt;/a&gt;》，OmicsClass&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;:::info
**特别声明：**文章中关于&amp;rdquo;饼图中添加文字的位置控制(借助公式与非公式)&amp;rdquo; 部分内容，主要参考了  Daitoue 在  OmicsClass 的两篇文章（详见参考资料），在这里特别感谢一下。参考的文章主要用于学习交流目的，如有任何侵权，请第一时间与我联系。
:::&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E5%8F%AF%E8%A7%86%E5%8C%96/R%E8%AF%AD%E8%A8%80%E5%8F%AF%E8%A7%86%E5%8C%96/2020-03-19-ggplot2-piechart-note/</link>
      <pubDate>Thu, 19 Mar 2020 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%8F%AF%E8%A7%86%E5%8C%96/R%E8%AF%AD%E8%A8%80%E5%8F%AF%E8%A7%86%E5%8C%96/2020-03-19-ggplot2-piechart-note/</guid>
      
    </item>
    
    <item>
      <title>R 函数 | cumsum 函数笔记</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2020-03-18&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2020-03-18T00:00:00&#39;&gt;2020-03-18&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-06-30&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-06-30T09:40:23&#39;&gt;2021-06-30&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id=&#34;函数功能&#34;&gt;函数功能&lt;a class=&#34;headerlink&#34; href=&#34;#函数功能&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;cumsum&lt;/code&gt;  是 R 语言 base 包 cum 系列的一个函数，它的功能是计算向量的累积和并返回。&lt;/p&gt;
&lt;p&gt;cum 系列还有另外三个函数： &lt;code&gt;cumprod&lt;/code&gt;， &lt;code&gt;cummin&lt;/code&gt;， &lt;code&gt;cummax&lt;/code&gt; ，它们的作用分别是计算向量的累积的乘积、极小值、极大值，并返回。&lt;/p&gt;
&lt;h2 id=&#34;函数参数说明&#34;&gt;函数参数说明&lt;a class=&#34;headerlink&#34; href=&#34;#函数参数说明&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;cum 系列函数只有一个参数： &lt;code&gt;cumsum(x)&lt;/code&gt;， &lt;code&gt;cumprod(x)&lt;/code&gt;， &lt;code&gt;cummin(x)&lt;/code&gt;， &lt;code&gt;cummax(x)&lt;/code&gt; 。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;当使用 &lt;code&gt;cumsum&lt;/code&gt;  或 &lt;code&gt;cumprod&lt;/code&gt;  时，x 可以是数值型(numeric)或复数型(complex)的向量、矩阵、数据框，因为数值型和复数型可做求和、求积。&lt;/li&gt;
&lt;li&gt;当使用 &lt;code&gt;cummin&lt;/code&gt;  或 &lt;code&gt;cummax&lt;/code&gt;  时，x 只能是数值型的向量、矩阵、数据框。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;函数返回值说明&#34;&gt;函数返回值说明&lt;a class=&#34;headerlink&#34; href=&#34;#函数返回值说明&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;当 x 是向量、矩阵时，cum 系列函数返回的是向量，因为矩阵的本质也是向量；当 x 是数据框时，返回值则仍为数据框。&lt;/p&gt;
&lt;h2 id=&#34;函数使用示例&#34;&gt;函数使用示例&lt;a class=&#34;headerlink&#34; href=&#34;#函数使用示例&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;对数值型向量求和&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;cumsum&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;6&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;15&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;21&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;28&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;36&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;45&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;55&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;对数值型矩阵求和，结果返回仍是向量&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;cumsum&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;matrix&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;12&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;nrow&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;6&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;15&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;21&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;28&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;36&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;45&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;55&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;66&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;78&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;对数据框求和，返回结果仍然是数据框，cumsum 会对对每个变量进行求和处理&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;cumsum&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;data.frame&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;21&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;30&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;
&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;21&lt;/span&gt;
&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;43&lt;/span&gt;
&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;6&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;66&lt;/span&gt;
&lt;span class=&#34;m&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;90&lt;/span&gt;
&lt;span class=&#34;m&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;15&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;115&lt;/span&gt;
&lt;span class=&#34;m&#34;&gt;6&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;21&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;141&lt;/span&gt;
&lt;span class=&#34;m&#34;&gt;7&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;28&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;168&lt;/span&gt;
&lt;span class=&#34;m&#34;&gt;8&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;36&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;196&lt;/span&gt;
&lt;span class=&#34;m&#34;&gt;9&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;45&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;225&lt;/span&gt;
&lt;span class=&#34;m&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;55&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;255&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;对复数型向量，可以求积&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;10i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2i&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3i&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;5+10i&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;cumprod&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2i&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;8&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1i&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;30+85i&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;对数值型向量求 min&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;cummin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;对数据框，每个变量分别求 max&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;cummax&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;data.frame&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;6&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)))&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;
&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;8&lt;/span&gt;
&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;8&lt;/span&gt;
&lt;span class=&#34;m&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;8&lt;/span&gt;
&lt;span class=&#34;m&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;8&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;参考资料&#34;&gt;参考资料&lt;a class=&#34;headerlink&#34; href=&#34;#参考资料&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;ripeconan，《&lt;a href=&#34;http://ripeconan.com/2014/10/18/cumsum/&#34;&gt;cumsum 函数介绍&lt;/a&gt;》，Hexo 博客&lt;/li&gt;
&lt;/ul&gt;</description>
      <link>https://shenwy.com/yuque/%E7%BC%96%E7%A8%8B%E6%8A%80%E6%9C%AF/R/2020-03-18-tallkr/</link>
      <pubDate>Wed, 18 Mar 2020 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E7%BC%96%E7%A8%8B%E6%8A%80%E6%9C%AF/R/2020-03-18-tallkr/</guid>
      
    </item>
    
    <item>
      <title>UpSetR 关联的 venneuler 包安装笔记</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2020-03-05&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2020-03-05T00:00:00&#39;&gt;2020-03-05&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2023-07-10&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2023-07-10T16:32:15&#39;&gt;2023-07-10&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;本文章已经设置了最低额度的付费阅读，如果您觉得文章对您有用，且手头宽裕，欢迎请作者喝杯热茶。本文章付费部分内容并不影响您对文章的理解，只是作者对付费阅读的一次尝试和态度，感谢支持。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;背景&#34;&gt;背景&lt;a class=&#34;headerlink&#34; href=&#34;#背景&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;R 语言中的  &lt;a href=&#34;https://cran.r-project.org/web/packages/venneuler/index.html&#34;&gt;venneuler&lt;/a&gt;  是一个用于计算并显示韦恩图和欧拉图的包，这个包在 CRAN 上的最后一个版本是 1.1.0，发布于  2011-08-10，它是一个基于 rJava 依赖的 R 包。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;vd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;venneuler&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0.3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0.3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;C&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1.1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;A&amp;amp;B&amp;quot;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0.1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;A&amp;amp;C&amp;quot;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0.2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;B&amp;amp;C&amp;quot;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0.1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;A&amp;amp;B&amp;amp;C&amp;quot;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0.1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;plot&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;vd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# same as c(A=1, `A&amp;amp;B&amp;amp;C`=1, C=1)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;m&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;data.frame&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;elements&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;1&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;2&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;2&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;2&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;3&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sets&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;A&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;A&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;B&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;C&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;C&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;venneuler&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;m&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;plot&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;m&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;as.matrix&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;data.frame&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1.5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0.2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0.4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;                          &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0.2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;                          &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;C&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0.3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)))&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# without weights&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;venneuler&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;m&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;plot&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# with weights&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;venneuler&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;m&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;plot&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;在  &lt;a href=&#34;https://cran.r-project.org/web/packages/venneuler/index.html&#34;&gt;venneuler&lt;/a&gt;  包，作者引入了一个的用于描述集合交集的向量，这一点后来也被 &lt;code&gt;UpSetR&lt;/code&gt;  所借鉴，即 &lt;code&gt;UpSetR&lt;/code&gt;  中的 &lt;code&gt;fromExpression&lt;/code&gt; 。 &lt;code&gt;UpSetR&lt;/code&gt;  接受三种类型的数据输入：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;表格数据，即 R 语言里面的数据框。行表示元素，列表示数据集分配和额外信息。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;元素名的集合( &lt;code&gt;fromList&lt;/code&gt; )。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;venneuler&lt;/code&gt;  包引入的用于描述集合交集的向量 ( &lt;code&gt;fromExpression&lt;/code&gt;）。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;早在 18 年 6 月的时候，我公众号上写过一篇关于 &lt;code&gt;UpSetR&lt;/code&gt;  的学习笔记《&lt;a href=&#34;https://mp.weixin.qq.com/s/SOOcQxQrj23GqYaO-lTCig&#34;&gt;UpSetR：多数据集绘图可视化处理利器&lt;/a&gt;》，提到过一下 &lt;code&gt;venneuler&lt;/code&gt; ，当时也没怎么留意，直到前不久有个读者在使用 &lt;code&gt;UpSetR&lt;/code&gt;  的时候给我了一个截图。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FpnAmeZVOJhekLD4ZVlh4Wb1-6tR.png&#34; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;其实，这个截图中的 &lt;code&gt;fromExpression&lt;/code&gt;  拼写错了，如果 &lt;code&gt;UpSetR&lt;/code&gt;  安装好，又把 &lt;code&gt;fromExpression&lt;/code&gt;  拼对，就可以解决导入集合交集向量数据的问题。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rJava&lt;/code&gt; 、 &lt;code&gt;venneuler&lt;/code&gt;  包的安装并没有想象中的那么好安装，尤其是 &lt;code&gt;venneuler&lt;/code&gt; 。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;问题&#34;&gt;问题&lt;a class=&#34;headerlink&#34; href=&#34;#问题&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;使用 &lt;code&gt;conda install r-venneuler&lt;/code&gt;  安装完 &lt;code&gt;venneuler&lt;/code&gt;  包后， &lt;code&gt;library(venneuler)&lt;/code&gt;  加载时出现动态库异常。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;library&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;venneuler&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Loading&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;required&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;package&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rJava&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Error&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;occurred&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;during&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;initialization&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;of&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;VM&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Unable&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;to&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;load&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;native&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;library&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;usr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;local&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;software&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;miniconda3&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;libjava.so&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cannot&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;open&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;shared&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;object&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;No&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;such&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;or&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;directory&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;R&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;CMD&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;javareconf&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Java&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;interpreter&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;usr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;local&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;software&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;miniconda3&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bin&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;java&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Java&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;version&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1.8&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;_&lt;span class=&#34;m&#34;&gt;192&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Java&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;home&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;path&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;usr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;local&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;software&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;miniconda3&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;jre&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Java&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;compiler&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;usr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;local&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;software&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;miniconda3&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bin&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;javac&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Java&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;headers&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;gen.&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;usr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;local&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;software&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;miniconda3&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bin&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;javah&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Java&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;archive&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tool&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;usr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;local&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;software&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;miniconda3&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bin&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;jar&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;trying&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;to&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;compile&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;and&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;link&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;JNI&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;program&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;detected&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;JNI&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cpp&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;flags&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;I&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;JAVA_HOME&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;..&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;include&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;I&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;JAVA_HOME&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;..&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;include&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;linux&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;detected&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;JNI&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;linker&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;flags&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;L&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;JAVA_HOME&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lib&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;amd64&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;server&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ljvm&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;x86_64&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;conda_cos6&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;linux&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;gnu&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cc&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;I&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;/usr/local/software/miniconda3/lib/R/include&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;DNDEBUG&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;I&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;usr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;local&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;software&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;miniconda3&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;jre&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;..&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;include&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;I&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;usr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;local&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;software&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;miniconda3&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;jre&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;..&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;include&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;linux&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;DNDEBUG&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D_FORTIFY_SOURCE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;O2&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;isystem&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;usr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;local&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;software&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;miniconda3&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;include&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;I&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;usr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;local&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;software&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;miniconda3&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;include&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Wl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rpath&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;link&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;usr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;local&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;software&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;miniconda3&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lib&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fpic&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;march&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;nocona&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mtune&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;haswell&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ftree&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;vectorize&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fPIC&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fstack&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;protector&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;strong&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fno&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;plt&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;O2&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ffunction&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sections&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pipe&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;isystem&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;usr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;local&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;software&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;miniconda3&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;include&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fdebug&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;prefix&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;map&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;home&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;conda&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;feedstock_root&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;build_artifacts&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;r&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;base_1576190804673&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;work&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;usr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;local&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;src&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;conda&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;r&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;base&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;-3.6&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fdebug&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;prefix&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;map&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;usr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;local&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;software&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;miniconda3&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;usr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;local&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;src&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;conda&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;prefix&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;conftest.c&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;o&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;conftest.o&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;x86_64&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;conda_cos6&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;linux&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;gnu&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cc&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;shared&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;L&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;usr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;local&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;software&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;miniconda3&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lib&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;R&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lib&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Wl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;O2&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Wl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sort&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;common&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Wl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;as&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;needed&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Wl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;z&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;relro&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Wl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;z&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;now&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Wl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;disable&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;new&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dtags&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Wl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;gc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sections&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Wl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rpath&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;usr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;local&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;software&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;miniconda3&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lib&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Wl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rpath&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;link&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;usr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;local&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;software&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;miniconda3&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lib&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;L&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;usr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;local&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;software&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;miniconda3&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lib&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Wl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rpath&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;link&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;usr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;local&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;software&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;miniconda3&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lib&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;o&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;conftest.so&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;conftest.o&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;L&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;usr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;local&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;software&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;miniconda3&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;jre&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lib&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;amd64&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;server&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ljvm&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;L&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;usr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;local&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;software&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;miniconda3&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lib&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;R&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lib&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lR&lt;/span&gt;


&lt;span class=&#34;n&#34;&gt;JAVA_HOME&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;usr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;local&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;software&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;miniconda3&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;jre&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Java&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;library&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;path&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;JAVA_HOME&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lib&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;amd64&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;server&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;JNI&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cpp&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;flags&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;I&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;JAVA_HOME&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;..&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;include&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;I&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;JAVA_HOME&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;..&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;include&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;linux&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;JNI&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;linker&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;flags&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;L&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;JAVA_HOME&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lib&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;amd64&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;server&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ljvm&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Updating&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Java&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;configuration&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;usr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;local&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;software&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;miniconda3&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lib&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;R&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Done.&lt;/span&gt;

&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;usr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;local&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;software&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;miniconda3&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;find&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;libjava.so&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pkgs&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;openjdk&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;-8.0&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;192&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;h516909a_1004&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;jre&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lib&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;amd64&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;libjava.so&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;jre&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lib&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;amd64&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;libjava.s&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;即使使用 &lt;code&gt;LD_LIBRARY_PATH&lt;/code&gt; 添加完目标动态库后，依然无法避免 &amp;ldquo;&lt;strong&gt;java/lang/NoClassDefFoundError:  java/lang/Object&lt;/strong&gt;&amp;rdquo; 的异常。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;LD_LIBRARY_PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;usr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;local&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;software&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;miniconda3&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;jre&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lib&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;amd64&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:$&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;LD_LIBRARY_PATH&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;R&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;R&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;version&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3.6&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2019-12-12&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;Dark and Stormy Night&amp;quot;&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;Copyright &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;C&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2019&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;The&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;R&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Foundation&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Statistical&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Computing&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Platform&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x86_64&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;conda_cos6&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;linux&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;gnu &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;64&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bit&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;R&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;is&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;free&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;software&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;and&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;comes&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;with&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ABSOLUTELY&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;NO&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;WARRANTY.&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;You&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;are&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;welcome&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;to&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;redistribute&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;it&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;under&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;certain&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;conditions.&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Type&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;license()&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;or&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;licence()&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;distribution&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;details.&lt;/span&gt;

&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Natural&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;language&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;support&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;but&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;running&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;an&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;English&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;locale&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;R&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;is&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;collaborative&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;project&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;with&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;many&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;contributors.&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Type&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;contributors()&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;more&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;information&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;and&lt;/span&gt;
&lt;span class=&#34;s&#34;&gt;&amp;#39;citation()&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;on&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;how&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;to&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cite&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;R&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;or&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;R&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;packages&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;publications.&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;Type&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;demo()&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;some&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;demos&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;help()&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;on&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;line&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;help&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;or&lt;/span&gt;
&lt;span class=&#34;s&#34;&gt;&amp;#39;help.start()&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;an&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;HTML&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;browser&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;interface&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;to&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;help.&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Type&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;q()&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;to&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;quit&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;R.&lt;/span&gt;

&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;library&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;venneuler&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Loading&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;required&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;package&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rJava&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Error&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;occurred&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;during&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;initialization&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;of&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;VM&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;java&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lang&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;NoClassDefFoundError&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;java&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lang&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Object&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;使用 &lt;code&gt;conda create -n r-3.6.2 r-base=3.6.2&lt;/code&gt;  创建的新环境中发现， &lt;code&gt;conda install -r r-venneuler&lt;/code&gt;  会同时执行 &lt;code&gt;openjdk&lt;/code&gt; 、 &lt;code&gt;r-rjava&lt;/code&gt; 、 &lt;code&gt;r-venneuler&lt;/code&gt;  三个包的安装，并解决相关的依赖，但即使安装过程没有任何问题，在使用 &lt;code&gt;library(venneuler)&lt;/code&gt;  后上面提到的问题依然会出现。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;conda&lt;/code&gt;  环境中  &lt;code&gt;openjdk&lt;/code&gt; 、 &lt;code&gt;r-rjava&lt;/code&gt; 、 &lt;code&gt;r-venneuler&lt;/code&gt;  都可以安装成功，但就是用不了，这是我当前遇到的问题，暂时没找到解决方法。&lt;/p&gt;
&lt;h2 id=&#34;解决&#34;&gt;解决&lt;a class=&#34;headerlink&#34; href=&#34;#解决&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;抛弃了 conda 后，用最原始的方法，终于可以解决这个问题，下面是记录。&lt;/p&gt;
&lt;h3 id=&#34;1-安装二进制的-java&#34;&gt;1. 安装二进制的 java&lt;a class=&#34;headerlink&#34; href=&#34;#1-安装二进制的-java&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;在  &lt;a href=&#34;http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase7-521261.html&#34;&gt;http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase7-521261.html&lt;/a&gt;  下载  &lt;a href=&#34;https://www.oracle.com/java/technologies/javase/javase7-archive-downloads.html#license-lightbox&#34;&gt;jdk-7u80-linux-x64.tar.gz&lt;/a&gt;，解压缩。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tar&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;zvxf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;jdk-7u80-linux-x64.tar.gz
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mv&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;jdk1.7.0_80&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/local/software
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;2-java-环境配置&#34;&gt;2. Java 环境配置&lt;a class=&#34;headerlink&#34; href=&#34;#2-java-环境配置&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;把下面的内容添加到 &lt;code&gt;~/.bashrc&lt;/code&gt;  最后， &lt;code&gt;source ~/.bashrc&lt;/code&gt;  执行环境变量更新。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/software/jdk1.7.0_80/bin:&lt;span class=&#34;nv&#34;&gt;$PATH&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;JAVA_HOME&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/software/jdk1.7.0_80
&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;JRE_HOME&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/software/jdk1.7.0_80/jre
&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;LD_LIBRARY_PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/software/jdk1.7.0_80/lib/amd64:/usr/local/software/jdk1.7.0_80/jre/lib/amd64:&lt;span class=&#34;nv&#34;&gt;$LD_LIBRARY_PATH&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;3-更新-r-的-java-配置&#34;&gt;3. 更新 R 的 java 配置&lt;a class=&#34;headerlink&#34; href=&#34;#3-更新-r-的-java-配置&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;如果没有更新 R 语言的 &lt;code&gt;java&lt;/code&gt;  支持配置，直接执行 &lt;code&gt;isntall.packages(rJava)&lt;/code&gt;  可能会引发以下问题：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;checking&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;whether&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;JNI&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;programs&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;run...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;configure:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;error:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Unable&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;run&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;a&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;simple&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;JNI&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;program.
Make&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sure&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;you&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;have&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;configured&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;R&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Java&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;support&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;see&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;R&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;documentation&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;and&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;check&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;config.log&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;failure&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;reason.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;所以，请使用下面的命令更新 R 语言的 java 支持配置：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/local/software/miniconda3/bin/R&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;CMD&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;javareconf
Java&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;interpreter&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/local/software/jdk1.7.0_80/jre/bin/java
Java&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;version&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.7.0_80
Java&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;home&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;path&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/local/software/jdk1.7.0_80
Java&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;compiler&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/local/software/jdk1.7.0_80/bin/javac
Java&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;headers&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;gen.:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/local/software/jdk1.7.0_80/bin/javah
Java&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;archive&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tool:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/local/software/jdk1.7.0_80/bin/jar

trying&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;compile&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;and&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;link&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;a&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;JNI&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;program
detected&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;JNI&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;cpp&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;flags&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-I&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;JAVA_HOME&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;/include&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-I&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;JAVA_HOME&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;/include/linux
detected&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;JNI&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;linker&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;flags&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-L&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;JAVA_HOME&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;/jre/lib/amd64/server&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-ljvm
x86_64-conda_cos6-linux-gnu-cc&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-I&lt;span class=&#34;s2&#34;&gt;&amp;quot;/usr/local/software/miniconda3/lib/R/include&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-DNDEBUG&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-I/usr/local/software/jdk1.7.0_80/include&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-I/usr/local/software/jdk1.7.0_80/include/linux&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-DNDEBUG&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-D_FORTIFY_SOURCE&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-O2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-isystem&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/local/software/miniconda3/include&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-I/usr/local/software/miniconda3/include&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-Wl,-rpath-link,/usr/local/software/miniconda3/lib&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-fpic&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-march&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;nocona&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-mtune&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;haswell&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-ftree-vectorize&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-fPIC&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-fstack-protector-strong&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-fno-plt&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-O2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-ffunction-sections&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-pipe&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-isystem&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/local/software/miniconda3/include&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-fdebug-prefix-map&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/home/conda/feedstock_root/build_artifacts/r-base_1576190804673/work&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/src/conda/r-base-3.6.2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-fdebug-prefix-map&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/software/miniconda3&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/src/conda-prefix&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-c&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conftest.c&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-o&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conftest.o
x86_64-conda_cos6-linux-gnu-cc&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-shared&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-L/usr/local/software/miniconda3/lib/R/lib&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-Wl,-O2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-Wl,--sort-common&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-Wl,--as-needed&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-Wl,-z,relro&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-Wl,-z,now&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-Wl,--disable-new-dtags&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-Wl,--gc-sections&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-Wl,-rpath,/usr/local/software/miniconda3/lib&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-Wl,-rpath-link,/usr/local/software/miniconda3/lib&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-L/usr/local/software/miniconda3/lib&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-Wl,-rpath-link,/usr/local/software/miniconda3/lib&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-o&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conftest.so&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conftest.o&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-L/usr/local/software/jdk1.7.0_80/jre/lib/amd64/server&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-ljvm&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-L/usr/local/software/miniconda3/lib/R/lib&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-lR


JAVA_HOME&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/local/software/jdk1.7.0_80
Java&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;library&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;path:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;JAVA_HOME&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;/jre/lib/amd64/server
JNI&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;cpp&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;flags&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-I&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;JAVA_HOME&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;/include&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-I&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;JAVA_HOME&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;/include/linux
JNI&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;linker&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;flags&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-L&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;JAVA_HOME&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;/jre/lib/amd64/server&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-ljvm
Updating&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Java&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;configuration&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/local/software/miniconda3/lib/R
Done.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;4-安装-rjava-和-venneuler&#34;&gt;4. 安装 rJava 和  venneuler&lt;a class=&#34;headerlink&#34; href=&#34;#4-安装-rjava-和-venneuler&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;上面的步骤完成后，在 R 中使用 &lt;code&gt;install.packages(&#34;rJava&#34;)&lt;/code&gt;  和 &lt;code&gt;install.packages(&#34;venneuler&#34;)&lt;/code&gt; ，发现一切正常。&lt;/p&gt;
&lt;h2 id=&#34;后话&#34;&gt;后话&lt;a class=&#34;headerlink&#34; href=&#34;#后话&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;这篇文章与其是说在填坑，其实就是 &lt;code&gt;venneuler&lt;/code&gt;  安装的一个记录，也是对在 &lt;code&gt;conda&lt;/code&gt;  中对不再更新的旧版本 R 包的一次安装经历，希望这篇文章对 JAVA 不是很了解，但又想要安装与之相关的一些 R 包的人有所启发。或者你有更好的解决方法，也欢迎留言交流。&lt;/p&gt;
&lt;h2 id=&#34;资料&#34;&gt;资料&lt;a class=&#34;headerlink&#34; href=&#34;#资料&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&#34;https://cran.r-project.org/web/packages/venneuler/index.html&#34;&gt;venneuler: Venn and Euler Diagrams&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cran.r-project.org/web/packages/UpSetR/vignettes/basic.usage.html&#34;&gt;UpSetR - Basic &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://mp.weixin.qq.com/s/SOOcQxQrj23GqYaO-lTCig&#34;&gt;UpSetR：多数据集绘图可视化处理利器&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img alt=&#34;comment.gif&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FlMO8jnjfaW7QalT7nyPkxQ4d37w.gif&#34; /&gt;&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/R/2020-03-05-venneuler-installation/</link>
      <pubDate>Thu, 05 Mar 2020 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/R/2020-03-05-venneuler-installation/</guid>
      
    </item>
    
    <item>
      <title>R 语言画图中英文字体解决方案</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2020-02-27&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2020-02-27T00:00:00&#39;&gt;2020-02-27&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2024-10-10&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2024-10-10T00:00:00&#39;&gt;2024-10-10&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;在某些时候，需要在 R 画图中添加中文，但是默认情况下，R 对中文的支持不好。这里推荐一个 &lt;code&gt;showtext&lt;/code&gt;  的 R 包。如果需要将含有中文字体的图形保存为 pdf 文件，可以使用下面讲到的方案，最新版的 &lt;code&gt;showtext&lt;/code&gt;  已经支持了 &lt;code&gt;ggplot2&lt;/code&gt;，推荐使用此种方案。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;这样，在你写的 R 代码中，开头添加：&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nf&#34;&gt;library&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;showtext&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;showtext_auto&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;enable&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;TRUE&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 表示之后用上同样的字体&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;font_add&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;kaishu&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;simkai.ttf&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 如果系统已经安装了该字体，可以通过这种方式调用&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;font_add&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;SimSun&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;regular&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;/Library/Fonts/Microsoft/SimSun.ttf&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;#添加字体, 必须给定指定的字体的位置&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;如果你使用的是 MAC，可以打开 font book，查找你想要字体的位置。如 SimSun：/Library/Fonts/Microsoft/SimSun.ttf&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;如果你使用的是 Linux，字体应该位于 &lt;code&gt;/usr/share/fonts&lt;/code&gt;  目录下。&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;来一个示例，示例的各个函数解释后面有：&lt;/strong&gt;
&lt;strong&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fk5E_pjjk6BQ9qIfpqDHOUYWl_9b.png&#34; /&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nf&#34;&gt;library&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;showtext&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;showtext_auto&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;enable&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;TRUE&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;font_add&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;SimSun&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;simsun.ttc&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;nf&#34;&gt;set.seed&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;123&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;## For now we are using a device functions to draw axis labels&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;plot&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;xlim&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;-3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ylim&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;-3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;n&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;## Then turn showtext on and draw some characters&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;showtext_begin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;

&lt;span class=&#34;nf&#34;&gt;text&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;runif&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;-3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;runif&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;-3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;intToUtf8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;round&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;runif&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;20200&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;30000&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)),&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;multiple&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;TRUE&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;col&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;rgb&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;runif&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;runif&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;runif&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0.5&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;runif&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cex&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;family&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;SimSun&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;nf&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;随机汉字&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;family&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;SimSun&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;nf&#34;&gt;showtext_end&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;sessionInfo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;R&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;version&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3.6&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2019-12-12&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Platform&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x86_64&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;conda_cos6&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;linux&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;gnu &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;64&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bit&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Running&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;under&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;CentOS&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Linux&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;7&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Core&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;Matrix&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;products&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;default&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;BLAS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;LAPACK&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;usr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;local&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;software&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;miniconda3&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lib&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;libopenblasp&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;r0.3.7.so&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;locale&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;LC_CTYPE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;en_US.UTF&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;-8&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;LC_NUMERIC&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;C&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;LC_TIME&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;en_US.UTF&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;-8&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;LC_COLLATE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;en_US.UTF&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;-8&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;LC_MONETARY&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;en_US.UTF&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;-8&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;LC_MESSAGES&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;en_US.UTF&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;-8&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;7&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;LC_PAPER&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;en_US.UTF&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;-8&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;LC_NAME&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;C&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;9&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;LC_ADDRESS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;C&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;               &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;LC_TELEPHONE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;C&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;11&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;LC_MEASUREMENT&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;en_US.UTF&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;-8&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;LC_IDENTIFICATION&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;C&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;attached&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;base&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;packages&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;stats&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;graphics&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;grDevices&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;utils&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;datasets&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;methods&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;base&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;other&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;attached&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;packages&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;showtext_0.7&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;showtextdb_2.0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sysfonts_0.8&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;loaded&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;via&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;namespace &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;and&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;not&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;attached&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;compiler_3.6.2&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FklrZ3cPvkoxh2TrPfSw0koCTyHF.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;runif() 是  R 语言生成均匀分布随机数的函数，句法是：runif(n, min=0, max=1)，其中 n 表示生成的随机数数量，min 表示均匀分布的下限，max 表示均匀分布的上限；若省略参数 min、max，则默认生成 [0,1] 上的均匀分布随机数。例子如下：&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;runif&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 生成5个[0,1]的均匀分布的随机数&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0.5993&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0.7391&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0.2617&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0.5077&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0.7199&lt;/span&gt;

&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;runif&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;           &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 默认生成5个[0,1]上的均匀分布随机数&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0.2784&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0.7755&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0.4107&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0.8392&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0.7455&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;round 是 R 语言里的 “四舍五入” 的函数，具体的规则采用 banker&amp;rsquo;s rounding，即四舍六入五留双规则(&lt;a href=&#34;http://zh.wikipedia.org/wiki/%E6%95%B8%E5%80%BC%E4%BF%AE%E7%B4%84%E8%A6%8F%E5%89%87&#34;&gt;wiki&lt;/a&gt;)。round 的原型是 round(x, digits = 0)，digits 用于设定小数点位置，默认为零即小数点后零位（取整）。例子如下：&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1.4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1.6&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1.5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2.5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2.51&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;round&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;intToUtf8 是一个将整数向量转换为或转换为 Utf-8 编码字符向量的函数，与之对应的函数是  utf8ToInt —— 一个能把  Utf-8 编码字符转换为整数向量的函数。示例如下：&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;utf8ToInt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;沈维燕&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;27784&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;32500&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;29141&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;intToUtf8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;27784&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;32500&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;29141&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;沈维燕&amp;quot;&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;intToUtf8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;27784&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;32500&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;29141&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;multiple&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;TRUE&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# multiple: 转换为单个字符串还是多个单独的字符&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;沈&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;维&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;燕&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
      <link>https://shenwy.com/yuque/%E7%BC%96%E7%A8%8B%E6%8A%80%E6%9C%AF/R/2020-02-27-r-fonts/</link>
      <pubDate>Thu, 27 Feb 2020 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E7%BC%96%E7%A8%8B%E6%8A%80%E6%9C%AF/R/2020-02-27-r-fonts/</guid>
      
    </item>
    
    <item>
      <title>tar 打包的一些注意问题</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2020-02-21&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2020-02-21T00:00:00&#39;&gt;2020-02-21&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-06-25&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-06-25T10:54:07&#39;&gt;2021-06-25&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;对于需要打包压缩的目录、文件，如果该目录或者文件不可读，将会引发 Permission denied 的错误。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fmpxm2Evzh8ZNYFQ3QnjgoP3fNn2.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;如果需要检查一个目录打包是否出现因为权限导致的异常，可以检查 log 日志是否存在  failure/Permission denied/error 等关键字。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;tar&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;zvcf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;2014060503104SSQ.tar.gz&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;2014060503104SSQ&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&amp;gt;2014060503104SSQ.log&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&amp;gt;&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
grep&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-i&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;failure&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;2014060503104SSQ.log
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;comment.gif&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FlMO8jnjfaW7QalT7nyPkxQ4d37w.gif&#34; /&gt;&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%85%8D%E7%BD%AE%E4%BD%BF%E7%94%A8/2020-02-21-tar-issues-note/</link>
      <pubDate>Fri, 21 Feb 2020 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%85%8D%E7%BD%AE%E4%BD%BF%E7%94%A8/2020-02-21-tar-issues-note/</guid>
      
    </item>
    
    <item>
      <title>Python Excel 操作 | xlrd+xlwt 模块笔记</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2020-02-18&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2020-02-18T00:00:00&#39;&gt;2020-02-18&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2022-04-19&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2022-04-19T16:52:09&#39;&gt;2022-04-19&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Python 的 pandas 模块使用 &lt;strong&gt;xlrd&lt;/strong&gt; 作为读取 excel 文件的默认引擎。但是，&lt;strong&gt;xlrd&lt;/strong&gt; 在其最新版本（从 2.0.1 及后面版本）中删除了对 xls 文件以外的任何文件的支持。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;xlsx files are made up of a zip file wrapping an xml file.&lt;/p&gt;
&lt;p&gt;Both xml and zip have well documented security issues, which xlrd was not doing a good job of handling. In particular, it appeared that defusedxml and xlrd did not work on Python 3.9, which lead people to uninstall defusedxml as a solution, which is absolutely insane, but then so is sticking with xlrd 1.2 when you could move to openpyxl.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;从官方的&lt;a href=&#34;https://groups.google.com/g/python-excel/c/IRa8IWq_4zk/m/Af8-hrRnAgAJ&#34;&gt;邮件&lt;/a&gt;中，说的应该是 xlsx 本身是由一个 zip 文件和 xml 的头文件构成的，但是 xml 和 zip 都有详细记录的安全问题，特别是，&lt;strong&gt;defusedxml&lt;/strong&gt; 和 &lt;strong&gt;xlrd&lt;/strong&gt; 似乎在 Python 3.9 上不起作用，这导致人们卸载 &lt;strong&gt;defusedxml&lt;/strong&gt; 作为解决方案，这绝对是疯了，但是，当然了，您也可以转移到 &lt;strong&gt;openpyxl&lt;/strong&gt;，或者仍然坚持使用 xlrd 1.2。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;search&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;xlrd
Loading&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;channels:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# Name                       Version           Build  Channel&lt;/span&gt;
xlrd&lt;span class=&#34;w&#34;&gt;                           &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.0.0&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;py27_0&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;conda-forge
xlrd&lt;span class=&#34;w&#34;&gt;                           &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.0.0&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;py27_1&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;conda-forge
xlrd&lt;span class=&#34;w&#34;&gt;                           &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.0.0&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;py35_0&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;conda-forge
xlrd&lt;span class=&#34;w&#34;&gt;                           &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.0.0&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;py35_1&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;conda-forge
xlrd&lt;span class=&#34;w&#34;&gt;                           &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.0.0&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;py36_0&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;conda-forge
xlrd&lt;span class=&#34;w&#34;&gt;                           &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.0.0&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;py36_1&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;conda-forge
xlrd&lt;span class=&#34;w&#34;&gt;                           &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.1.0&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;py27_1&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;pkgs/main
xlrd&lt;span class=&#34;w&#34;&gt;                           &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.1.0&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;py27ha77178f_1&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;pkgs/main
xlrd&lt;span class=&#34;w&#34;&gt;                           &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.1.0&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;py35_1&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;pkgs/main
xlrd&lt;span class=&#34;w&#34;&gt;                           &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.1.0&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;py35h45a0a2a_1&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;pkgs/main
xlrd&lt;span class=&#34;w&#34;&gt;                           &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.1.0&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;py36_1&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;pkgs/main
xlrd&lt;span class=&#34;w&#34;&gt;                           &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.1.0&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;py36h1db9f0c_1&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;pkgs/main
xlrd&lt;span class=&#34;w&#34;&gt;                           &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.1.0&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;py37_1&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;pkgs/main
xlrd&lt;span class=&#34;w&#34;&gt;                           &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.1.0&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;py_2&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;conda-forge
xlrd&lt;span class=&#34;w&#34;&gt;                           &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.2.0&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;py27_0&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;pkgs/main
xlrd&lt;span class=&#34;w&#34;&gt;                           &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.2.0&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;py36_0&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;pkgs/main
xlrd&lt;span class=&#34;w&#34;&gt;                           &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.2.0&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;py37_0&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;pkgs/main
xlrd&lt;span class=&#34;w&#34;&gt;                           &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.2.0&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;py_0&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;conda-forge
xlrd&lt;span class=&#34;w&#34;&gt;                           &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.2.0&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;py_0&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;pkgs/main
xlrd&lt;span class=&#34;w&#34;&gt;                           &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.2.0&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;pyh9f0ad1d_1&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;conda-forge
xlrd&lt;span class=&#34;w&#34;&gt;                           &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;.0.1&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;pyhd3eb1b0_0&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;pkgs/main
xlrd&lt;span class=&#34;w&#34;&gt;                           &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;.0.1&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;pyhd8ed1ab_3&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;conda-forge
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;上面的问题将导致您在使用 pandas 调用 xlsx excel 上的 read_excel 函数时收到一个错误，即不再支持 xlsx filetype。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fg6HK5M3KsF5KE0SMNROvn1g9PHc.png&#34; /&gt;
为了解决这个问题，你可以：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;安装 &lt;a href=&#34;https://openpyxl.readthedocs.io/en/stable/&#34;&gt;openpyxl&lt;/a&gt; 模块：这是另一个仍然支持 xlsx 格式的 excel 处理包。&lt;/li&gt;
&lt;li&gt;在 pandas 中把默认的 engine 由原来的 xlrd 替换成 openpyxl。&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# Install openyxl&lt;/span&gt;
pip&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openpyxl

&lt;span class=&#34;c1&#34;&gt;# set engine parameter to &amp;quot;openpyxl&amp;quot;&lt;/span&gt;
pd.read_excel&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;path,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;engine&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;openpyxl&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;下面重点介绍 Python 读写 Excel 需要导入的 xlrd(读)，xlwd（写）模块的一些常用操作。&lt;/p&gt;
&lt;h1 id=&#34;1-xlrd-模块&#34;&gt;1. xlrd 模块&lt;a class=&#34;headerlink&#34; href=&#34;#1-xlrd-模块&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id=&#34;11-excel-文件处理&#34;&gt;1.1 Excel 文件处理&lt;a class=&#34;headerlink&#34; href=&#34;#11-excel-文件处理&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;打开 excel 文件&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;xlrd&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;excel&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;xlrd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;open_workbook&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;data.xlsx&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;获取并操作  sheet 工作表&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;sheet_names&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;excel&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sheet_names&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;        &lt;span class=&#34;c1&#34;&gt;# 返回book中所有工作表的名字, [&amp;#39;Sheet1&amp;#39;, &amp;#39;Sheet2&amp;#39;, &amp;#39;Sheet3&amp;#39;]&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;excel&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sheet_loaded&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sheet_name&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;or&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;indx&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;   &lt;span class=&#34;c1&#34;&gt;# 检查某个sheet是否导入完毕&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# 以下三个函数都会返回一个 xlrd.sheet.Sheet() 对象&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;sheet&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;excel&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sheet_by_index&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;        &lt;span class=&#34;c1&#34;&gt;# 通过索引获取，例如打开第一个 sheet 表格&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;sheet&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;excel&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sheet_by_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;sheet1&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;# 通过名称获取，如读取 sheet1 表单&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;sheet&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;excel&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sheets&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;              &lt;span class=&#34;c1&#34;&gt;# 通过索引顺序获取&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;row_values&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;#获取第一行的数据&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;col_values&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;#获取第一列的数据&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;nrows&lt;/span&gt;         &lt;span class=&#34;c1&#34;&gt;#获取总共的行数&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ncols&lt;/span&gt;         &lt;span class=&#34;c1&#34;&gt;#获取总共的列数&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;遍历所有行&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;range&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;nrows&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
    &lt;span class=&#34;n&#34;&gt;row_list&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;row_values&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# 每一行的数据在row_list 数组里&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;12-日期处理&#34;&gt;1.2 日期处理&lt;a class=&#34;headerlink&#34; href=&#34;#12-日期处理&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;**xldate_as_tuple**&lt;/code&gt;和&lt;code&gt;**xldate_as_datetime**&lt;/code&gt;第二个参数有两种取值，0 或者 1：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;0&lt;/strong&gt; 是以 &lt;strong&gt;1900-01-01&lt;/strong&gt; 为基准的日期；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;1&lt;/strong&gt; 是以 &lt;strong&gt;1904-01-01&lt;/strong&gt; 为基准的日期。&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;datetime&lt;/span&gt;
&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;xlrd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;xldate_as_datetime&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;xldate_as_tuple&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;xldate_as_datetime&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;43346.0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# datetime.datetime(2018, 9, 3, 0, 0)&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;xldate_as_tuple&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;43346.0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# (2018, 9, 3, 0, 0, 0)&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;xldate_as_datetime&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;43346.0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;strftime&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;%Y/%m/&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;%d&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt; %H:%M:%S&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# &amp;#39;2018/09/03 00:00:00&amp;#39;&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# 时间比较&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;xldate_as_datetime&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;43346.0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;datetime&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;datetime&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2019&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;9&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# True&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;13-编码处理&#34;&gt;1.3 编码处理&lt;a class=&#34;headerlink&#34; href=&#34;#13-编码处理&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;一些编译异常的处理示例。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# xlrd 中 sheet0.row_values(n) 的每个元素都是 unicode;&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# Python 中如果执行 str+unicode 拼接会出现 UnicodeDecodeError 错误.&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;geneid&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;str&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;line&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;])&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;isinstance&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;line&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;float&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;else&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;line&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;.encode&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;utf-8&amp;quot;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h1 id=&#34;2-xlwt-模块&#34;&gt;2. xlwt 模块&lt;a class=&#34;headerlink&#34; href=&#34;#2-xlwt-模块&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id=&#34;21-创建-book-工作簿即-excel-工作簿&#34;&gt;2.1  创建 Book 工作簿(即 excel 工作簿)&lt;a class=&#34;headerlink&#34; href=&#34;#21-创建-book-工作簿即-excel-工作簿&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;xlwt&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;workbook&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;xlwt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Workbook&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;encoding&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;utf-8&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;    &lt;span class=&#34;c1&#34;&gt;# 创建一个workbook并设置编码形式&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;22-添加-sheet-工作表&#34;&gt;2.2  添加 sheet 工作表&lt;a class=&#34;headerlink&#34; href=&#34;#22-添加-sheet-工作表&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;worksheet&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;workbook&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;add_sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;My Worksheet&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;# 创建一个worksheet&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;23-向工作表中添加数据并保存&#34;&gt;2.3  向工作表中添加数据并保存&lt;a class=&#34;headerlink&#34; href=&#34;#23-向工作表中添加数据并保存&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;worksheet&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;write&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;label&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;this is test&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# 参数对应行, 列, 值&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;workbook&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;save&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;save_excel.xls&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;# 保存&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;24-设置宽度&#34;&gt;2.4 设置宽度&lt;a class=&#34;headerlink&#34; href=&#34;#24-设置宽度&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;xlwt 中列宽的值表示方法：默认字体 0 的 1/256 为衡量单位。
xlwt 创建时使用的默认宽度为 2960，既 11 个字符 0 的宽度，所以我们在设置列宽时可以用如下方法：
width = 256 * 20，其中 256 为衡量单位，20 表示 20 个字符宽度。&lt;/p&gt;
&lt;p&gt;参考：&lt;a href=&#34;https://www.cnblogs.com/landhu/p/4978705.html&#34;&gt;https://www.cnblogs.com/landhu/p/4978705.html&lt;/a&gt;&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E7%BC%96%E7%A8%8B%E6%8A%80%E6%9C%AF/Python/2020-02-18-xlrd-xlwt-notes/</link>
      <pubDate>Tue, 18 Feb 2020 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E7%BC%96%E7%A8%8B%E6%8A%80%E6%9C%AF/Python/2020-02-18-xlrd-xlwt-notes/</guid>
      
    </item>
    
    <item>
      <title>Linux shift 命令用法笔记</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2020-02-13&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2020-02-13T00:00:00&#39;&gt;2020-02-13&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2023-08-01&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2023-08-01T01:13:26&#39;&gt;2023-08-01&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id=&#34;特殊变量&#34;&gt;特殊变量&lt;a class=&#34;headerlink&#34; href=&#34;#特殊变量&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;首先来看几个特殊变量：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;ch&#34;&gt;#!/bin/bash&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 当前脚本的文件名（间接运行时还包括绝对路径）。&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$n&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 传递给脚本或函数的参数。n 是一个数字，表示第几个参数。例如，第一个参数是 $1 。&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$#&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 传递给脚本或函数的参数个数。&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$*&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 传递给脚本或函数的所有参数。&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$@&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 传递给脚本或函数的所有参数。被双引号 (&amp;quot; &amp;quot;) 包含时，与 $* 不同，下面将会讲到。&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$?&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 上个命令的退出状态，或函数的返回值。&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$$&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 当前 Shell 进程 ID。对于 Shell 脚本，就是这些脚本所在的进程 ID。&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$_&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 上一个命令的最后一个参数。&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$!&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 后台运行的最后一个进程的 ID 号。&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;保存为一个脚本，然后加上几个参数运行，结果如下：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;./test.sh&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;A&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;B&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;B&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;D&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;E
./test.sh&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# $0, 当前脚本的文件名（间接运行时还包括绝对路径）。&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;              &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# $n, 传递给脚本或函数的参数。n 是一个数字，表示第几个参数。例如，第一个参数是 $1。&lt;/span&gt;
&lt;span class=&#34;m&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;             &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# $#, 传递给脚本或函数的参数个数。&lt;/span&gt;
A&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;B&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;B&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;D&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;E&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# $*, 传递给脚本或函数的所有参数。&lt;/span&gt;
A&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;B&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;B&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;D&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;E&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# $@, 传递给脚本或函数的所有参数。被双引号 (&amp;quot; &amp;quot;) 包含时，与 $* 不同，下面将会讲到。&lt;/span&gt;
&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;             &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# $?, 上个命令的退出状态，或函数的返回值。&lt;/span&gt;
&lt;span class=&#34;m&#34;&gt;24946&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;         &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# $$, 当前 Shell 进程 ID。对于 Shell 脚本，就是这些脚本所在的进程 ID。&lt;/span&gt;
&lt;span class=&#34;m&#34;&gt;24946&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;         &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# $_, 上一个命令的最后一个参数。&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;              &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# $!, 后台运行的最后一个进程的 ID 号。&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;code&gt;$*&lt;/code&gt; 和 &lt;code&gt;$@&lt;/code&gt; 都表示传递给函数或脚本的所有参数，不被双引号 (&amp;ldquo;&amp;rdquo;) 包含时，都以 &amp;ldquo;&lt;span class=&#34;arithmatex&#34;&gt;\(1&#34;&#34;\)&lt;/span&gt;2&amp;rdquo; … &amp;ldquo;$n&amp;rdquo; 的形式输出所有参数。但是当它们被双引号 (&amp;ldquo;&amp;rdquo;) 包含时，&amp;rdquo;&lt;code&gt;$*&lt;/code&gt;&amp;ldquo;会将所有的参数作为一个整体，以 &amp;ldquo;$1 $2 … $n&amp;rdquo; 的形式输出所有参数； &amp;ldquo;&lt;code&gt;$@&lt;/code&gt;&amp;ldquo;会将各个参数分开，以 &amp;ldquo;&lt;span class=&#34;arithmatex&#34;&gt;\(1&#34;、&#34;\)&lt;/span&gt;2&amp;rdquo;、…、&amp;rdquo;$n&amp;rdquo; 的形式输出所有参数。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;ch&#34;&gt;#!/bin/bash&lt;/span&gt;

&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;\$* = &amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$*&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;\&amp;quot;\$*\&amp;quot; = &amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$*&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;

&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;\$@ = &amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$@&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;\&amp;quot;\$@\&amp;quot; = &amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$@&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;

&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;打印 \$* 中的每一个参数: &amp;quot;&lt;/span&gt;
&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;var&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$*&lt;/span&gt;
&lt;span class=&#34;k&#34;&gt;do&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$var&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;
&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;

&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;打印 \$@ 中的每一个参数: &amp;quot;&lt;/span&gt;
&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;var&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$@&lt;/span&gt;
&lt;span class=&#34;k&#34;&gt;do&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$var&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;
&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;

&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;从 \&amp;quot;\$*\&amp;quot; 获取并打印每一个参数: &amp;quot;&lt;/span&gt;
&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;var&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$*&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;
&lt;span class=&#34;k&#34;&gt;do&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$var&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;
&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;

&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;从 \&amp;quot;\$@\&amp;quot; 获取并打印每一个参数: &amp;quot;&lt;/span&gt;
&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;var&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$@&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;
&lt;span class=&#34;k&#34;&gt;do&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$var&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;
&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;运行及输出：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;./test.sh&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;A&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;B&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;B&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;D&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;E
&lt;span class=&#34;nv&#34;&gt;$*&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;A&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;B&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;B&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;D&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;E
&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$*&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;A&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;B&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;B&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;D&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;E
&lt;span class=&#34;nv&#34;&gt;$@&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;A&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;B&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;B&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;D&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;E
&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$@&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;A&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;B&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;B&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;D&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;E
打印&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$*&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;中的每一个参数:
A
B
B
D
E
打印&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$@&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;中的每一个参数:
A
B
B
D
E
从&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$*&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;获取并打印每一个参数:
A&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;B&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;B&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;D&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;E
从&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$@&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;获取并打印每一个参数:
A
B
B
D
E
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;shift-使用&#34;&gt;shift 使用&lt;a class=&#34;headerlink&#34; href=&#34;#shift-使用&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;shift&lt;/code&gt;  命令用于对参数的移动(左移)，通常用于在不知道传入参数个数的情况下依次遍历每个参数然后进行相应处理,常见于 Linux 中各种程序的启动脚本。&lt;/p&gt;
&lt;h3 id=&#34;1-每次移动一个参数&#34;&gt;1. 每次移动一个参数&lt;a class=&#34;headerlink&#34; href=&#34;#1-每次移动一个参数&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;示例：依次读取输入的参数并打印参数个数&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;shift1.sh&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;ch&#34;&gt;#!/bin/bash&lt;/span&gt;
&lt;span class=&#34;k&#34;&gt;while&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$#&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;!&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;span class=&#34;k&#34;&gt;do&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-e&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;参数值为 &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;, 参数个数为 &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$#&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;shift&lt;/span&gt;
&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;输入如下命令运行：&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sh&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;shift1.sh&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;a&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;b&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;c&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;d
参数值为&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;a,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;参数个数为&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4&lt;/span&gt;
参数值为&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;b,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;参数个数为&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;
参数值为&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;c,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;参数个数为&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;
参数值为&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;d,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;参数个数为&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;每次运行 shift(不带参数的)，销毁一个参数（变量的个数($#)减一），后面的参数前移（不管参数之间相隔一个或者多个空格）。&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id=&#34;2-每次移动多个参数&#34;&gt;2.  每次移动多个参数&lt;a class=&#34;headerlink&#34; href=&#34;#2-每次移动多个参数&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;shift 命令一次移动参数的个数由其所带的参数指定。例如，现在有 $1, $2, &lt;span class=&#34;arithmatex&#34;&gt;\(3, ...，\)&lt;/span&gt;9 个参数，当 shell 程序处理完前 4 个命令行参数后(即还剩下后面 5 个参数)，可以使用 &lt;code&gt;shift 4&lt;/code&gt;  命令把 $9 移到 $1。&lt;/p&gt;
&lt;p&gt;示例：自定义 shift 每次移动的参数个数。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;shift2.sh&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;ch&#34;&gt;#!/bin/bash&lt;/span&gt;
&lt;span class=&#34;k&#34;&gt;while&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$#&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-gt&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;span class=&#34;k&#34;&gt;do&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-e&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;参数值为 &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;, 参数个数为 &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$#&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;shift&lt;/span&gt;
&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;shift&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-e&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;参数值为 &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;, 参数个数为 &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$#&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;输入如下命令运行&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sh&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;shift2.sh&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;a1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;b2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;c3&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;d4&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;e5&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;f6&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;g7&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;h8&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;i9
参数值为&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;a1,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;参数个数为&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;9&lt;/span&gt;
参数值为&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;b2,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;参数个数为&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;8&lt;/span&gt;
参数值为&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;c3,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;参数个数为&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;7&lt;/span&gt;
参数值为&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;d4,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;参数个数为&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;6&lt;/span&gt;
参数值为&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;i9,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;参数个数为&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;3-常与-case-条件配合使用&#34;&gt;3. 常与 case 条件配合使用&lt;a class=&#34;headerlink&#34; href=&#34;#3-常与-case-条件配合使用&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;case ..... esac&lt;/code&gt;  和 &lt;code&gt;if ... then ... fi&lt;/code&gt;  一样，都是条件判断式的语句结构，它们用倒序的字母单词和正序的单词配对，比如 &lt;code&gt;if&lt;/code&gt;  语句，结束时用 &lt;code&gt;fi&lt;/code&gt;  来配对， &lt;code&gt;esac&lt;/code&gt;  和 &lt;code&gt;case&lt;/code&gt;  配对，是多路分支的语句，类似于 C 中的 &lt;code&gt;switch/case&lt;/code&gt;  语句，大致形式如下：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;k&#34;&gt;case&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;$参数变量&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 以关键字 case 作为开始&lt;/span&gt;
&lt;span class=&#34;s2&#34;&gt;&amp;quot;变量值1&amp;quot;&lt;/span&gt;）&lt;span class=&#34;w&#34;&gt;         &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 变量值用双引号括起来，关键字用小括号括起来&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;程序段1&lt;span class=&#34;w&#34;&gt;         &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 对应的逻辑&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;              &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 每个类别结尾使用两个连续的分号来处理&lt;/span&gt;
&lt;span class=&#34;s2&#34;&gt;&amp;quot;变量值2&amp;quot;&lt;/span&gt;）
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;程序段2
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt;
&lt;span class=&#34;s2&#34;&gt;&amp;quot;变量值3&amp;quot;&lt;/span&gt;）
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;程序段3
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt;
*&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;                 &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 最后一个位置参数值会用*来代替所有其他值&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;程序段4
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt;
&lt;span class=&#34;k&#34;&gt;esac&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;               &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 关键字 esac(case 的反写) 结束&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;code&gt;shift&lt;/code&gt;  操作经常与 &lt;code&gt;case ... esac&lt;/code&gt;  条件分支配合使用。&lt;/p&gt;
&lt;p&gt;示例： &lt;code&gt;shift&lt;/code&gt;  搭配 &lt;code&gt;case ... esac&lt;/code&gt;  实现 shell 脚本手动传递参数处理&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;shift3.sh&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;k&#34;&gt;while&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-n&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;span class=&#34;k&#34;&gt;do&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;case&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;-a&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;发现 -a 选项&amp;quot;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;-b&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;发现 -b 选项&amp;quot;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;-b 选项的参数值是：&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$2&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;shift&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;-c&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;发现 -c 选项&amp;quot;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;-c 选项的参数值是：&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$2&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;shift&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;*&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; 是一个未知选项&amp;quot;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;esac&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;shift&lt;/span&gt;
&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;输入如下命令运行&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sh&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;shift3.sh&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-a&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-b&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;200&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-c&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;300&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-d&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;400&lt;/span&gt;
发现&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-a&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;选项
发现&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-b&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;选项
-b&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;选项的参数值是：200
发现&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-c&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;选项
-c&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;选项的参数值是：300
-d&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;是一个未知选项
&lt;span class=&#34;m&#34;&gt;400&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;是一个未知选项
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;简单总结&#34;&gt;简单总结&lt;a class=&#34;headerlink&#34; href=&#34;#简单总结&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;在 bash shell 中解析命令行参数的方法有很多，网络上介绍的各种方法中，都可以看到它们与 &lt;code&gt;shift&lt;/code&gt;  命令搭配使用的身影，因此在深入这一部分编程前，很有必要先了解一下 &lt;code&gt;shift&lt;/code&gt;  的作用。这里只是抛砖引玉简单介绍一下，更多技巧还请大家不断去实践理解。&lt;/p&gt;
&lt;p&gt;本篇文章的部分内容和代码来源于网络，但都经本人一一验证过，如有侵权或者其他问题，欢迎留言。&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E7%BC%96%E7%A8%8B%E6%8A%80%E6%9C%AF/Shell/2020-02-13-shell-shift-note/</link>
      <pubDate>Thu, 13 Feb 2020 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E7%BC%96%E7%A8%8B%E6%8A%80%E6%9C%AF/Shell/2020-02-13-shell-shift-note/</guid>
      
    </item>
    
    <item>
      <title>Linux 字体安装</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2020-02-10&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2020-02-10T00:00:00&#39;&gt;2020-02-10&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-06-30&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-06-30T09:38:15&#39;&gt;2021-06-30&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;在使用 LaTeX 进行中文字体编译排版过程中，发现 CentOS 6.5 中缺乏很大一部分中文字体，以至于在编译过程中频繁抛出缺乏字体的错误。现在基于 windows 的 ttf 字体，以 &lt;strong&gt;“微软雅黑”&lt;/strong&gt; 体为例，简单记录一下 Linux 下如何安装 windows 字体。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;首先获得一套”微软雅黑”字体库( Google 去下载，或者去 &lt;code&gt;C:\Windows\Fonts&lt;/code&gt; 下直接复制)，包含两个文件 msyh.ttf （普通）、 msyhbd.ttf （加粗）；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在 &lt;code&gt;/usr/share/fonts&lt;/code&gt; 目录下建立一个子目录，例如 &lt;code&gt;win&lt;/code&gt; ，命令如下：&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mkdir&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/share/fonts/win
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;将 &lt;code&gt;msyh.ttf&lt;/code&gt; 和 &lt;code&gt;msyhbd.ttf&lt;/code&gt; 复制到该目录下，例如这两个文件放在 &lt;code&gt;/home/shenweiyan&lt;/code&gt; 下，使用命令：&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/home/shenweiyan
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;cp&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;msyh.ttf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;msyhbd.ttf&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;/usr/share/fonts/win/
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;建立字体索引信息，更新字体缓存：&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/share/fonts/win
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mkfontscale
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mkfontdir
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;fc-cache
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;至此，字体已经安装完毕！如果想要查看本机器所安装的中文字体，可通过 &lt;code&gt;fc-list&lt;/code&gt;  命令查看：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;shenweiyan@localhost&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;14&lt;/span&gt;:23:19&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;fc-list&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;:lang&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;zh-cn
AR&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;PL&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;UMing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;TW:style&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;Light
AR&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;PL&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;UMing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;HK:style&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;Light
AR&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;PL&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;UMing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;CN:style&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;Light
Microsoft&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;YaHei,微软雅黑:style&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;Regular,Normal,obyčejné,Standard,Κανονικά,Normaali,Normál,Normale,Standaard,Normalny,Обычный,Normálne,Navadno,Arrunta
Microsoft&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;YaHei&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;UI,Microsoft&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;YaHei&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;UI&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Light:style&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;Light,Regular
AR&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;PL&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;UKai&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;TW&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;MBE:style&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;Book
AR&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;PL&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;UKai&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;CN:style&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;Book
AR&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;PL&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;UKai&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;HK:style&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;Book
AR&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;PL&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;UKai&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;TW:style&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;Book
Microsoft&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;YaHei&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;UI:style&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;Regular,Normal,obyčejné,Standard,Κανονικά,Normaali,Normál,Normale,Standaard,Normalny,Обычный,Normálne,Navadno,Arrunta
Microsoft&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;YaHei,微软雅黑,Microsoft&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;YaHei&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Light,微软雅黑&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Light:style&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;Light,Regular
WenQuanYi&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Zen&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Hei,文泉驛正黑,文泉驿正黑:style&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;Regular
Microsoft&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;YaHei&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;UI:style&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;Bold,Negreta,tučné,fed,Fett,Έντονα,Negrita,Lihavoitu,Gras,Félkövér,Grassetto,Vet,Halvfet,Pogrubiony,Negrito,Полужирный,Fet,Kalın,Krepko,Lodia
Microsoft&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;YaHei,微软雅黑:style&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;Bold,Negreta,tučné,fed,Fett,Έντονα,Negrita,Lihavoitu,Gras,Félkövér,Grassetto,Vet,Halvfet,Pogrubiony,Negrito,Полужирный,Fet,Kalın,Krepko,Lodia
WenQuanYi&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Zen&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Hei&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Mono,文泉驛等寬正黑,文泉驿等宽正黑:style&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;Regular
AR&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;PL&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;UMing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;TW&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;MBE:style&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;Light
WenQuanYi&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Zen&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Hei&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Sharp,文泉驛點陣正黑,文泉驿点阵正黑:style&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;Regular
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/LaTeX/2020-02-10-linux-install-fonts/</link>
      <pubDate>Mon, 10 Feb 2020 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/LaTeX/2020-02-10-linux-install-fonts/</guid>
      
    </item>
    
    <item>
      <title>R 语言中的 X11 相关问题</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2020-01-14&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2020-01-14T00:00:00&#39;&gt;2020-01-14&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-06-25&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-06-25T10:41:29&#39;&gt;2021-06-25&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;参考 Anaconda 官方文档《&lt;a href=&#34;https://docs.anaconda.com/anaconda/user-guide/tasks/using-r-language/&#34;&gt;Using R language with Anaconda&lt;/a&gt;》安装 R-4.0.2：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;conda&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;create&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;r&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;-4.0&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;r&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;essentials&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;r&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;base&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4.0&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;1-unable-to-open-connection-to-x11-display&#34;&gt;1. unable to open connection to X11 display&lt;a class=&#34;headerlink&#34; href=&#34;#1-unable-to-open-connection-to-x11-display&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;plot&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Error&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;.External2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;C_X11&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;d&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;display&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;d&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;d&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;height&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;d&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pointsize&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;unable&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;to&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;start&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;device&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;X11cairo&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;In&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;addition&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Warning&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;message&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;In &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;display&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;height&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pointsize&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;gamma&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;unable&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;to&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;open&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;connection&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;to&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;X11&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;display&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;capabilities&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;jpeg&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;         &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;png&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tiff&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tcltk&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;         &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;X11&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;aqua&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;TRUE&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;TRUE&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;TRUE&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;TRUE&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;FALSE&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;FALSE&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;http&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ftp&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sockets&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;libxml&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fifo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cledit&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;iconv&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;TRUE&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;TRUE&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;TRUE&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;TRUE&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;TRUE&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;TRUE&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;NLS&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;profmem&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cairo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;         &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ICU&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;long.double&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;libcurl&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;TRUE&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;TRUE&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;TRUE&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;TRUE&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;TRUE&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;TRUE&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;Sys.getenv&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;DISPLAY&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;localhost:22.0&amp;quot;&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;options&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bitmapType&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;cairo&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;png&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;test.png&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;480&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;height&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;480&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;plot&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;dev.off&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;png&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FkZx8QeLR-ONq2yCbogCByYcQIph.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;2-命令行下-r-画图无法弹出图形界面结果&#34;&gt;2. 命令行下 R 画图无法弹出图形界面结果&lt;a class=&#34;headerlink&#34; href=&#34;#2-命令行下-r-画图无法弹出图形界面结果&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;正常情况下，capabilities() 如果现实 X11 为 TRUE，执行 plot(1:10) 时会在 windows 下弹出一个绘图的结果图形界面。
&lt;img alt=&#34;xshell-4-x11.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fs1qjTOQnehCQmA2MrYycXmFkCnX.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;如果你的 capabilities() 如果现实 X11 为 FALSE，需要进行如下操作。&lt;/p&gt;
&lt;p&gt;首先，使用 root 安装下面一些 X11 依赖：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;yum&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;xorg-x11-*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;libX11-*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;libXt-*
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;其次，在你的 XShell 中配置 X11 转发功能。如果你用的是 MobaXterm，则跳过这一步设置。
&lt;img alt=&#34;xshell-x11.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fi36zL7cdgcqVdc57RRfNwNwRAGz.png&#34; /&gt;&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/R/2020-01-14-ublsz7/</link>
      <pubDate>Tue, 14 Jan 2020 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/R/2020-01-14-ublsz7/</guid>
      
    </item>
    
    <item>
      <title>Linux shell 编程笔记</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2020-01-13&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2020-01-13T00:00:00&#39;&gt;2020-01-13&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2023-08-01&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2023-08-01T01:00:12&#39;&gt;2023-08-01&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;基础性的语法不啰嗦了，记录一下比较容易忘记的一些点。&lt;/p&gt;
&lt;h2 id=&#34;shell-示例脚本&#34;&gt;Shell 示例脚本&lt;a class=&#34;headerlink&#34; href=&#34;#shell-示例脚本&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;ch&#34;&gt;#!/bin/sh&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;START&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;date&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;+&lt;span class=&#34;s1&#34;&gt;&amp;#39;%Y-%m-%d %H:%M:%S&amp;#39;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;Start: &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$START&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;gt;/home/shenweiyan/log.txt

&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;i&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;find&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/data/database/onekp/nucl-v2/samples/&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-name&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;*.fa&amp;quot;&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;k&#34;&gt;do&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;dir&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;dirname&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$i&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;fa&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;basename&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$i&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$dir&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;makeblastdb&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-in&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$fa&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-dbtype&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;nucl&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$i&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;gt;&amp;gt;/data/database/onekp/nucl-v2/memo/log&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;END&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;date&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;End: &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$END&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;gt;&amp;gt;/home/shenweiyan/log.txt
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;shell-程序模板&#34;&gt;Shell 程序模板&lt;a class=&#34;headerlink&#34; href=&#34;#shell-程序模板&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;ch&#34;&gt;#!/bin/bash&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-e
&lt;span class=&#34;c1&#34;&gt;# 设置程序参数的缺省值，少用参数即可运行&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# Default parameter&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;input.txt
&lt;span class=&#34;nv&#34;&gt;output&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;output.txt
&lt;span class=&#34;nv&#34;&gt;database&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;database.txt
&lt;span class=&#34;nv&#34;&gt;execute&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;TRUE&amp;#39;&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# 程序功能描述，每次必改程序名、版本、时间等；版本更新要记录清楚，一般可用-h/-?来显示这部分&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# Function for script description and usage&lt;/span&gt;
usage&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
cat&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;lt;&amp;lt;EOF &amp;gt;&amp;amp;2&lt;/span&gt;
&lt;span class=&#34;s&#34;&gt;Usage:&lt;/span&gt;
&lt;span class=&#34;s&#34;&gt;-------------------------------------------------------------------------------&lt;/span&gt;
&lt;span class=&#34;s&#34;&gt;Filename:    template.sh&lt;/span&gt;
&lt;span class=&#34;s&#34;&gt;Revision:    1.0&lt;/span&gt;
&lt;span class=&#34;s&#34;&gt;Date:        2017/6/24&lt;/span&gt;
&lt;span class=&#34;s&#34;&gt;Author:      Yong-Xin Liu&lt;/span&gt;
&lt;span class=&#34;s&#34;&gt;Email:       yxliu@genetics.ac.cn&lt;/span&gt;
&lt;span class=&#34;s&#34;&gt;Website:     http://bailab.genetics.ac.cn/&lt;/span&gt;
&lt;span class=&#34;s&#34;&gt;Description: This script is solve parameter read and default&lt;/span&gt;
&lt;span class=&#34;s&#34;&gt;Notes:       Function of this script&lt;/span&gt;
&lt;span class=&#34;s&#34;&gt;-------------------------------------------------------------------------------&lt;/span&gt;
&lt;span class=&#34;s&#34;&gt;Copyright:   2017 (c) Yong-Xin Liu&lt;/span&gt;
&lt;span class=&#34;s&#34;&gt;License:     GPL&lt;/span&gt;
&lt;span class=&#34;s&#34;&gt;This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License&lt;/span&gt;
&lt;span class=&#34;s&#34;&gt;as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.&lt;/span&gt;
&lt;span class=&#34;s&#34;&gt;This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty&lt;/span&gt;
&lt;span class=&#34;s&#34;&gt;of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.&lt;/span&gt;
&lt;span class=&#34;s&#34;&gt;If any changes are made to this script, please mail me a copy of the changes&lt;/span&gt;
&lt;span class=&#34;s&#34;&gt;-------------------------------------------------------------------------------&lt;/span&gt;
&lt;span class=&#34;s&#34;&gt;Version 1.0 2017/6/24&lt;/span&gt;
&lt;span class=&#34;s&#34;&gt;# 输入输出文件格式和示例，非常有用，不知道格式怎么准备文件呀&lt;/span&gt;
&lt;span class=&#34;s&#34;&gt;# Input files: input.txt, can inclue many file&lt;/span&gt;
&lt;span class=&#34;s&#34;&gt;# 1. input.txt, design of expriment&lt;/span&gt;
&lt;span class=&#34;s&#34;&gt;SampleID    BarcodeSequence    group&lt;/span&gt;
&lt;span class=&#34;s&#34;&gt;WT.1    TAGCTT    WT&lt;/span&gt;
&lt;span class=&#34;s&#34;&gt;WT.2    GGCTAC    WT&lt;/span&gt;
&lt;span class=&#34;s&#34;&gt;WT.3    CGCGCG    WT&lt;/span&gt;
&lt;span class=&#34;s&#34;&gt;# 2. database.txt, annotation of gene&lt;/span&gt;
&lt;span class=&#34;s&#34;&gt;ID    description&lt;/span&gt;
&lt;span class=&#34;s&#34;&gt;AT3G48300    Transcript factor&lt;/span&gt;
&lt;span class=&#34;s&#34;&gt;# Output file&lt;/span&gt;
&lt;span class=&#34;s&#34;&gt;1. Annotated samples &amp;amp; DE genes&lt;/span&gt;
&lt;span class=&#34;s&#34;&gt;Samples    ID    description&lt;/span&gt;
&lt;span class=&#34;s&#34;&gt;Wt    AT3G48300    Transcript factor&lt;/span&gt;
&lt;span class=&#34;s&#34;&gt;2. Volcano plot: vol_otu_SampleAvsSampleB.pdf&lt;/span&gt;
&lt;span class=&#34;s&#34;&gt;# 参数描述，写清功能的缺省值&lt;/span&gt;
&lt;span class=&#34;s&#34;&gt;OPTIONS:&lt;/span&gt;
&lt;span class=&#34;s&#34;&gt;    -d database file, default database.txt&lt;/span&gt;
&lt;span class=&#34;s&#34;&gt;    -i input file, recommend must give&lt;/span&gt;
&lt;span class=&#34;s&#34;&gt;    -o output file or output directory, default output.txt&lt;/span&gt;
&lt;span class=&#34;s&#34;&gt;    -h/? show help of script&lt;/span&gt;
&lt;span class=&#34;s&#34;&gt;Example:&lt;/span&gt;
&lt;span class=&#34;s&#34;&gt;    template.sh -i input.txt -d database.txt -o result.txt&lt;/span&gt;
&lt;span class=&#34;s&#34;&gt;EOF&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# 解释命令行参数，是不是很面熟，其实是调用了perl语言的getopts包，&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# Analysis parameter&lt;/span&gt;
&lt;span class=&#34;k&#34;&gt;while&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;getopts&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;d:h:i:o:&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;OPTION
&lt;span class=&#34;k&#34;&gt;do&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;case&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$OPTION&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;d&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;database&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$OPTARG&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;h&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;usage
&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;exit&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;i&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$OPTARG&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;o&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;output&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$OPTARG&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;?&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;usage
&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;exit&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;esac&lt;/span&gt;
&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# for 循环批量调用程序，如批量绘制热图&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# 有多种批量输入文件的方式，以下N种任选其一，其它用#注释掉&lt;/span&gt;
&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;i&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;a.txt&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;b.txt&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;n.txt&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;do&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 文件不多，手动放在in后用空格分开&lt;/span&gt;
&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;i&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;seq&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;9&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;do&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 文字名为数字顺序，用seq命令生成连续数据，引用命令需反引&lt;/span&gt;
&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;i&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;ls&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;data/*.txt&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;do&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 匹配某类文件作为输入&lt;/span&gt;
&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;i&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;cat&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;list.txt&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;do&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 使用文本原为输入列表&lt;/span&gt;
&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;i&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;cat&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;list.txt&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;cut&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-f&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;do&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 指定某列作为输入文件名&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;plot_heatmap.sh&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-i&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;data/&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-o&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;heatmap/&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;.pdf
&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;将以上代码保存为 template.sh，然后根据实际需要调整。&lt;/p&gt;
&lt;h2 id=&#34;shell-语法与知识&#34;&gt;Shell 语法与知识&lt;a class=&#34;headerlink&#34; href=&#34;#shell-语法与知识&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&#34;if-基础语法&#34;&gt;if 基础语法&lt;a class=&#34;headerlink&#34; href=&#34;#if-基础语法&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;command&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;符合该条件执行的语句
&lt;span class=&#34;k&#34;&gt;elif&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;command&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;符合该条件执行的语句
&lt;span class=&#34;k&#34;&gt;else&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;符合该条件执行的语句
&lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;文件与目录判断&#34;&gt;文件与目录判断&lt;a class=&#34;headerlink&#34; href=&#34;#文件与目录判断&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-b&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FILE&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;如果&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FILE&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;存在且是一个块特殊文件则为真。
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-c&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FILE&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;如果&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FILE&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;存在且是一个字特殊文件则为真。
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-d&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;DIR&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;如果&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FILE&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;存在且是一个目录则为真。
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-e&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FILE&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;如果&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FILE&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;存在则为真。
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-f&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FILE&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;如果&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FILE&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;存在且是一个普通文件则为真。
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-g&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FILE&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;如果&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FILE&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;存在且已经设置了&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;SGID&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;则为真。
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-k&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FILE&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;如果&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FILE&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;存在且已经设置了粘制位则为真。
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-p&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FILE&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;如果&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FILE&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;存在且是一个名字管道&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;F如果O&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;则为真。
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-r&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FILE&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;如果&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FILE&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;存在且是可读的则为真。
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-s&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FILE&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;如果&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FILE&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;存在且大小不为0则为真。
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-t&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FD&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;如果文件描述符&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FD&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;打开且指向一个终端则为真。
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-u&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FILE&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;如果&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FILE&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;存在且设置了SUID&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;user&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ID&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;则为真。
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-w&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FILE&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;如果&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FILE&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;存在且是可写的则为真。
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-x&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FILE&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;如果&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FILE&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;存在且是可执行的则为真。
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-O&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FILE&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;如果&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FILE&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;存在且属有效用户ID则为真。
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-G&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FILE&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;如果&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FILE&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;存在且属有效用户组则为真。
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-L&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FILE&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;如果&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FILE&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;存在且是一个符号连接则为真。
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-N&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FILE&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;如果&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FILE&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;存在&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;and&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;has&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;been&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mod如果ied&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;since&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;it&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;was&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;last&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;read则为真。
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-S&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FILE&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;如果&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FILE&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;存在且是一个套接字则为真。
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FILE1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-nt&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FILE2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;如果&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FILE1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;has&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;been&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;changed&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;more&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;recently&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;than&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FILE2,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;or&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;如果&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FILE1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;exists&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;and&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FILE2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;does&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not则为真。
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FILE1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-ot&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FILE2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;如果&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FILE1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;比&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FILE2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;要老,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;或者&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FILE2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;存在且&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FILE1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;不存在则为真。
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FILE1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-ef&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FILE2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;如果&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FILE1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;和&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FILE2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;指向相同的设备和节点号则为真。

&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-o&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;OPTIONNAME&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;如果&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;shell选项&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;“OPTIONNAME”&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;开启则为真。
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-z&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;STRING&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;“STRING”&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;的长度为零则为真。
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-n&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;STRING&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;or&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;STRING&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;“STRING”&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;的长度为非零&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;non-zero则为真。
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;STRING1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;STRING2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;如果2个字符串相同。&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;“&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;”&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;may&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;be&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;used&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;instead&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;“&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;”&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;strict&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;POSIX&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;compliance则为真。
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;STRING1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;!&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;STRING2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;如果字符串不相等则为真。
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;STRING1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;lt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;STRING2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;如果&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;“STRING1”&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sorts&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;before&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;“STRING2”&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;lexicographically&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;current&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;locale则为真。
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;STRING1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;STRING2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;如果&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;“STRING1”&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sorts&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;after&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;“STRING2”&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;lexicographically&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;current&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;locale则为真。
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ARG1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;OP&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ARG2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;“OP”&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;is&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;one&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-eq,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-ne,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-lt,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-le,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-gt&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;or&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-ge.&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;These&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;arithmetic&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;binary&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;operators&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;“ARG1”&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;is&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;equal&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;equal&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;less&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;than,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;less&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;than&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;or&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;equal&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;greater&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;than,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;or&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;greater&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;than&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;or&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;equal&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;“ARG2”,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;respectively.&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;“ARG1”&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;and&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;“ARG2”&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;are&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;integers.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;bash-shell-实战示例&#34;&gt;Bash Shell 实战示例&lt;a class=&#34;headerlink&#34; href=&#34;#bash-shell-实战示例&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;一些常见的 bash shell 实战示例。&lt;/p&gt;
&lt;h3 id=&#34;排除当前行及下一行的内容&#34;&gt;排除当前行及下一行的内容&lt;a class=&#34;headerlink&#34; href=&#34;#排除当前行及下一行的内容&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;sed&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;/关键字/,+1d&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;gt;file2
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;批量重命名文件&#34;&gt;批量重命名文件&lt;a class=&#34;headerlink&#34; href=&#34;#批量重命名文件&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;把 1.xtx，2.txt，&amp;hellip;，26.txt 分别重命名为 a.txt，b.txt，&amp;hellip;，z.txt。&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nv&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;i&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;a..z&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;.txt&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;do&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mv&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;.txt&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$i&lt;/span&gt;.txt&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$((&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;))&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;字符出现次数统计&#34;&gt;字符出现次数统计&lt;a class=&#34;headerlink&#34; href=&#34;#字符出现次数统计&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;统计文档中每个字符出现的次数。&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 本脚本需要两个参数，第一个参数是要统计的文件，第二个参数是输出统计结果的文件。&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;#!/bin/sh&lt;/span&gt;

&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;line&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;cat&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;do&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;count&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$line&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;wc&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-m&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$count&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$line&lt;/span&gt;

&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;while&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$i&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-lt&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$count&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;do&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;one_word&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$line&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;cut&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-c&lt;span class=&#34;nv&#34;&gt;$i&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;#echo $i $one_word&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$one_word&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;gt;&amp;gt;temp
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;((&lt;/span&gt;i++&lt;span class=&#34;o&#34;&gt;))&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;
&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;

sort&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;temp&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;uniq&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-c&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;sort&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-k1nr&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$2&lt;/span&gt;

rm&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-f&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;temp
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;切割字符串并打印分割后的值&#34;&gt;切割字符串并打印分割后的值&lt;a class=&#34;headerlink&#34; href=&#34;#切割字符串并打印分割后的值&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;awk&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-F&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;,&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;{for(i=1;i&amp;lt;=NF;i++){print $i}}&amp;#39;&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file.txt
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
      <link>https://shenwy.com/yuque/%E7%BC%96%E7%A8%8B%E6%8A%80%E6%9C%AF/Shell/2020-01-13-shell-coding/</link>
      <pubDate>Mon, 13 Jan 2020 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E7%BC%96%E7%A8%8B%E6%8A%80%E6%9C%AF/Shell/2020-01-13-shell-coding/</guid>
      
    </item>
    
    <item>
      <title>JupyterLab Server 搭建与使用笔记</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2019-12-30&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2019-12-30T00:00:00&#39;&gt;2019-12-30&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2022-06-14&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2022-06-14T16:27:08&#39;&gt;2022-06-14&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;两三个月前，有幸拿到了云筏的一个 4 核 16G，1TB 硬盘，300M 带宽位于欧洲的云服务器，自带的开箱即用的 RStudio Server 也非常给力，但最近这两天在升级 R 的时候遇上了不少问题，也懒得去折腾了，于是想把 RStudio Server 替换成 JupyterLab Server，这是一些折腾的笔记记录。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;JupyterLab is a next-generation web-based user interface for Project Jupyter. JupyterLab enables you to work with documents and activities such as &lt;a href=&#34;https://jupyterlab.readthedocs.io/en/stable/user/notebook.html#notebook&#34;&gt;Jupyter notebooks&lt;/a&gt;, text editors, terminals, and custom components in a flexible, integrated, and extensible manner.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fpq9ObNYavMIyXe5rmYWRmGLBNDw.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;安装&#34;&gt;安装&lt;a class=&#34;headerlink&#34; href=&#34;#安装&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;JupyterLab 可以通过 &lt;code&gt;conda&lt;/code&gt; ， &lt;code&gt;pip&lt;/code&gt; ， &lt;code&gt;pipenv&lt;/code&gt; or &lt;code&gt;docker&lt;/code&gt;  的方式安装。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# conda&lt;/span&gt;
conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-c&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conda-forge&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;jupyterlab

&lt;span class=&#34;c1&#34;&gt;# pip&lt;/span&gt;
pip&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;jupyterlab
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/Anaconda-Platform/nb_conda_kernels&#34;&gt;nb_conda_kernels&lt;/a&gt;  是一个 Jupyter 的扩展功能（extension），可以管理多个 Conda 环境下的 Jupyter 核心（kernels），整合多 Conda 环境中各种不同版本的 Python 或 R 等语言。&lt;/p&gt;
&lt;h3 id=&#34;安裝-nb_conda_kernels&#34;&gt;安裝 nb_conda_kernels&lt;a class=&#34;headerlink&#34; href=&#34;#安裝-nb_conda_kernels&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;nb_conda_kernels&lt;/strong&gt; 必须安装在在 Jupyter（Jupyter Notebook 或 JupyterLab）所在的 Conda 环境中，可以直接放在 &lt;code&gt;base&lt;/code&gt; 环境中，或是另外建立独立的 Conda 环境亦可。&lt;/p&gt;
&lt;p&gt;这里我们建立一哥新的 Conda 环境，专门用于放置 JupyterLab：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 建立 Conda 环境，并安裝 JupyterLab&lt;/span&gt;
conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;create&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--name&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;jupyterlab&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;python&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;.7&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;jupyterlab
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;在此 Conda 环境加装  nb_conda_kernels  扩展功能套件：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 安装 nb_conda_kernels 扩展功能套件&lt;/span&gt;
conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--name&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;jupyterlab&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;nb_conda_kernels
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;安装-jupyter-kernels&#34;&gt;安装 Jupyter Kernels&lt;a class=&#34;headerlink&#34; href=&#34;#安装-jupyter-kernels&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;所有需要在 Jupyter 中透过 &lt;code&gt;nb_conda_kernels&lt;/code&gt; 来使用 Conda 环境，都需要安装对应语言的的 Jupyter 核心（kernels）。&lt;/p&gt;
&lt;p&gt;建立一个 Python 2.7 的 Conda 环境：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 建立 Python 2.7 的 Conda 环境&lt;/span&gt;
conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;create&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--name&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Python2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;python&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;.7.18

&lt;span class=&#34;c1&#34;&gt;# 安装 Python 的 Jupyter 核心&lt;/span&gt;
conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--name&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Python&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ipykernel
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;建立一个 R-4.0.2 的 Conda 环境：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 建立 R 4.0.2 的 Conda 环境&lt;/span&gt;
conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;create&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--name&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;R-4.0.2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--channel&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;r&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;r-essentials&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4&lt;/span&gt;.0.2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;r-base&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4&lt;/span&gt;.0.2

&lt;span class=&#34;c1&#34;&gt;# 安装 R 的 Jupyter 核心&lt;/span&gt;
conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--name&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;R-4.0.2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--channel&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;r&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;r-irkernel
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;启动&#34;&gt;启动&lt;a class=&#34;headerlink&#34; href=&#34;#启动&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;安装好所有的 Conda 环境以及对应的 Jupyter 核心之后，就可以依照一般的方式启动 JupyterLab：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 载入 Jupyter 的 Conda 环境(下面两种方式都可以激活)&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;activate&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;jupyterlab
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;activate&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;jupyterlab

&lt;span class=&#34;c1&#34;&gt;# 启动 JupyterLab&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;jupyter&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;lab&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--ip&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;.0.0.0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--port&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;9090&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;jupyterlab-with-ip.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FqhJp4xMpbPY3IB4o8VQOYW9RjPg.png&#34; /&gt;
JupyterLab 各种 Conda 环境与语言版本&lt;/p&gt;
&lt;p&gt;这样就可以在单一一个 JupyterLab 界面中同时使用不同 Conda 环境下的各种语言与版本了。
&lt;img alt=&#34;jupyterlab-multi-env.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FhU7QRtOnp-HFCm1VQwT1Mme44P3.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;配置远程访问&#34;&gt;配置远程访问&lt;a class=&#34;headerlink&#34; href=&#34;#配置远程访问&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&#34;1-进入-ipython-环境生成秘钥&#34;&gt;1. 进入 ipython 环境，生成秘钥&lt;a class=&#34;headerlink&#34; href=&#34;#1-进入-ipython-环境生成秘钥&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 假设你已经进入了ipython&lt;/span&gt;
In&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;notebook.auth&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;import&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;passwd
In&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;passwd&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt;
Enter&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;password:&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;#填写你的密码（用于访问jupyterlab的密码）&lt;/span&gt;
Verify&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;password:&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;#再次填写你的密码&lt;/span&gt;
Out&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;argon2:$argon2id$v=19$m=10240,t=10,p=8$ShdM5...vHBHA$EUCjIE1L8joDbugmWIDqLw&amp;#39;&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;#这是你的密码生成的密钥&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;2-生成-jupyterlab-配置文件&#34;&gt;2. 生成 jupyterlab 配置文件&lt;a class=&#34;headerlink&#34; href=&#34;#2-生成-jupyterlab-配置文件&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;jupyter&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;lab&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--generate-config
Writing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;default&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;config&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/home/shenweiyan/.jupyter/jupyter_notebook_config.py
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;3-修改配置文件&#34;&gt;3. 修改配置文件&lt;a class=&#34;headerlink&#34; href=&#34;#3-修改配置文件&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;vi ~/.jupyter/jupyter_notebook_config.py
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;更改内容如下：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 将ip设置为*，允许任何IP访问&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;NotebookApp&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ip&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;*&amp;#39;&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# 这里的密码填写上面生成的密钥&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;NotebookApp&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;password&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;argon2:$argon2id$v=19$m=10240,t=10,p=8$ShdM5...vHBHA$EUCjIE1L8joDbugmWIDqLw&amp;#39;&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# 禁止用host的浏览器打开jupyter&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;NotebookApp&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;open_browser&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;False&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# 监听端口设置为8888或其他&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;NotebookApp&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;port&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;8888&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# 允许远程访问&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;NotebookApp&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;allow_remote_access&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;True&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;接下来输入&lt;code&gt;jupyter lab&lt;/code&gt; 就可以启动 jupyter-lab 服务啦！
&lt;img alt=&#34;jupyter-lab.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FtVANgfX9_hkr7wXWf9zHQgVOSMo.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;域名配置&#34;&gt;域名配置&lt;a class=&#34;headerlink&#34; href=&#34;#域名配置&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;JupyterLab 通过 nginx 转发的一个示例。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;vg&#34;&gt;upstream&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;jupyter&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;server&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;127.0.0.1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;il&#34;&gt;9090&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;

&lt;span class=&#34;vg&#34;&gt;server&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;listen&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;il&#34;&gt;80&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;server_name&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;jupyter&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;bioitee&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;com&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;rewrite&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;^/&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.*&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nl&#34;&gt;https:&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;//&lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;jupyter&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;bioitee&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;com&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;il&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;permanent&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;

&lt;span class=&#34;vg&#34;&gt;server&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;listen&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;il&#34;&gt;443&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;ssl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;index&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;index&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;html&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;index&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;htm&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;index&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;php&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;default&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;html&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;default&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;htm&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;default&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;php&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;server_name&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;jupyter&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;bioitee&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;com&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;root&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;apps&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;jupyterlab&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;notebooks&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;ssl_certificate&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;../&lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;certs&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;il&#34;&gt;4564529&lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;_jupyter&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;bioitee&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;com&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;pem&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;ssl_certificate_key&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;../&lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;certs&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;il&#34;&gt;4564529&lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;_jupyter&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;bioitee&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;com&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;key&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;ssl_ciphers&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;EECDH CHACHA20:EECDH CHACHA20-draft:EECDH AES128:RSA AES128:EECDH AES256:RSA AES256:EECDH 3DES:RSA 3DES:!MD5&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;ssl_protocols&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;TLSv1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;TLSv1&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;.1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;TLSv1&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;.2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;ssl_prefer_server_ciphers&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;on&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;ssl_session_cache&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nl&#34;&gt;shared:SSL:&lt;/span&gt;&lt;span class=&#34;il&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;m&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;location&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;proxy_pass&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;nl&#34;&gt;http:&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;//&lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;jupyter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;proxy_set_header&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;Host&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;host&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;location&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;~&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;api&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;kernels&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;proxy_pass&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;nl&#34;&gt;http:&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;//&lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;jupyter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;proxy_set_header&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;Host&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;host&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;websocket&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;support&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;proxy_http_version&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;1.1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;proxy_set_header&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;Upgrade&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;websocket&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;proxy_set_header&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;Connection&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;Upgrade&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;proxy_read_timeout&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;il&#34;&gt;86400&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;location&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;~&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;terminals&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;proxy_pass&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;nl&#34;&gt;http:&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;//&lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;jupyter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;proxy_set_header&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;Host&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;host&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;websocket&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;support&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;proxy_http_version&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;1.1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;proxy_set_header&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;Upgrade&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;websocket&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;proxy_set_header&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;Connection&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;Upgrade&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;proxy_read_timeout&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;il&#34;&gt;86400&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;

&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;access_log&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;logs&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;jupyterlab_acc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;error_log&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;logs&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;jupyterlab_err&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;jupyterlab-domain.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fuau3xcI0zxDGpwoDM__RS-Xe-l5.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;遇到的问题&#34;&gt;遇到的问题&lt;a class=&#34;headerlink&#34; href=&#34;#遇到的问题&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;jupyter lab 启动的过程中，如果使用 &amp;ndash;config=\~/.jupyter/jupyter_notebook_config.py 作为启动参数之一，会导致其他的 Conda 环境在 web 端消失，只剩下一个 Python 3 的 Notebook 和 Console，具体原因目前没搞明白。&lt;/li&gt;
&lt;li&gt;jupyter lab &amp;ndash;generate-config 默认生成的配置文件位于 \~/.jupyter/jupyter_notebook_config.py，目前不太清楚如何更改这个默认配置文件的路径。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;安裝插件&#34;&gt;安裝插件&lt;a class=&#34;headerlink&#34; href=&#34;#安裝插件&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&#34;安装简体中文语言包&#34;&gt;安装简体中文语言包&lt;a class=&#34;headerlink&#34; href=&#34;#安装简体中文语言包&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;pip&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;jupyterlab-language-pack-zh-CN
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;jupyterlab-toc&#34;&gt;Jupyterlab-TOC&lt;a class=&#34;headerlink&#34; href=&#34;#jupyterlab-toc&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Jupyterlab-TOC 扩展在 JupyterLab 接口的左侧填充目录。如果打开笔记本或标记文件，将在侧边栏上生成相应的 TOC。条目是可滚动和可单击的。&lt;/p&gt;
&lt;p&gt;此扩展已经默认集成到 JupyterLab 3.0 的核心 JupyterLab 扩展中。任何使用 JupyterLab &amp;gt;= 3.0 的人都已经安装了这个 JupyterLab 核心扩展，JupyterLab &amp;lt; 3.0 的人如果想要用这个扩展可以参考下面的链接安装。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/jupyterlab/jupyterlab-toc&#34;&gt;https://github.com/jupyterlab/jupyterlab-toc&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Prerequisites：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;JupyterLab &amp;gt;=2.0&lt;/li&gt;
&lt;li&gt;NodeJS 12+&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;jupyter&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;labextension&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;@jupyterlab/toc
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;参考资料&#34;&gt;参考资料&lt;a class=&#34;headerlink&#34; href=&#34;#参考资料&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Jupyter，《&lt;a href=&#34;https://jupyterlab.readthedocs.io/en/stable/getting_started/starting.html&#34;&gt;Starting JupyterLab&lt;/a&gt;》，JupyterLab 2.2.8 Documentation&lt;/li&gt;
&lt;li&gt;Jupyter，《&lt;a href=&#34;https://jupyterlab.readthedocs.io/en/stable/getting_started/installation.html&#34;&gt;Installation&lt;/a&gt;》，JupyterLab 2.2.8 Documentation&lt;/li&gt;
&lt;li&gt;Office 指南，《&lt;a href=&#34;https://officeguide.cc/jupyterlab-multiple-conda-python-r-environments-tutorial/&#34;&gt;JupyterLab 整合多 Conda 環境不同版本 Python、R 語言教學&lt;/a&gt;》，Office 指南&lt;/li&gt;
&lt;li&gt;tailorProgram，《&lt;a href=&#34;https://zhuanlan.zhihu.com/p/93035770&#34;&gt;Centos7 配置 jupyter-lab 远程访问&lt;/a&gt;》，知乎&lt;/li&gt;
&lt;/ol&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E8%99%9A%E6%8B%9F%E7%8E%AF%E5%A2%83/2019-12-30-jupyterlab-server-note/</link>
      <pubDate>Mon, 30 Dec 2019 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E8%99%9A%E6%8B%9F%E7%8E%AF%E5%A2%83/2019-12-30-jupyterlab-server-note/</guid>
      
    </item>
    
    <item>
      <title>基于 gulp 的 fancybox 源码压缩</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2019-12-26&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2019-12-26T00:00:00&#39;&gt;2019-12-26&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-06-25&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-06-25T10:53:12&#39;&gt;2021-06-25&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;前不久，处理生信分析网页版自动化报告的时候就使用过 fancybox，今天在优化个人博客，为博文增加图片缩放效果，解决一些滚动条问题时，才从 fancybox 的 Github 源码中接触到 gulp —— 一个基于流的前端自动化构建工具，记录一下学习的过程。&lt;/p&gt;
&lt;h2 id=&#34;1-fancybox-简单介绍&#34;&gt;1. fancybox 简单介绍&lt;a class=&#34;headerlink&#34; href=&#34;#1-fancybox-简单介绍&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;关于 fancybox，其官网的介绍是：JavaScript lightbox library for presenting various types of media. Responsive, touch-enabled and customizable. 翻译过来就是，Fancybox 是一个 JavaScript 库，用于以优雅的方式呈现图像，视频和任何 HTML 内容。它具有您期望的所有功能——触摸启用，响应和完全可定制。我们来看一下 fancybox 官网提供的 demo 效果。
&lt;img alt=&#34;fancybox-demo-86.gif&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/lm6qacxnx4eYVOB5vgQoa3nl-ImJ.gif&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;2-fancybox-的安装使用&#34;&gt;2. fancybox 的安装使用&lt;a class=&#34;headerlink&#34; href=&#34;#2-fancybox-的安装使用&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;我们这里所说的 fancybox，主要指的是它的 3.x 版本（即 fancybox3），网络上还有不少 1.x、2.x 的版本，我们不讨论。fancybox3 的使用很简单，只需要简单的 2 步。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;引入 jQuery 和  fancybox 样式文件&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;script&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;src&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;https://cdn.jsdelivr.net/npm/jquery@3.4.1/dist/jquery.min.js&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;script&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;

&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;link&lt;/span&gt;
  &lt;span class=&#34;na&#34;&gt;rel&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;stylesheet&amp;quot;&lt;/span&gt;
  &lt;span class=&#34;na&#34;&gt;href&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;https://cdn.jsdelivr.net/gh/fancyapps/fancybox@3.5.7/dist/jquery.fancybox.min.css&amp;quot;&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;script&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;src&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;https://cdn.jsdelivr.net/gh/fancyapps/fancybox@3.5.7/dist/jquery.fancybox.min.js&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;script&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;创建图像链接&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;data-fancybox&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;gallery&amp;quot;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;href&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;big_1.jpg&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;img&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;src&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;small_1.jpg&amp;quot;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;/&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;data-fancybox&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;gallery&amp;quot;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;href&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;big_2.jpg&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;img&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;src&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;small_2.jpg&amp;quot;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;/&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;3-fancybox-的一些问题&#34;&gt;3. fancybox 的一些问题&lt;a class=&#34;headerlink&#34; href=&#34;#3-fancybox-的一些问题&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;在网上看到部分网友说，fancybox3 在打开或关闭遮罩层的时候，页面会自动返回顶部的 bug，目前我使用的  &lt;a href=&#34;&amp;#109;&amp;#97;&amp;#105;&amp;#108;&amp;#116;&amp;#111;&amp;#58;&amp;#102;&amp;#97;&amp;#110;&amp;#99;&amp;#121;&amp;#98;&amp;#111;&amp;#120;&amp;#64;&amp;#51;&amp;#46;&amp;#53;&amp;#46;&amp;#55;&#34;&gt;&amp;#102;&amp;#97;&amp;#110;&amp;#99;&amp;#121;&amp;#98;&amp;#111;&amp;#120;&amp;#64;&amp;#51;&amp;#46;&amp;#53;&amp;#46;&amp;#55;&lt;/a&gt; 暂时没发现这个问题。&lt;/p&gt;
&lt;p&gt;我在这里想说一下，关于  fancybox3  隐藏页面滚动条的事情，因为  fancybox3 默认的配置项是 &lt;code&gt;hideScrollbar: true&lt;/code&gt;，即默认隐藏滚动条。当然，我们可以直接修改样式也可以达到显示和隐藏滚动条的目的；或者可以在 fancybox3 的源码中设置 hideScrollbar 选项为 false，就可以出现滚动条了。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;直接修改样式&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;fancybox-active&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;overflow&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;hidden&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;修改源码设置&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;fancybox 是基于  GPLv3 进行源码开放的，它的源吗托管在 github 上，我们可以直接在 &lt;code&gt;fancybox/dist/jquery.fancybox.js&lt;/code&gt;  源码中把 &lt;code&gt;hideScrollbar: true&lt;/code&gt;，更改成  &lt;code&gt;hideScrollbar: false&lt;/code&gt;，然后把修改后的  &lt;code&gt;jquery.fancybox.js&lt;/code&gt;  应用到你的图片页面，以达到显示滚动条的效果。&lt;/p&gt;
&lt;p&gt;细心的童鞋可能发现了，fancybox 默认使用的 js 文件是 &lt;code&gt;jquery.fancybox.min.js&lt;/code&gt; ，相比源码文件 &lt;code&gt;jquery.fancybox.js&lt;/code&gt;  多了一个 &lt;strong&gt;min&lt;/strong&gt;  后缀！所以，我们怎么才能把 &lt;code&gt;jquery.fancybox.js&lt;/code&gt;  变成 &lt;code&gt;jquery.fancybox.min.js&lt;/code&gt; ？&lt;/p&gt;
&lt;h2 id=&#34;4-gulp-简单介绍&#34;&gt;4. Gulp 简单介绍&lt;a class=&#34;headerlink&#34; href=&#34;#4-gulp-简单介绍&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Gulp 在官网的 title 是：用自动化构建工具增强你的工作流程，即一款基于流的前端自动化构建工具**。**作为前端的菜鸟，第一次听到这样的描述，是不是跟小编一样满头雾水？那么，下面摘录  segmentfault 前端分享专栏中《&lt;a href=&#34;https://segmentfault.com/a/1190000007137199&#34;&gt;gulp 前端构建工具白话讲解，也包含自己使用的一些心得体&lt;/a&gt;》的一些回答，让大家直观了解一下。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FlGCZhuxcY6aND9Z8-2iFe2EsYDq.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;大家现在看到的这个图片是我使用 gulp 的一个基本的项目结构，而这边的 src 文件就是我们的源文件，dist 是通过 gulp 编译过后的文件（稍后会详细说明每一个文件的作用）。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;现在请大家思考这样一个问题&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;倘若我让线上的网站（不论 PC 还是移动端）使用的 css 文件，JS 文件，images 文件等静态资源，JS 是压缩过的，css 是压缩过的，images（主要针对雪碧图）也是压缩过的，好来减少文件的大小，从而提升一下浏览器的性能，那么应该怎么办？&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;如果说我们在项目中使用 LESS，或者 SASS 作为 CSS 的预编译语言（浏览器本身是不支持 LESS，SASS 文件的，难道每次还要使用类似与考拉软件去处理这些吗？）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;如果我想找一个东西帮我去处理上面的这些东西，我写的还是没有压缩的 JS 或者 CSS/less/sass 等，但是在页面上实际上运行（或者等到项目发布的时候替换为压缩过的文件），那么 gulp 就是你很好的选择。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;那么现在这样说大家有没有明白 gulp 是干嘛的吗？不错，它就是来处理上述这些事情的，而且我们在编辑器里修改的代码都是在 src 的目录下，而 dist 文件目录就是经过上述处理过后的文件目录，江湖人称编译过后的文件目录，而 gulp 就是起到了这个桥梁的作用。&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;package.json 文件。它就是记录了我们使用了什么插件，以及版本号的记录的一个 json 文件。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;gulpfile.js 文件是大家学习 gulp 的重点。它就是告诉了 gulp 我们要将什么文件编译到什么文件下的 XXX 目录里面。例如在我的 src 目录里面存在一个 css 文件夹，里面装了很多 css 或者 LESS 等样式文件，我现在想通过 gulp 将它编译到 dist 目录下面的 css 文件夹里面并且这个 css 文件夹里的样式文件还是压缩过了。那么 gulpfile.js 就是起到了这样的一个作用。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;接下来，我们以 fancybox 的源码的为例，简单了解一下 Gulp 的安装和使用。&lt;/p&gt;
&lt;h2 id=&#34;5-gulp-安装与使用&#34;&gt;5. Gulp 安装与使用&lt;a class=&#34;headerlink&#34; href=&#34;#5-gulp-安装与使用&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;首先，gulp 是基于 node.js 的工具，所以，在安装 Gulp 前我们需要先安装 node.js 和 npm。node.js 的安装大家可以自行谷歌一下怎么安装，这里不细说。&lt;/p&gt;
&lt;p&gt;关于 npm，其实它是一个基于 node.js 的包管理工具，说的通俗一点就是，我们可以通过 npm 这个工具去下载我们想要的包，这些包就是我们在后面需要的各种各样的插件（比如压缩 JS 代码的插件，压缩 CSS 代码的插件），这些都是通过 npm 这样一个工具下载到我们的电脑里面的。说白了，npm 就等同 python 里面的 pip。&lt;/p&gt;
&lt;p&gt;第二，我们使用 git 先把 fancybox 的 github 源码先 clone 下来。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;git&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;clone&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://github.com/fancyapps/fancybox.git
Cloning&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;into&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;fancybox&amp;#39;&lt;/span&gt;...
remote:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Enumerating&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;objects:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2611&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;.
remote:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Total&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2611&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;delta&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;reused&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;delta&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pack-reused&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2611&lt;/span&gt;
Receiving&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;objects:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;100&lt;/span&gt;%&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2611&lt;/span&gt;/2611&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;.26&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;MiB&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;359&lt;/span&gt;.00&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;KiB/s,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;.
Resolving&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;deltas:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;100&lt;/span&gt;%&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1680&lt;/span&gt;/1680&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;第三，进入  fancybox 目录，安装 gulp 和其他依赖。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;fancybox
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ls
bower.json&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;dist&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;docs&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;gulpfile.js&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;package.json&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;README.md&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;src
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mv&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;dist&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;dist.raw
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/local/software/node-v6.12.0/bin/npm&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install
npm&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;WARN&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;deprecated&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;gulp-header@1.8.12:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Removed&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;event-stream&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;gulp-header
npm&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;WARN&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;deprecated&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;gulp-util@3.0.8:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;gulp-util&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;is&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;deprecated&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;replace&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;it,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;following&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;guidelines&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;at&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://medium.com/gulpjs/gulp-util-ca3b1f9f9ac5
npm&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;WARN&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;deprecated&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;minimatch@2.0.10:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Please&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;update&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;minimatch&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;.0.2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;or&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;higher&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;avoid&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;a&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;RegExp&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;DoS&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;issue
npm&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;WARN&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;deprecated&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;minimatch@0.2.14:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Please&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;update&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;minimatch&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;.0.2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;or&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;higher&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;avoid&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;a&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;RegExp&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;DoS&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;issue
npm&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;WARN&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;deprecated&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;graceful-fs@1.2.3:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;please&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;upgrade&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;graceful-fs&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;compatibility&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;current&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;and&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;future&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;versions&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Node.js
npm&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;WARN&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;deprecated&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;natives@1.1.6:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;This&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;module&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;relies&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;on&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Node.js&lt;span class=&#34;err&#34;&gt;&amp;#39;&lt;/span&gt;s&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;internals&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;and&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;will&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;break&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;at&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;some&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;point.&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Do&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;use&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;it,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;and&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;update&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;graceful-fs@4.x.
npm&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;WARN&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;deprecated&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;browserslist@1.7.7:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Browserslist&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;could&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;fail&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;on&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;reading&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Browserslist&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;gt;3.0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;config&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;used&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;other&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tools.
@fancyapps/fancybox@3.5.7&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/home/shenweiyan/fancybox
......
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;第四，修改 fancybox 的 &lt;code&gt;src/js/core.js&lt;/code&gt;  源码。把该文件中的 &lt;code&gt;hideScrollbar: true&lt;/code&gt;  更改为 &lt;code&gt;hideScrollbar: false&lt;/code&gt; 。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sed&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-i&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;s/hideScrollbar: true/hideScrollbar: false/g&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;src/js/core.js
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;第五，回到  fancybox 根目录，执行  fancybox 源码压缩。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ls
bower.json&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;dist.raw&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;docs&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;gulpfile.js&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;node_modules&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;package.json&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;README.md&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;src
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;./node_modules/gulp/bin/gulp.js
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;11&lt;/span&gt;:14:32&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Using&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;gulpfile&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~/fancybox/gulpfile.js
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;11&lt;/span&gt;:14:32&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Starting&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;scripts&amp;#39;&lt;/span&gt;...
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;11&lt;/span&gt;:14:32&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Starting&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;css&amp;#39;&lt;/span&gt;...
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;11&lt;/span&gt;:14:33&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Finished&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;css&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;after&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;624&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ms
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;11&lt;/span&gt;:14:34&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Finished&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;scripts&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;after&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;.18&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;s
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;11&lt;/span&gt;:14:34&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Starting&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;default&amp;#39;&lt;/span&gt;...
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;11&lt;/span&gt;:14:34&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Finished&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;default&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;after&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;23&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;μs
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FsXa7tQEFSYvduI-37gPCncD900S.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;最后，把编译后的 &lt;code&gt;dist/jquery.fancybox.min.js&lt;/code&gt;  文件应用到博客或者其他网站页面，完成最后设置。&lt;/p&gt;
&lt;h2 id=&#34;6-几点总结&#34;&gt;6. 几点总结&lt;a class=&#34;headerlink&#34; href=&#34;#6-几点总结&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;正常情况下的 &lt;code&gt;gulp&lt;/code&gt;  可以使用 &lt;code&gt;npm install -g gulp&lt;/code&gt;  进行全局安装，或者 &lt;code&gt;npm install --save-dev gulp&lt;/code&gt;  在当前项目(目录)中安装 &lt;code&gt;gulp&lt;/code&gt; 。区别是， &lt;code&gt;-g&lt;/code&gt;  参数会把 &lt;code&gt;gulp&lt;/code&gt;  安装在 &lt;code&gt;node&lt;/code&gt;  默认的 &lt;code&gt;bin&lt;/code&gt;  路径下，即全局安装；而不加 &lt;code&gt;-g&lt;/code&gt;  参数， 则会把  &lt;code&gt;gulp&lt;/code&gt;  默认安装到当前目录的 &lt;code&gt;node_modules/gulp/bin&lt;/code&gt;  下。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--save&lt;/code&gt;  会把依赖包名称添加到 &lt;code&gt;package.json&lt;/code&gt;  文件 &lt;code&gt;dependencies&lt;/code&gt;  键下；而 &lt;code&gt;--save-dev&lt;/code&gt;  则添加到 &lt;code&gt;package.json&lt;/code&gt;  文件 &lt;code&gt;devDependencies&lt;/code&gt;  键下，譬如：&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;quot;dependencies&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;quot;vue&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;^2.2.1&amp;quot;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;quot;devDependencies&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;quot;babel-core&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;^6.0.0&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;quot;babel-loader&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;^6.0.0&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;quot;babel-preset-latest&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;^6.0.0&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;quot;cross-env&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;^3.0.0&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;quot;css-loader&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;^0.25.0&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;quot;file-loader&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;^0.9.0&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;quot;vue-loader&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;^11.1.4&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;quot;vue-template-compiler&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;^2.2.1&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;quot;webpack&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;^2.2.0&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;quot;webpack-dev-server&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;^2.2.0&amp;quot;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;它们真正的区别是， &lt;code&gt;npm&lt;/code&gt;  自己的文档说 &lt;code&gt;dependencies&lt;/code&gt;  是运行时依赖， &lt;code&gt;devDependencies&lt;/code&gt;  是开发时的依赖。即 &lt;code&gt;devDependencies&lt;/code&gt;  下列出的模块，是我们开发时用的，比如我们安装 js 的压缩包 &lt;code&gt;gulp-uglify&lt;/code&gt;  时，我们采用的是 &lt;code&gt;npm install –save-dev gulp-uglify&lt;/code&gt;  命令安装，因为我们在发布后用不到它，而只是在我们开发才用到它。 &lt;code&gt;dependencies&lt;/code&gt;  下的模块，则是我们发布后还需要依赖的模块，譬如像 jQuery 库或者 Angular 框架类似的，我们在开发完后后肯定还要依赖它们，否则就运行不了。&lt;/li&gt;
&lt;li&gt;对于已经存在 &lt;code&gt;package.json&lt;/code&gt;  配置文件(定义了这个项目所需要的各种模块，以及项目的配置信息（比如名称、版本、许可证等元数据）)的目录，我们可以直接在当前目录执行 &lt;code&gt;npm install&lt;/code&gt;  进行安装， &lt;code&gt;npm install&lt;/code&gt;  命令根据这个配置文件，自动下载所需的模块，也就是配置项目所需的运行和开发环境。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;7-参考资料&#34;&gt;7. 参考资料&lt;a class=&#34;headerlink&#34; href=&#34;#7-参考资料&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;panw3i，《&lt;a href=&#34;https://www.jianshu.com/p/b1b6e5a94b6a&#34;&gt;npm &amp;ndash;save-dev &amp;ndash;save 的区别&lt;/a&gt;》，简书&lt;/li&gt;
&lt;li&gt;小丑皇，《&lt;a href=&#34;https://segmentfault.com/a/1190000007137199&#34;&gt;gulp 前端构建工具白话讲解，也包含自己使用的一些心得体会&lt;/a&gt;》，SegmentFault&lt;/li&gt;
&lt;li&gt;十年踪迹的博客，《&lt;a href=&#34;https://www.h5jun.com/post/gulp-build&#34;&gt;使用 Gulp 构建网站小白教程&lt;/a&gt;》，十年踪迹的博客&lt;/li&gt;
&lt;li&gt;bibichuan，《&lt;a href=&#34;https://bibichuan.github.io/2019/03/19/fancybox3%E4%BD%BF%E7%94%A8%E6%80%BB%E7%BB%93/&#34;&gt;fancybox3 使用总结&lt;/a&gt;》，bibichuan 的底盘 - Github 个人博客&lt;/li&gt;
&lt;/ul&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E5%89%8D%E7%AB%AF/2019-12-26-gulp-for-fancybox/</link>
      <pubDate>Thu, 26 Dec 2019 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E5%89%8D%E7%AB%AF/2019-12-26-gulp-for-fancybox/</guid>
      
    </item>
    
    <item>
      <title>一款英文文章阅读翻译精品工具</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2019-12-24&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2019-12-24T00:00:00&#39;&gt;2019-12-24&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-06-25&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-06-25T10:48:10&#39;&gt;2021-06-25&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;编者荐语：&lt;/strong&gt; &amp;gt; **
这是我在阮一峰老师的《科技爱好者周刊》上看到的一款英文文章翻译工具，用了一段时间发现，不管是从翻译质量，还是定制性上都相当不错，给大家推荐一下。本文章图片、文字都是基于《科技爱好者周刊：第 87 期（20191220）》进行了部分调整，特此声明。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;小编我平时喜欢看 Hacker News 和 Inoreader RSS 订阅上的文章，但这些文章有很大一部分都是英文的，那么，怎样才能快速有效地阅读这些英语文章？答案很简单，就是使用翻译工具。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;hacker-news-0.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FjPLLKM4DVJP3epcR_OqB63TZy0g.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;inoreader-0.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FmwsjYfyEQcZiVh-0F6gqvtT6E-K.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;不管什么文章，自动化工具一秒以内就能给出全文翻译，让你快速了解大意，有兴趣再去精读原文，这样就效率很高。尤其是科技类文章，专有名词多，语法比较规范，最适合使用翻译工具。&lt;/p&gt;
&lt;p&gt;今天就向大家介绍一款国产的翻译工具——&lt;a href=&#34;https://fanyi.caiyunapp.com/#/web&#34;&gt;彩云小译&lt;/a&gt;。它有 &lt;a href=&#34;https://fanyi.caiyunapp.com/#/web&#34;&gt;Chrome 浏览器插件&lt;/a&gt;，也有&lt;a href=&#34;https://fanyi.caiyunapp.com/#/app&#34;&gt;手机 App&lt;/a&gt;，下载安装后一键就能实现网页的双语显示。
&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FseGxgnDEgstOhegmF0cSfEkE6Eh.jpeg&#34; /&gt;&lt;/p&gt;
&lt;p&gt;小编我使用之后，跟有道、谷歌翻译都对比了一下，觉得翻译质量不错，而且可定制性也很高，不仅能够英译中，也能中译英，还支持翻译日语。在设置里面打开“自动翻译”，点开网页就能直接显示中文，还支持单词的“划词翻译”。目前，Chrome 插件商店的用户评价高达 4.6（满分 5 分）。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FlMsSLSQdm0M7RMvqLQ0X3jXSuyh.jpeg&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;hacker-news-1.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FgWtpbbjuSorzy9nZAQ4x2equD9X.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;inoreader.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FlDE5vrEApKjx0bk8t9EsHIDSb-h.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;它还有一个特色功能，支持视频字幕翻译。有的网页视频可以外挂字幕（srt 文件），彩云小译能够把英文的文本字幕，实时变成双语字幕。如果是没有字幕的视频，可以安装它的&lt;a href=&#34;https://www.caiyunapp.com/interpretation/&#34;&gt;同传软件&lt;/a&gt;，就能捕捉系统麦克风的声音，翻译成中文。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fm6DN4WPFE5GPyAIbCp8CbrMkI-g.jpeg&#34; /&gt;&lt;/p&gt;
&lt;p&gt;此外，如果你想自己开发，还可以调用它的 API，每月 100 万字之内的翻译都是免费的。&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/Windows/2019-12-24-caiyunapp/</link>
      <pubDate>Tue, 24 Dec 2019 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/Windows/2019-12-24-caiyunapp/</guid>
      
    </item>
    
    <item>
      <title>博客 | Hugo 博客添加 utterances 评论</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2019-12-24&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2019-12-24T00:00:00&#39;&gt;2019-12-24&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-06-30&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-06-30T09:36:20&#39;&gt;2021-06-30&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;因为是用 Hugo 搭建的博客，所以只看中了三个评论系统：1、&lt;code&gt;Disqus&lt;/code&gt; 2、&lt;code&gt;Valine&lt;/code&gt; 3、&lt;code&gt;Utterances&lt;/code&gt; 。&lt;/p&gt;
&lt;p&gt;说下三者区别：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Disqus&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;优点：漂亮，hugo 自带，&lt;a href=&#34;https://gohugo.io/templates/internal/#configure-disqus&#34;&gt;官方文档&lt;/a&gt;中有写如何启动，直接在  &lt;code&gt;config.toml&lt;/code&gt;  文件中启用就可以用。&lt;/li&gt;
&lt;li&gt;缺点：广告多，国外的，容易被墙。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Valine&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;官方的介绍说，是一款快速、简洁且高效的无后端评论系统。对于第三方评论系统，经历了多说关闭的影响，不太敢用。具体如何本人的确也没用过，暂不评论。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Utterances&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;优点：基于 GitHub issues 的评论工具，开源免费，加载快，配置较简单，没有广告，没有追踪（很多评论系统有追踪，感觉不是很尊重访客隐私）。&lt;/li&gt;
&lt;li&gt;缺点：貌似不能在已经发表的评论中追加评论。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;好像三个都支持  &lt;code&gt;Markdown&lt;/code&gt; 。&lt;/p&gt;
&lt;h2 id=&#34;1-创建公开的仓库&#34;&gt;1. 创建公开的仓库&lt;a class=&#34;headerlink&#34; href=&#34;#1-创建公开的仓库&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;在 github 创建一个公开的仓库。&lt;/p&gt;
&lt;h2 id=&#34;2-安装-utterances-app&#34;&gt;2. 安装  utterances app&lt;a class=&#34;headerlink&#34; href=&#34;#2-安装-utterances-app&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;通过  &lt;a href=&#34;https://utteranc.es/&#34;&gt;https://utteranc.es/&lt;/a&gt;  主页的  &lt;strong&gt;configuration&lt;/strong&gt; → &lt;strong&gt;Repositor&lt;/strong&gt;y 进入  &lt;a href=&#34;https://github.com/apps/utterances&#34;&gt;utterances app&lt;/a&gt; 主页（或者直接在浏览器输入 &lt;a href=&#34;https://github.com/apps/utterances&#34;&gt;https://github.com/apps/utterances&lt;/a&gt;  进入）。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FuCkrtvI1-zBLzCECrT91VoEYLUU.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FnP4D9vPS1vyALutwPDvxJjHlgsQ.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;3-配置-utterances&#34;&gt;3. 配置  utterances&lt;a class=&#34;headerlink&#34; href=&#34;#3-配置-utterances&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/apps/utterances&#34;&gt;utterances app&lt;/a&gt;  安装完成后，回到  &lt;a href=&#34;https://utteranc.es/&#34;&gt;https://utteranc.es/&lt;/a&gt;  页面，设置  &lt;strong&gt;Repository&lt;/strong&gt;、&lt;strong&gt;Blog Post&lt;/strong&gt; ↔️ &lt;strong&gt;Issue Mapping&lt;/strong&gt;、&lt;strong&gt;Theme&lt;/strong&gt; 的信息，完成后把生成的  Enable Utterances js 代码添加到博客的评论系统。有两种方式添加，具体情况看个人（推荐第二种）。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;最简单但是不能够随意开启，不能个性化设置。&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;直接从&lt;a href=&#34;https://utteranc.es/&#34;&gt;官方&lt;/a&gt;或者从下方复制代码片段粘贴到相应的评论的 html 模板文件的相应位置即可。其中 &lt;code&gt;[ENTER REPO HERE&lt;/code&gt;  填写格式为 &lt;code&gt;owner/repo&lt;/code&gt; ，比如我的就是 &lt;code&gt;shenweiyan/issues&lt;/code&gt; 。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;script&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;src&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;https://utteranc.es/client.js&amp;quot;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;repo&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;[ENTER REPO HERE]&amp;quot;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;issue&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;term&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;pathname&amp;quot;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;theme&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;github-light&amp;quot;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;crossorigin&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;anonymous&amp;quot;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;async&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;模块化，可设置开启关闭，便于管理。&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;首先，在 &lt;code&gt;themes/your-theme/layouts/partials/&lt;/code&gt;，或者 &lt;code&gt;myblog/layouts/partials/&lt;/code&gt;  下创建个 &lt;code&gt;utterances.html&lt;/code&gt;  文件，以我的为例就是 &lt;code&gt;shen.bioinit.com/layouts/partials/utterances.html&lt;/code&gt; ，然后复制下面的代码 copy 进去，保存。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;{{ if and ( .Site.Params.utteranc.enable ) (and (not .Params.disable_comments)
(or (eq .Kind &amp;quot;404&amp;quot;) (and (not .IsHome) .Content))) }}
&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;section&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;comments&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
  &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;script&lt;/span&gt;
    &lt;span class=&#34;na&#34;&gt;src&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;https://utteranc.es/client.js&amp;quot;&lt;/span&gt;
    &lt;span class=&#34;na&#34;&gt;repo&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;{{ .Site.Params.utteranc.repo }}&amp;quot;&lt;/span&gt;
    &lt;span class=&#34;na&#34;&gt;issue-term&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;{{ .Site.Params.utteranc.issueTerm }}&amp;quot;&lt;/span&gt;
    &lt;span class=&#34;na&#34;&gt;theme&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;{{ .Site.Params.utteranc.theme }}&amp;quot;&lt;/span&gt;
    &lt;span class=&#34;na&#34;&gt;crossorigin&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;anonymous&amp;quot;&lt;/span&gt;
    &lt;span class=&#34;na&#34;&gt;async&lt;/span&gt;
  &lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;script&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;section&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
{{ end }}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;其中 &lt;code&gt;section&lt;/code&gt;  标签的 &lt;code&gt;class&lt;/code&gt;  属性可以选择你已有的 &lt;code&gt;class&lt;/code&gt;，没有的话请置空。或者你也可以把 &lt;code&gt;section&lt;/code&gt;  标签换成 &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; 。&lt;/p&gt;
&lt;p&gt;然后，在 &lt;code&gt;config.toml&lt;/code&gt;  文件中添加相关的参数：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;[params.utteranc]
enable = true
repo = &amp;quot;shenweiyan/issues&amp;quot;    # 存储评论的Repo，格式为 owner/repo
issueTerm = &amp;quot;title&amp;quot;           # 表示你选择以那种方式让github issue的评论和你的文章关联可以选择默认的pathname。
theme = &amp;quot;github-light&amp;quot;        # 样式主题
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;第三，在相关的模板文件中添加一段代码 &lt;code&gt;{{ partial &#34;utterances.html&#34; . }}&lt;/code&gt; ，即可完成  utterances 设置。以我的博客为例，即 &lt;code&gt;shen.bioinit.com/layouts/partials/foot_custom.html&lt;/code&gt;  文件。&lt;/p&gt;
&lt;p&gt;第四，执行 &lt;code&gt;hugo&lt;/code&gt;，重新生成静态博客文件，push 到 github，就可以看到  utterances 评论的的效果。如果在某些页面（如首页），你想要禁用评论功能，可以在 md 文件的头部加入 &lt;code&gt;disable_comments: true&lt;/code&gt;  即可；不加，默认开启评论。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;---
title: &amp;quot;简介&amp;quot;
date: 2019-08-12
&lt;span class=&#34;gu&#34;&gt;disable_comments: true&lt;/span&gt;
&lt;span class=&#34;gu&#34;&gt;---&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;4-utterances-相关参数配置&#34;&gt;4. Utterances 相关参数配置&lt;a class=&#34;headerlink&#34; href=&#34;#4-utterances-相关参数配置&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;repo&lt;/code&gt; : 格式为  &lt;code&gt;owner/repo&lt;/code&gt;  即  &lt;code&gt;用户名/仓库名&lt;/code&gt;，千万不要填错了。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;issue-term&lt;/code&gt;：映射配置，有以下几种设置可供使用(个人使用的 title)。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;pathname&lt;/li&gt;
&lt;li&gt;url&lt;/li&gt;
&lt;li&gt;title&lt;/li&gt;
&lt;li&gt;og:title&lt;/li&gt;
&lt;li&gt;issue-number&lt;/li&gt;
&lt;li&gt;specific-term&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FlxYwt4DuBv2e23gqznf1WWeVWcs.png&#34; /&gt;
测试了一下前面三个的样式，区别如截图，issue-number 和  specific-term 没用过，喜欢的可以去尝试一下。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;theme&lt;/code&gt;：也就是主题，一白五黑，我白色主题没得选。&lt;/li&gt;
&lt;li&gt;github-light&lt;/li&gt;
&lt;li&gt;github-dark&lt;/li&gt;
&lt;li&gt;github-dark-orange&lt;/li&gt;
&lt;li&gt;icy-dark&lt;/li&gt;
&lt;li&gt;dark-blue&lt;/li&gt;
&lt;li&gt;photon-dark&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;最后，今天是 2019 年 12 月 24 日，西方平安夜，祝大家平平安安！&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E9%9D%99%E6%80%81%E7%BD%91%E7%AB%99/2019-12-24-fl1z7t/</link>
      <pubDate>Tue, 24 Dec 2019 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E9%9D%99%E6%80%81%E7%BD%91%E7%AB%99/2019-12-24-fl1z7t/</guid>
      
    </item>
    
    <item>
      <title>QQ 邮箱设置自定义域名邮箱</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2019-12-23&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2019-12-23T00:00:00&#39;&gt;2019-12-23&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-11-19&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-11-19T16:27:16&#39;&gt;2021-11-19&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;关于学术机构的官方邮箱，听的最多的一个问题就是，要投稿要发论文了，用 QQ 邮箱或者网易邮箱可不可以，会不会有影响？再比如，有时很正式很重要的通讯，如申请博后或访问学者，学术交流等，国内学者大多留下的联络邮箱常为普通公共邮箱，如 hotmail.com，126.com，163.com，QQ.com，sohu.com，sina.com，yahoo.com，… 等。虽然这些非学术公共邮箱使用是没有任何问题的，但总不够正式。那么，有没有什么办法自己可以申请或创建一个看起来更专业高大上的邮箱呢？&lt;/p&gt;
&lt;p&gt;首先理解一下，qq 邮箱设置域名邮箱，其实就是给你的 qq 邮箱起个别名而已，可以用自定义邮箱去收发邮件，但是邮件还是在 qq 邮箱里，qq 邮箱的无限邮箱容量对你的域名邮箱同样适用。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;2020.01.20：&lt;/strong&gt;
更新一下信息，今天登陆 QQ 邮箱，看到域名邮箱那里有个感叹号提醒，点开来看了看，发现是目前 QQ 邮箱已经不支持新增域名邮箱了，现有的域名邮箱暂时可以正常使用，但是鬼知道什么时候说不定就不能用了！！！ &lt;a href=&#34;https://www.v2ex.com/t/639288&#34;&gt;V2EX&lt;/a&gt; 上关于这件事情，有些评论挺有意思，可以去吃个瓜。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FhU35B7YKc4qHQueZK5StGJP-lwg.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;1-创建域名邮箱&#34;&gt;1. 创建域名邮箱&lt;a class=&#34;headerlink&#34; href=&#34;#1-创建域名邮箱&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;域名邮箱的主页是：&lt;a href=&#34;http://domain.mail.qq.com/&#34;&gt;http://domain.mail.qq.com/&lt;/a&gt;，这也是  QQ 域名邮箱直接登录的地址。我们直接在浏览器打开，在页面的左边栏就可以看到域名邮箱的创建入口。我们需要先通过 QQ 邮箱登陆。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fp9-NJfVmtRkDz9BfmO3fZ174vs-.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;登录后，选择创建域名邮箱。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FiUSwqm-LtQbtWKrU6gagBfIitvO.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;2-填写自己的域名&#34;&gt;2. 填写自己的域名&lt;a class=&#34;headerlink&#34; href=&#34;#2-填写自己的域名&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FkNmKzg-YX60pXCAnujM5Jj-xR_f.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;点击下一步，出现下面的页面，选择我们域名的提供商。小编的邮箱如果是在阿里云注册，所以选择其他提供商。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FjXgEQ3GrtVIgOZ1Fog5zVlg5Gpt.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;3-添加-cname-和-mx-记录&#34;&gt;3. 添加 CNAME 和 Mx 记录&lt;a class=&#34;headerlink&#34; href=&#34;#3-添加-cname-和-mx-记录&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;点击下一步，会出现下面的页面，根据提示添加 CNAME 和 Mx 记录。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FhUfS-UpD_CL3LvZENvK1FimCcXB.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;31-域名解析&#34;&gt;3.1  域名解析&lt;a class=&#34;headerlink&#34; href=&#34;#31-域名解析&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;这里以阿里云为例，登陆阿里云账号，选择对应域名的解析，点击&amp;rdquo;&lt;strong&gt;添加记录&lt;/strong&gt;&amp;ldquo;。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FteM2j-Q1qiwLOtyZ7wLOLqUuv7s.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;32-添加记录&#34;&gt;3.2 添加记录&lt;a class=&#34;headerlink&#34; href=&#34;#32-添加记录&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;添加两条记录，将前面的内容直接复制过来，其余的默认就好。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FpKitZ0d66F6rlk6ci1JSLPE9zqt.png&#34; /&gt;
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fo9j5P8u3ZuImpG5msg-7N_AyHWJ.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;4-提交验证&#34;&gt;4.  提交验证&lt;a class=&#34;headerlink&#34; href=&#34;#4-提交验证&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;返回 qq 邮箱刚才界面，点击提交验证。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FngioyeeV1BuUzgwMwLW7GZJeNrO.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fk0doy0Bu616LDaGx7I5wEumf0Zy.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;5-添加成员&#34;&gt;5. 添加成员&lt;a class=&#34;headerlink&#34; href=&#34;#5-添加成员&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;添加一个成员（注意，在添加新成员之前，需要首先设置域名邮箱的管理员），名字随便起，就跟你在别的平台注册邮箱一样。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FlYFQSYQ9BbZ2GDJKcC7YhRXdjkI.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;新建成员，点击&amp;rdquo;确定&amp;rdquo; 完成后。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fn0ioHNHdogTh8uJfWLeszdpdSEB.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;进入新创建用户的 QQ 邮箱，在收到的域名邮箱确认邮件中，点击 &amp;ldquo;&lt;strong&gt;接受这个邮箱账号&lt;/strong&gt;&amp;ldquo;，即可完成最后的创建。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fu4UONWvHFt4ipp9kayo2BgH8Uj4.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;最后，我们再次回到新创建用户 qq 邮箱**设置  **–&amp;gt;&lt;strong&gt;账户&lt;/strong&gt;–&amp;gt;&lt;strong&gt;账号管理&lt;/strong&gt;，此时就会出现刚刚设置的域名邮箱。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FomX7g66qMuir7-xZVhzQ-lfn1LB.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;6-主显账号&#34;&gt;6. 主显账号&lt;a class=&#34;headerlink&#34; href=&#34;#6-主显账号&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;QQ 邮箱默认是以 xxx.qq.com 作为你的发信账号和主显账号，如果我们想在打开 QQ 邮箱的时候第一眼看到的就是自己的域名邮箱，我们可以这样设置。&lt;/p&gt;
&lt;p&gt;通过 QQ 邮箱的&amp;rdquo;&lt;strong&gt;设置 →  账户 →  账号管理 → 默认发信账号&lt;/strong&gt;&amp;ldquo;，选择你想要的邮箱。
&lt;strong&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FkOMW6bYzrpd6fccWhlIh5Zsrh1Y.png&#34; /&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;ldquo;保存更改&amp;rdquo;&lt;/strong&gt;  后，你就可以看到自己的默认 QQ 邮箱已经变成了你所设置的域名邮箱。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FmzluQZQYrk77BQOEqdMiZlOPizk.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;到这里，QQ 邮箱的自定义域名邮箱就全部设置完成了。接下来，你就可以使用 163 或者其他邮箱，对新创建的域名邮箱收发邮件进行测试验证一下。&lt;/p&gt;
&lt;p&gt;最后想说的是，在阿里云，一个 &lt;code&gt;.cn&lt;/code&gt;  域名一年才 29 块钱，而 &lt;code&gt;.top&lt;/code&gt;  、 &lt;code&gt;.site&lt;/code&gt;  之类域名一年更是 10 块钱不到，更不要说价格更加便宜的腾讯云域名，所以如果你想拥有一个自己专属的域名，除了备案可能过程稍微繁琐点，其他门槛都是极低的。&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E5%90%8E%E7%AB%AF/2019-12-23-domain-mail-qq-setting/</link>
      <pubDate>Mon, 23 Dec 2019 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E5%90%8E%E7%AB%AF/2019-12-23-domain-mail-qq-setting/</guid>
      
    </item>
    
    <item>
      <title>富集分析的几个区别</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2019-12-05&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2019-12-05T00:00:00&#39;&gt;2019-12-05&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2023-07-25&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2023-07-25T02:40:09&#39;&gt;2023-07-25&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id=&#34;名词解释&#34;&gt;名词解释&lt;a class=&#34;headerlink&#34; href=&#34;#名词解释&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&#34;go&#34;&gt;GO&lt;a class=&#34;headerlink&#34; href=&#34;#go&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;GO 是 Gene Ontology 的缩写，是基因功能国际标准分类体系。它旨在建立一个适用于各种物种的，对基因和蛋白质功能进行限定和描述的，并能随着研究不断深入而更新的语言词汇标准。GO 数据库分别从&lt;strong&gt;分子功能(Molecular Function)&lt;/strong&gt;、&lt;strong&gt;生物过程(Biological Process) &lt;/strong&gt;及&lt;strong&gt;细胞组成(Cellular Component) &lt;/strong&gt;对基因产物进行了标准化描述，即对基因产物进行了简单注释。&lt;/p&gt;
&lt;p&gt;通过 &lt;strong&gt;GO 富集分析&lt;/strong&gt;可以粗略了解差异基因富集在哪些生物学功能、途径或者细胞定位。&lt;/p&gt;
&lt;h3 id=&#34;pathway&#34;&gt;Pathway&lt;a class=&#34;headerlink&#34; href=&#34;#pathway&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Pathway 指代谢通路，对差异基因进行 pathway 分析，可以&lt;strong&gt;了解实验条件下显著改变的代谢通路&lt;/strong&gt;，在机制研究中显得尤为重要。&lt;/p&gt;
&lt;p&gt;GO 分析好比是将基因分门别类放入一个个功能类群，而 pathway 则是将基因一个个具体放到代谢网络中的指定位置。&lt;/p&gt;
&lt;h2 id=&#34;1-什么是富集分析&#34;&gt;1. 什么是富集分析&lt;a class=&#34;headerlink&#34; href=&#34;#1-什么是富集分析&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;基因富集分析是分析基因表达信息的一种方法，富集是指将基因按照先验知识，也就是基因组注释信息进行分类。&lt;/p&gt;
&lt;h1 id=&#34;2-富集分析原理是什么&#34;&gt;2. 富集分析原理是什么&lt;a class=&#34;headerlink&#34; href=&#34;#2-富集分析原理是什么&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id=&#34;3-怎么做富集分析&#34;&gt;3. 怎么做富集分析&lt;a class=&#34;headerlink&#34; href=&#34;#3-怎么做富集分析&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;基因富集分析需要我们提供某一类功能基因的集合用于背景，常用的注释数据库如：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The Gene Ontology Consortium: 描述基因的层级关系&lt;/li&gt;
&lt;li&gt;Kyoto Encyclopedia of Genes and Genomes: 提供了 pathway 的数据库。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;未完，待续....&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E7%94%9F%E7%89%A9%E4%BF%A1%E6%81%AF/%E6%96%B9%E6%B3%95/2019-12-05-enrichment-analysis-differentiation/</link>
      <pubDate>Thu, 05 Dec 2019 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E7%94%9F%E7%89%A9%E4%BF%A1%E6%81%AF/%E6%96%B9%E6%B3%95/2019-12-05-enrichment-analysis-differentiation/</guid>
      
    </item>
    
    <item>
      <title>基因功能富集原理学习笔记</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2019-12-05&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2019-12-05T00:00:00&#39;&gt;2019-12-05&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2023-07-25&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2023-07-25T02:48:02&#39;&gt;2023-07-25&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;基因功能富集分析中的基因功能指的是众多代表一定的基因功能特征和生物过程的基因功能集(gene set)。由这些基因功能集构成的常用基因功能数据库有 GO, 生物学通路, 包含生化反应、代谢或信号通路的 KEGG, Reactome, Biocarta 等, 整合数据库, 如 MsigDB 等。&lt;/p&gt;
&lt;p&gt;基因功能富集分析的方法基于数据来源和算法大致可以分为 4 大类: ORA, FCS, PT, NT 的方法。ORA（过代表分析方法）是最早出现的一类基因功能富集方法, 它针对的数据是一组感兴趣的基因(基因列表), 其目的是在这组基因中发现有明显统计学上富集的基因功能集。其基本步骤包括先将给定的基因列表与待测功能集做交集, 找出其中共同的基因并进行计数(统计值), 最后利用统计检验的方式来评估观察的计数值是否显著高于随机, 即待测功能集在基因列表中是否显著富集。&lt;/p&gt;
&lt;p&gt;目前有许多工具及数据库提供 ORA 的使用, 包括 DAVID, GOstat, GenMAPP 等。其中 DAVID 提供的基因功能集数据库最为全面, 不仅包含大量不同物种的基因功能注释信息, 也涵盖了主流的生物通路注释库如 GO 条目和 KEGG 通路, 而且还提供了基因名称转换功能, 及良好的结果展示界面。&lt;/p&gt;
&lt;p&gt;ORA 方法中最为广泛使用的是 Fisher 精确检验, 即利用 2×2 的列联表，根据超几何分布来检验基因列表中的基因在待测功能集中是否显著富集。&lt;/p&gt;
&lt;p&gt;Fisher 精确检验是进行统计分析时经常碰到的一种分析方法，它基于超几何分布，作用于离散变量，用于检测两种分类方法的结果是否独立。&lt;/p&gt;
&lt;h1 id=&#34;超几何分布&#34;&gt;&lt;strong&gt;超几何分布&lt;/strong&gt;&lt;a class=&#34;headerlink&#34; href=&#34;#超几何分布&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;超几何分布是统计学上一种离散概率分布。它描述了由有限个物件中抽出 n 个物件，成功抽出指定种类的物件的个数（不归还）。&lt;/p&gt;
&lt;p&gt;例如在有 N 个样本，其中 m 个是不及格的。超几何分布描述了在该 N 个样本中抽出 n 个，其中 k 个是不合格的的机率：
&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fixh0BtmkTX3nlHgKV3_C-MqKTUv.svg&#34; /&gt;&lt;/p&gt;
&lt;p&gt;上式可如此理解：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FggaFQ7YVyMX-k13j8zG7SNG72Fh.svg&#34; /&gt;  表示所有在 N 个样本中抽出 n 个，而抽出的结果不一样的数目。&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FkNIh2xj3hNQ5oNrIpEbxO6z2tXC.svg&#34; /&gt; 表示在 m 个样本中，抽出 k 个的方法数目。剩下来的样本都是及格的，而及格的样本有 N-m 个，剩下的抽法便有  &lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fk_dHEbwssUmqR94UNL0JsANO1PH.svg&#34; /&gt; 种。&lt;/li&gt;
&lt;li&gt;若 n=1，超几何分布还原为伯努利分布。&lt;/li&gt;
&lt;li&gt;若 N 接近 ∞，超几何分布可视为二项分布(二项式分布，是有放回的抽样)。&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;fisher-精确检验&#34;&gt;&lt;strong&gt;Fisher 精确检验&lt;/strong&gt;&lt;a class=&#34;headerlink&#34; href=&#34;#fisher-精确检验&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;回到 Fisher 精确检验，Fisher 精确检验是基于超几何分布计算的，它分为两种，分别是单边检验（等同于超几何检验）和双边检验。Fisher 检验需要回答的问题是，对数据进行两种分类，这两种分类是否独立？即在第一种分类条件下分为某一类的数据是否更倾向于在第二种分类中归于某类。举例说明（例子来源于 wiki）：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;我们有 24 位测试对象，根据其性别和是否爱学习，将其分为四类，分类结果如下：&lt;/p&gt;
&lt;/blockquote&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;男性&lt;/th&gt;
&lt;th&gt;女性&lt;/th&gt;
&lt;th&gt;总和&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;爱学习&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;不爱学习&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;14&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;总和&lt;/td&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;24&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;现在我们的问题是，是否女性更喜欢学习？从数据直观上来看，男性和女性都是 12 人，但是爱好学习的女性是男性的 9 倍，似乎女性的确更爱好学习，但是我们如何定量的去描述这件事呢？可以看出，我们要解决的是一个假设检验问题，我们将零假设设定为：&lt;strong&gt;是否爱好学习和性别无关。&lt;/strong&gt;那么，在零假设下&amp;gt;，根据超几何分布我们观察到表格中数据的概率是：&lt;/p&gt;
&lt;/blockquote&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;男性&lt;/th&gt;
&lt;th&gt;女性&lt;/th&gt;
&lt;th&gt;总和&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;爱学习&lt;/td&gt;
&lt;td&gt;a&lt;/td&gt;
&lt;td&gt;b&lt;/td&gt;
&lt;td&gt;a+b&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;不爱学习&lt;/td&gt;
&lt;td&gt;c&lt;/td&gt;
&lt;td&gt;d&lt;/td&gt;
&lt;td&gt;c+d&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;总和&lt;/td&gt;
&lt;td&gt;a+c&lt;/td&gt;
&lt;td&gt;b+d&lt;/td&gt;
&lt;td&gt;a+b+c+d(=n)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;参考：&lt;a href=&#34;https://zh.wikipedia.org/zh-hans/%E8%B2%BB%E9%9B%AA%E6%AD%A3%E7%A2%BA%E6%A6%82%E7%8E%87%E6%AA%A2%E5%AE%9A&#34;&gt;费雪正确概率检定 - 维基百科&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;在这里我们做一个简单的概念转换即可知道软件是如何做 GO 富集分析的：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;N 为 GO 注释数据库中的总基因数；&lt;/li&gt;
&lt;li&gt;m 为数据库中属于某个 GO 子类的基因数；&lt;/li&gt;
&lt;li&gt;n 为我们得到的需要进行 GO 富集分析的基因的总数目；&lt;/li&gt;
&lt;li&gt;k 为 n 中属于 m 的数目。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;因此我们就可以计算基因集 n 是否在 m 类中富集的概率。但是知道这个概率后并不能直接用来作为富集分析的结果，必须要对其进行一个评估，因为我们必须要考虑到随机情况，如果随机从 N 中抽取 n 个基因，其中 k 个在 m 中的概率很高的话，那我们富集得到的通路意义就是极小的。这时候我们引入 p 值对富集分析的概率结果进行分析。&lt;/p&gt;
&lt;h1 id=&#34;p-value-检验&#34;&gt;&lt;strong&gt;p-value 检验&lt;/strong&gt;&lt;a class=&#34;headerlink&#34; href=&#34;#p-value-检验&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;未完，待续&amp;hellip;&lt;/p&gt;
&lt;h1 id=&#34;参考资料&#34;&gt;&lt;strong&gt;参考资料&lt;/strong&gt;&lt;a class=&#34;headerlink&#34; href=&#34;#参考资料&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;井底蛙蛙呱呱呱，《&lt;a href=&#34;https://www.jianshu.com/p/13f46bebebd4&#34;&gt;浅探富集分析中的超几何分布&lt;/a&gt;》，简书&lt;/li&gt;
&lt;li&gt;路口不会转弯，《&lt;a href=&#34;https://www.jianshu.com/p/a0bad4119e79&#34;&gt;GO，KEGG，GSEA 富集分析笔记&lt;/a&gt;》，简书&lt;/li&gt;
&lt;li&gt;z54572，《&lt;a href=&#34;https://blog.csdn.net/z54572/article/details/61199246&#34;&gt;Fisher 精确检验的通俗理解&lt;/a&gt;》，CSDN 博客&lt;/li&gt;
&lt;li&gt;戴思达，《&lt;a href=&#34;https://www.cnblogs.com/sddai/p/6279572.html&#34;&gt;fisher 精确检验(fisher’s exat test)和超几何分布&lt;/a&gt;》，博客园&lt;/li&gt;
&lt;li&gt;en.wikipedia，《&lt;a href=&#34;https://en.wikipedia.org/wiki/Fisher&#39;s_exact_test&#34;&gt;Fisher&amp;rsquo;s exact test&lt;/a&gt;》，维基百科&lt;/li&gt;
&lt;li&gt;zh.wikipedia，《&lt;a href=&#34;https://zh.wikipedia.org/wiki/%E7%BB%84%E5%90%88%E6%95%B0%E5%AD%A6&#34;&gt;组合数学&lt;/a&gt;》，维基百科&lt;/li&gt;
&lt;li&gt;铁汉 1990，《&lt;a href=&#34;http://blog.sina.com.cn/s/blog_670445240101m4z3.html&#34;&gt;每日一生信&amp;ndash;富集分析（超几何分布）（Fisher&amp;rsquo;sExactTest）&lt;/a&gt;》，新浪博客&lt;/li&gt;
&lt;li&gt;徐洲更，《&lt;a href=&#34;https://www.jianshu.com/p/5c8c6a380939&#34;&gt;转录组入门(8): 富集分析&lt;/a&gt;》，简书&lt;/li&gt;
&lt;li&gt;师师，《&lt;a href=&#34;https://www.zhihu.com/question/28637406&#34;&gt;Fisher 精确检验和超几何分布什么关系？&lt;/a&gt;》，知乎&lt;/li&gt;
&lt;li&gt;Joey 周琦，《&lt;a href=&#34;https://www.cnblogs.com/Dzhouqi/p/3440575.html&#34;&gt;Fisher&amp;rsquo;s exact test( 费希尔精确检验)&lt;/a&gt;》，博客园&lt;/li&gt;
&lt;/ul&gt;</description>
      <link>https://shenwy.com/yuque/%E7%94%9F%E7%89%A9%E4%BF%A1%E6%81%AF/%E6%96%B9%E6%B3%95/2019-12-05-enrichment-analysis/</link>
      <pubDate>Thu, 05 Dec 2019 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E7%94%9F%E7%89%A9%E4%BF%A1%E6%81%AF/%E6%96%B9%E6%B3%95/2019-12-05-enrichment-analysis/</guid>
      
    </item>
    
    <item>
      <title>GO 功能富集分析结果绘图 R 代码</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2019-12-05&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2019-12-05T00:00:00&#39;&gt;2019-12-05&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-10-04&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-10-04T16:41:36&#39;&gt;2021-10-04&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id=&#34;1-前言&#34;&gt;1. 前言&lt;a class=&#34;headerlink&#34; href=&#34;#1-前言&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;基因本体论 ( Gene Ontology, GO ) 是一个被广泛使用的生物学数据库，它由两个方面组成：其一为本体自身，即由生物学家定义好的词条以及它们之间的结构化关系；其二为基因产物和词条之间的关系，即基因本体注释。&lt;/p&gt;
&lt;p&gt;本体是某一专门领域的有严格约束的功能词汇或称作功能类，它们通过有向无环图（Directed Acyclic Graph, DAG）的形式将严格定义的不同功能类之间的关系组织起来。GO 是跨越原核生物与真核生物各物种的基因功能分类体系，分为三个独立的 ontology, 分别是生物过程(biological process, BP)，分子功能（molecular function, MF），和细胞组分(cellular component, CC)。&lt;/p&gt;
&lt;p&gt;GO 分析是对这三个 ontology 分别进行分析。更多的内容可以参考 &lt;a href=&#34;http://www.geneontology.org&#34;&gt;gene ontology 官网&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;GO 分析结果主要包括 GO 功能分类结果和 GO 功能富集结果。&lt;/p&gt;
&lt;p&gt;From: 《&lt;a href=&#34;http://www.biorefer.com/biorefer/html/fenxifuwu/shengwuxinxifenxifuwu/2010/0806/42.html&#34;&gt;Gene Ontology(GO)分析&lt;/a&gt;》，上海生咨生物科技有限公司生物信息分析服务&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;2-go-功能分类分析&#34;&gt;2. GO 功能分类分析&lt;a class=&#34;headerlink&#34; href=&#34;#2-go-功能分类分析&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&#34;21-说明&#34;&gt;2.1 说明&lt;a class=&#34;headerlink&#34; href=&#34;#21-说明&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;GO 功能分类是在某一功能层次上统计蛋白或者基因的数目或组成，往往是在 GO 的第二层次。此外也有研究都挑选一些 Term，而后统计直接对应到该 Term 的基因或蛋白数。目的是展示数据集大概的 GO 功能情况，以下为几种不同风格的 GO 短信功能分类分析结果图形。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;图 1. 参考图注，GO categories assigned to all proteins. Y-axis represents the count of proteins. The proteins were categorized according to the annotation of GO, and the number of each category is displayed based on biological process, cellular components, and molecular functions.
  &lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FrQ2o9YdnkHFAfphvfqvbNevCWvd.png&#34; /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;ul&gt;
&lt;li&gt;图 2：风格 ２，３，４
  &lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FhqOz1iKamtxZ7mIeKadSt-yfFpL.jpeg&#34; /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;ul&gt;
&lt;li&gt;图３：风格５
  &lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FtTfRE9prf5HUBMK7xM-1h7CFl0m.png&#34; /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;22-go-功能分类柱状图绘制&#34;&gt;2.2 GO 功能分类柱状图绘制&lt;a class=&#34;headerlink&#34; href=&#34;#22-go-功能分类柱状图绘制&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;本图的绘制主要参考：&lt;a href=&#34;http://www.biotrainee.com/thread-242-1-1.html。&#34;&gt;http://www.biotrainee.com/thread-242-1-1.html。&lt;/a&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;library(ggplot2)

go_enrich_df &amp;lt;- read.table(&amp;quot;https://gitee.com/stevenshen/bio-r-charts/raw/master/example_data/go_functional_bar.txt&amp;quot;,header = T,sep=&amp;quot;\t&amp;quot;)

## numbers as data on x axis
go_enrich_df$number &amp;lt;- factor(rev(1:nrow(go_enrich_df)))

## shorten the names of GO terms
shorten_names &amp;lt;- function(x, n_word=4) {
    if (length(strsplit(x, &amp;quot; &amp;quot;)[[1]]) &amp;gt; n_word){
        return(paste(paste(strsplit(x, &amp;quot; &amp;quot;)[[1]][1:n_word], collapse=&amp;quot; &amp;quot;), &amp;quot;...&amp;quot;, sep=&amp;quot;&amp;quot;))
    }else{
        return(x)
    }
}

labels=(sapply(levels(go_enrich_df$Description)[as.numeric(go_enrich_df$Description)], shorten_names))
names(labels) = rev(1:nrow(go_enrich_df))

## setting colors for bar
CPCOLS &amp;lt;- c(&amp;quot;#66C3A5&amp;quot;, &amp;quot;#8DA1CB&amp;quot;, &amp;quot;#FD8D62&amp;quot;)
#也可以通过 colorRampPalette 自定义渐变颜色
#ncolor &amp;lt;- length(unique(go_enrich_df[,4]))
#CPCOLS&amp;lt;-colorRampPalette(c(&amp;quot;green&amp;quot;, &amp;quot;red&amp;quot;))(ncolor)

## plot
gplot(data=go_enrich_df, aes(x=number, y=GeneNumber, fill=type)) + geom_bar(stat=&amp;quot;identity&amp;quot;, width=0.8) + coord_flip() +
    scale_fill_manual(values = CPCOLS) + theme_bw() + scale_x_discrete(labels=labels) + xlab(&amp;quot;GO terms&amp;quot;) + ylab(&amp;quot;GeneNumber&amp;quot;) +
    theme(axis.text=element_text(face = &amp;quot;bold&amp;quot;, color=&amp;quot;gray50&amp;quot;)) + labs(title = &amp;quot;The Most Enriched GO Terms&amp;quot;)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;得到 GO 功能分类柱状图如下：
&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FnR20BEyMQXi_ig3eKArfNXfqH1n.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;3-go-功能富集分析&#34;&gt;3. GO 功能富集分析&lt;a class=&#34;headerlink&#34; href=&#34;#3-go-功能富集分析&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&#34;31-说明&#34;&gt;3.1 说明&lt;a class=&#34;headerlink&#34; href=&#34;#31-说明&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;GO 功能富集目的是为了获得相对于本底参照显著富集的功能类别,通过该项分析可以找出在统计上显著富集的.该功能或者定位有可能与研究的目前有关。以下为几种不同风格的 GO 功能富集分析结果图形。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;图 4. 示例图 1. Top 10 enrichment GO categories. X-axis represents –log10 p-value. The count of proteins corresponds to circular size.
  &lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FlmDKUUYgbSvBm-4aRaTMQAbl-Vd.png&#34; /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;ul&gt;
&lt;li&gt;图 5. 示例图 2，分别的条状图显示 Top 10 enrichment GO categories.
  &lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FuWMXEH3oKpGf19PSMl8anOg2jsx.png&#34; /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;ul&gt;
&lt;li&gt;图 6. 示例图 3，气泡图 Top 20 enrichment GO categories.
  &lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FjimEFhwg7j9uHD41P5QoNVZXaas.png&#34; /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;参考资料&#34;&gt;参考资料&lt;a class=&#34;headerlink&#34; href=&#34;#参考资料&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;生信宝典，《&lt;a href=&#34;https://blog.csdn.net/qazplm12_3/article/details/76474671&#34;&gt;R 学习 - 功能富集泡泡图&lt;/a&gt;》，CSDN 博客&lt;/li&gt;
&lt;li&gt;ybzhao，《&lt;a href=&#34;https://www.plob.org/article/9700.html&#34;&gt;GO 和 KEGG 富集的 R 包 clusterProfiler&lt;/a&gt;》，Public Library of Bioinformatics&lt;/li&gt;
&lt;li&gt;杜德超，《&lt;a href=&#34;https://mp.weixin.qq.com/s?__biz=MzA5NzE1MTYwMw%3D%3D&amp;amp;idx=1&amp;amp;mid=400906256&amp;amp;scene=21&amp;amp;sn=71d2f3b01e23c614eed34a61a150e355&#34;&gt;RNA-seq 中 GO、KEGG 结果图如何解读&lt;/a&gt;》，诺禾科服，2015-11-29。&lt;/li&gt;
&lt;li&gt;艾鹏，《&lt;a href=&#34;http://www.omicshare.com/forum/thread-146-1-1.html&#34;&gt;R 语言 ggplot2 画图教程之——Pathway 富集分析气泡图&lt;/a&gt;》，基迪奥，OmicShare Forum&lt;/li&gt;
&lt;li&gt;木子愚溪，《&lt;a href=&#34;https://www.jianshu.com/p/6614cb469b2a&#34;&gt;ggplot2 绘制 Pathway 富集分析 气泡图&lt;/a&gt;》，简书&lt;/li&gt;
&lt;/ol&gt;</description>
      <link>https://shenwy.com/yuque/%E7%94%9F%E7%89%A9%E4%BF%A1%E6%81%AF/%E6%96%B9%E6%B3%95/2019-12-05-nvi8vg/</link>
      <pubDate>Thu, 05 Dec 2019 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E7%94%9F%E7%89%A9%E4%BF%A1%E6%81%AF/%E6%96%B9%E6%B3%95/2019-12-05-nvi8vg/</guid>
      
    </item>
    
    <item>
      <title>R 常用操作汇总</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2019-12-05&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2019-12-05T00:00:00&#39;&gt;2019-12-05&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2023-06-15&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2023-06-15T13:52:32&#39;&gt;2023-06-15&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h4 id=&#34;显示某个包中包含的全部数据集&#34;&gt;显示某个包中包含的全部数据集&lt;a class=&#34;headerlink&#34; href=&#34;#显示某个包中包含的全部数据集&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;怎样显示 R 软件中某个包中包含的全部数据集&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;library&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MASS&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;package&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;MASS&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4 id=&#34;查看包加载的路径&#34;&gt;查看包加载的路径&lt;a class=&#34;headerlink&#34; href=&#34;#查看包加载的路径&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;查看包加载的路径&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nf&#34;&gt;library&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ggplot2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;system.file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;package&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;ggplot2&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;find.package&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;ggplot2&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4 id=&#34;加载指定路径的-r-包&#34;&gt;加载指定路径的 R 包&lt;a class=&#34;headerlink&#34; href=&#34;#加载指定路径的-r-包&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;指定加载特定路径下的 R 包&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;通常我们都是直接使用 &lt;code&gt;library(pkg_name)&lt;/code&gt;  的形式加载 R 包，在同一台机器上面，对于我们而言，这个包所在的路径一定是在 &lt;code&gt;.libPaths()&lt;/code&gt;  里面的，但是对于其他用户而言，这个路径可能不存在 &lt;code&gt;.libPaths()&lt;/code&gt;  里面，此时，就无法正确的加载该 R 包，为了解决这一问题，可以通过添加 &lt;code&gt;lib.loc&lt;/code&gt;  参数，指定查找该包的路径。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nf&#34;&gt;library&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;gplots&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lib.loc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;/usr/lib64/R/library/gplots&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4 id=&#34;查看包安装目录&#34;&gt;查看包安装目录&lt;a class=&#34;headerlink&#34; href=&#34;#查看包安装目录&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;查看包的安装目录： &lt;code&gt;.libPaths()&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;查看包里的所有函数&#34;&gt;查看包里的所有函数&lt;a class=&#34;headerlink&#34; href=&#34;#查看包里的所有函数&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;查看该包里面所有的函数： &lt;code&gt;ls(&#39;package:ggplot2&#39;)&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;查看已经安装的包有哪些&#34;&gt;查看已经安装的包有哪些&lt;a class=&#34;headerlink&#34; href=&#34;#查看已经安装的包有哪些&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;查看已经安装的包目录： &lt;code&gt;library()&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;查看已安装的包的信息&#34;&gt;查看已安装的包的信息&lt;a class=&#34;headerlink&#34; href=&#34;#查看已安装的包的信息&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;installed.packages&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()[,&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;Package&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;Version&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;LibPath&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)]&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;installed.packages&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()[&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;ggplot2&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;Package&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;Version&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;LibPath&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)]&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# 其中 c(&amp;#39;Package&amp;#39;,&amp;#39;Version&amp;#39;,&amp;#39;LibPath&amp;#39;) 表示显示包名、版本、库路径信息，若无[,c(&amp;#39;Package&amp;#39;,&amp;#39;Version&amp;#39;,&amp;#39;LibPath&amp;#39;)]参数，则显示所有信息。&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4 id=&#34;载入-r-包&#34;&gt;载入 R 包&lt;a class=&#34;headerlink&#34; href=&#34;#载入-r-包&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;载入 mypackage 包： &lt;code&gt;library(mypackage)&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;查看启动-r-时自动载入的包&#34;&gt;查看启动 R 时自动载入的包&lt;a class=&#34;headerlink&#34; href=&#34;#查看启动-r-时自动载入的包&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;查看启动 R 时自动载入的包： &lt;code&gt;getOption(&#34;defaultPackages&#34;)&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;查看当前载入的包&#34;&gt;查看当前载入的包&lt;a class=&#34;headerlink&#34; href=&#34;#查看当前载入的包&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;查看当前载入的包： &lt;code&gt;search()&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;查看-r-中载入的包&#34;&gt;查看 R 中载入的包&lt;a class=&#34;headerlink&#34; href=&#34;#查看-r-中载入的包&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;查看 R 中载入的包： &lt;code&gt;sessionInfo()&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;查看包的帮助信息&#34;&gt;查看包的帮助信息&lt;a class=&#34;headerlink&#34; href=&#34;#查看包的帮助信息&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;查看 &amp;lsquo;mypackage&amp;rsquo; 的帮助信息： &lt;code&gt;help(package = &#39;mypackage&#39;)&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;查看包的版本&#34;&gt;查看包的版本&lt;a class=&#34;headerlink&#34; href=&#34;#查看包的版本&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;查看 &amp;lsquo;mypackage&amp;rsquo; 的版本：&lt;code&gt;packageVersion(&#39;mypackage&#39;)&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;查看函数的参数&#34;&gt;查看函数的参数&lt;a class=&#34;headerlink&#34; href=&#34;#查看函数的参数&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;查看函数的参数： &lt;code&gt;args(function)&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;自动运行该函数帮助文档中的例子&#34;&gt;自动运行该函数帮助文档中的例子&lt;a class=&#34;headerlink&#34; href=&#34;#自动运行该函数帮助文档中的例子&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;自动运行该函数帮助文档中的例子： &lt;code&gt;example(function)&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;展示一些包中-demostration&#34;&gt;展示一些包中 demostration&lt;a class=&#34;headerlink&#34; href=&#34;#展示一些包中-demostration&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;展示一些包中 demostration： &lt;code&gt;demo(&#34;package&#34;)&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;查看-vignette&#34;&gt;查看 vignette&lt;a class=&#34;headerlink&#34; href=&#34;#查看-vignette&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;有的包，特别是 bioconductor 的包有 vignette，用函数查看： &lt;code&gt;vignette(&#39;mypackage&#39;)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;查看 vignette： &lt;code&gt;openVignette(&#39;mypackage&#39;)&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;搜索-r-网站上的-helpinfor-相关信&#34;&gt;搜索 R 网站上的 &amp;ldquo;helpinfor&amp;rdquo; 相关信&lt;a class=&#34;headerlink&#34; href=&#34;#搜索-r-网站上的-helpinfor-相关信&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;搜索 R 网站上的 &amp;ldquo;helpinfor&amp;rdquo; 相关信息： &lt;code&gt;RSiteSearch(&#34;helpinfor&#34;)&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;查看已经安装包的详细-html-文档&#34;&gt;查看已经安装包的详细 HTML 文档&lt;a class=&#34;headerlink&#34; href=&#34;#查看已经安装包的详细-html-文档&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;查看已经安装包的详细 HTML 文档： &lt;code&gt;help.start()&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;查看-s4-类的方法&#34;&gt;查看 S4 类的方法&lt;a class=&#34;headerlink&#34; href=&#34;#查看-s4-类的方法&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;查看 S4 类的方法： &lt;code&gt;showMethods(class = &#34;myClass&#34;)&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;查看-method-的代码&#34;&gt;查看 method 的代码&lt;a class=&#34;headerlink&#34; href=&#34;#查看-method-的代码&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;查看 method 的代码： &lt;code&gt;findMethods(&#34;myMethods&#34;)&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;查看某个对象的类&#34;&gt;查看某个对象的类&lt;a class=&#34;headerlink&#34; href=&#34;#查看某个对象的类&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;查看某个对象的类： &lt;code&gt;class(myObject)&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;查看某个-class-或者包的具体内容&#34;&gt;查看某个 class 或者包的具体内容&lt;a class=&#34;headerlink&#34; href=&#34;#查看某个-class-或者包的具体内容&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;查看某个 class 或者包的具体内容： &lt;code&gt;getClass(&#34;class/package&#34;)&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;查看某个-class-的-slot&#34;&gt;查看某个 class 的 slot&lt;a class=&#34;headerlink&#34; href=&#34;#查看某个-class-的-slot&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;查看某个 class 的 slot： &lt;code&gt;getSlots(&#34;class&#34;)&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;查看某个对象的-slot&#34;&gt;查看某个对象的 slot&lt;a class=&#34;headerlink&#34; href=&#34;#查看某个对象的-slot&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;查看某个对象的 slot： &lt;code&gt;slotNames(MyObject)&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;卸除已加载的包&#34;&gt;卸除已加载的包&lt;a class=&#34;headerlink&#34; href=&#34;#卸除已加载的包&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;卸除已加载的包&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;detach&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;package:RMySQL&amp;quot;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# 注意是卸除，不是卸载，也就是说不是把包从 R 运行环境中彻底删除，只是不希望该包被加载使用。&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# 该命令在包使用函数冲突，检验函数依赖时比较有用。&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
      <link>https://shenwy.com/yuque/%E7%BC%96%E7%A8%8B%E6%8A%80%E6%9C%AF/R/2019-12-05-lwsgg0/</link>
      <pubDate>Thu, 05 Dec 2019 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E7%BC%96%E7%A8%8B%E6%8A%80%E6%9C%AF/R/2019-12-05-lwsgg0/</guid>
      
    </item>
    
    <item>
      <title>怎么在 CODING 上部署自己的静态网站</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2019-12-04&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2019-12-04T00:00:00&#39;&gt;2019-12-04&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-08-14&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-08-14T10:48:58&#39;&gt;2021-08-14&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;在 cong.net 部署静态博客，跟 github 是不一样的，这里简单记录一下。以谢益辉的  &lt;a href=&#34;https://github.com/yihui/hugo-xmag&#34;&gt;hugo-xmag&lt;/a&gt;  博客主题为例。&lt;/p&gt;
&lt;h2 id=&#34;1-创建项目进入代码浏览&#34;&gt;1. 创建项目，进入代码浏览&lt;a class=&#34;headerlink&#34; href=&#34;#1-创建项目进入代码浏览&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FhBe5Ia8ejpeJbvurVlTS9RwRr3Z.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;2-在服务器中生成网站并推送&#34;&gt;2. 在服务器中生成网站，并推送&lt;a class=&#34;headerlink&#34; href=&#34;#2-在服务器中生成网站并推送&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;shenweiyan@ecs-steven&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;14&lt;/span&gt;:25:22&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/home/shenweiyan
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mkdir&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;shenweiyan.com
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;shenweiyan.com
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mkdir&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;themes
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;themes
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;git&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;clone&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://github.com/yihui/hugo-xmag.git
Cloning&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;into&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;hugo-xmag&amp;#39;&lt;/span&gt;...
remote:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Enumerating&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;objects:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;12&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;.
remote:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Counting&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;objects:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;100&lt;/span&gt;%&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;12&lt;/span&gt;/12&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;.
remote:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Compressing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;objects:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;100&lt;/span&gt;%&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;11&lt;/span&gt;/11&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;.
remote:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Total&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;547&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;delta&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;reused&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;7&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;delta&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pack-reused&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;535&lt;/span&gt;
Receiving&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;objects:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;100&lt;/span&gt;%&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;547&lt;/span&gt;/547&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;339&lt;/span&gt;.23&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;KiB&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;53&lt;/span&gt;.00&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;KiB/s,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;.
Resolving&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;deltas:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;100&lt;/span&gt;%&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;236&lt;/span&gt;/236&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;.
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/home/shenweiyan/shenweiyan.com
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;cp&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-r&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;themes/hugo-xmag/exampleSite/*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;.
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;hugo&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 这一步会默认生成 public 静态博客目录&lt;/span&gt;

&lt;span class=&#34;w&#34;&gt;                   &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;EN
+------------------+----+
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Pages&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;41&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Paginator&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pages&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Non-page&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;files&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Static&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;files&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Processed&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;images&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Aliases&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;16&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Sitemaps&lt;span class=&#34;w&#34;&gt;         &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Cleaned&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;

Total&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;129&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ms
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;public
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;git&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;init
Initialized&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;empty&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Git&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;repository&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/home/shenweiyan/shenweiyan.com/public/.git/
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;git&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;remote&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;add&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;origin&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://username:passwd@e.coding.net/bioit/shenweiyan.com.git
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;git&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;add&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--all
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;git&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;commit&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-m&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;first commit&amp;quot;&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;git&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;push&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;origin&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;master&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 完成 public 目录的所有文件推送&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;3-开始构建静态网站&#34;&gt;3. 开始构建静态网站&lt;a class=&#34;headerlink&#34; href=&#34;#3-开始构建静态网站&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;在导航栏的 “&lt;strong&gt;构建与部署&lt;/strong&gt;” 中选择 “&lt;strong&gt;静态网站&lt;/strong&gt;”，点击“&lt;strong&gt;直接发布静态网站&lt;/strong&gt;”。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fmbcgo5jdhd6hO6YtMg8xVNRdKbj.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;填写网站名称，然后 &amp;ldquo;&lt;strong&gt;保存&lt;/strong&gt;&amp;ldquo;。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fql3_vK9lCUgKCjHRTGg_rxlwdTF.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&amp;ldquo;&lt;strong&gt;保存&lt;/strong&gt;&amp;rdquo; 后，在部署页面点击 &amp;ldquo;&lt;strong&gt;立即部署&lt;/strong&gt;&amp;ldquo;。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fn4Nm-LecNF7IcOuDuh97O4_vDqm.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;部署成功后，通过访问地址可以打开静态的网站。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FiMkVKhkOCY1U01IjFaiuVphF4Zu.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FqkGIf-oBOD5W9ThS55qh93Rw3K4.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;4-绑定域名&#34;&gt;4. 绑定域名&lt;a class=&#34;headerlink&#34; href=&#34;#4-绑定域名&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;在项目导航栏 &amp;ldquo;构建与部署&amp;rdquo; → &amp;ldquo;静态网站&amp;rdquo; 页面，点击右上角的 &amp;ldquo;设置&amp;rdquo; 按钮。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fq21jVp5Snhf7l5OCvLMEe6kOwDU.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;在 &amp;ldquo;设置&amp;rdquo; 页面，填写需要绑定的域名，并选择强制 https 访问。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FlnPUJV1HANAUcFbfNOR1A2QT8_R.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;在域名解析中添加一条 CNAME 记录。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FtnyQ-iVV1l-Z77xyeyJVUXWkl86.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;域名解析 CNAME 添加后，等待几分钟，直至证书状态为“正常”。如果证书状态失败，检查你的 CNAME 记录，并再尝试多重新申请几次。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fv8SS-gwX48ZRRf8f8w-JKdkDP1v.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;最后，通过域名访问，一切正常。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FlgcTNCIMD5y4GUw7sOT_C8Ea9Dt.png&#34; /&gt;&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E9%9D%99%E6%80%81%E7%BD%91%E7%AB%99/2019-12-04-coding-pages/</link>
      <pubDate>Wed, 04 Dec 2019 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E9%9D%99%E6%80%81%E7%BD%91%E7%AB%99/2019-12-04-coding-pages/</guid>
      
    </item>
    
    <item>
      <title>RHEL 6.X 更换主板后网卡识别失败处理方法</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2019-12-03&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2019-12-03T00:00:00&#39;&gt;2019-12-03&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2024-10-25&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2024-10-25T00:00:00&#39;&gt;2024-10-25&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;上周日，由于断电导致公司所在的集群服务器在关机断电重启后，发现唯一的一个登陆节点主板出现了故障，以致于 log 节点的 Red Hat Enterprise 6  系统无法启动。 &lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;03.jpg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FsBJMj7aTqfSBLGU8HM1bGf9GmXx.jpeg&#34; /&gt;&lt;/p&gt;
&lt;p&gt;由于集群是生信所有分析工作的基础，我们所用的 IBM LSF 集群一共又 30 多个计算节点，其中还包括了 2 个大内存 fat 节点，log 节点挂掉后，整个生信部门几十号人的工作都没法正常进行，情况可谓是非常紧迫。负责硬件的同时在加班加点联系供应商更换主板后，终于可以把系统启动起来，但是问题也来了：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;系统启动后一直提示 &lt;strong&gt;&amp;ldquo;Network is unreachable&amp;rdquo;&lt;/strong&gt; 错误，log 无法跟计算、管理、存储等节点进行网络连接！&lt;/li&gt;
&lt;li&gt;供应商负责硬件更换后就走人了，系统层面各种服务还是需要自己去解决。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这个文章主要参考&lt;a href=&#34;https://home.cnblogs.com/u/kevingrace/&#34;&gt;散尽浮华&lt;/a&gt;(高级 Linux 运维工程师)在博客园的相关文章，对 Linux 服务器更换主板后，网卡识别失败的处理进行一下记录与分享，以作备忘。&lt;/p&gt;
&lt;h2 id=&#34;1-识别不到网卡设备&#34;&gt;1. 识别不到网卡设备&lt;a class=&#34;headerlink&#34; href=&#34;#1-识别不到网卡设备&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;公司 IDC 机房里的一台线上服务器硬件报警，最后排查发现服务器主板坏了，随即联系厂商进行更换主板，最后更换后，登录服务器，发现网卡绑定及 ip 信息都在，但是 ip 却 ping 不通了，进一步排查，重启网卡，提示之前的 eth0 和 eth1 网卡设备发现不了了，也就是说服务器主板更换后，之前的网卡设备都识别不了了！&lt;/p&gt;
&lt;p&gt;主板更换后，重启并登陆服务器，发现之前的网卡设备（eth0、eth1、eth2、eth3）都没有了！&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@kevin01&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# ifconfig -a&lt;/span&gt;
bond0&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;Link&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;encap:Ethernet&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;HWaddr&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;08&lt;/span&gt;:94:EF:5E:AE:72
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;inet&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;addr:192.168.10.20&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Bcast:192.168.10.255&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Mask:255.255.255.0
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;inet6&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;addr:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;fe80::a94:efff:fe5e:ae72/64&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Scope:Link
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;UP&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;BROADCAST&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;RUNNING&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;MASTER&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;MULTICAST&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;MTU:1500&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Metric:1
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;RX&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;packets:75582&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;errors:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;dropped:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;overruns:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;frame:0
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;TX&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;packets:58537&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;errors:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;dropped:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;overruns:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;carrier:0
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;collisions:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;txqueuelen:0
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;RX&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bytes:5890233&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;5&lt;/span&gt;.6&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;MiB&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;TX&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bytes:4390537&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4&lt;/span&gt;.1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;MiB&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;

lo&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;Link&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;encap:Local&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Loopback
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;inet&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;addr:127.0.0.1&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Mask:255.0.0.0
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;inet6&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;addr:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;::1/128&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Scope:Host
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;UP&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;LOOPBACK&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;RUNNING&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;MTU:65536&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Metric:1
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;RX&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;packets:26&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;errors:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;dropped:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;overruns:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;frame:0
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;TX&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;packets:26&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;errors:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;dropped:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;overruns:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;carrier:0
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;collisions:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;txqueuelen:0
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;RX&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bytes:1983&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.9&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;KiB&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;TX&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bytes:1983&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.9&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;KiB&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;

usb0&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;Link&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;encap:Ethernet&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;HWaddr&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;0A:94:EF:5E:AE:79
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;BROADCAST&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;MULTICAST&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;MTU:1500&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Metric:1
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;RX&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;packets:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;errors:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;dropped:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;overruns:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;frame:0
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;TX&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;packets:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;errors:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;dropped:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;overruns:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;carrier:0
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;collisions:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;txqueuelen:1000
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;RX&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bytes:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;.0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;b&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;TX&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bytes:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;.0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;b&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;之前的网卡设备和 bond 绑定的配置信息都还在（bond 绑定网卡操作：《&lt;a href=&#34;https://www.cnblogs.com/kevingrace/p/7966511.html&#34;&gt;Linux 下绑定网卡的操作记录&lt;/a&gt;》）。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@kevin&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# cd /etc/sysconfig/network-scripts/&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@kevin&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;network-scripts&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# ls&lt;/span&gt;
ifcfg-bond0&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;ifcfg-lo&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;ifdown-ib&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;ifdown-ppp&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;ifup-aliases&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;ifup-ipv6&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;ifup-ppp&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;init.ipv6-global
ifcfg-eth0&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;ifcfg-usb0&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;ifdown-ippp&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;ifdown-routes&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;ifup-bnep&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;ifup-isdn&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;ifup-routes&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;net.hotplug
ifcfg-eth1&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;ifdown&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;ifdown-ipv6&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;ifdown-sit&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;ifup-eth&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;ifup-plip&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;ifup-sit&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;network-functions
ifcfg-eth2&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;ifdown-bnep&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;ifdown-isdn&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;ifdown-tunnel&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;ifup-ib&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;ifup-plusb&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;ifup-tunnel&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;network-functions-ipv6
ifcfg-eth3&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;ifdown-eth&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;ifdown-post&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;ifup&lt;span class=&#34;w&#34;&gt;           &lt;/span&gt;ifup-ippp&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;ifup-post&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;ifup-wireless

&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@kevin&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# /etc/init.d/network restart&lt;/span&gt;
......
报错说没有发现&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;eth0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;和&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;eth1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;网卡

&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@kevin&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# ipdown eth0&lt;/span&gt;
报错提示说没有发现&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;eth0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;网卡
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;2-产生原因&#34;&gt;2. 产生原因&lt;a class=&#34;headerlink&#34; href=&#34;#2-产生原因&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;这是因为服务器更换了主板或网卡，MAC 地址改变所导致的。系统加载网卡驱动后会去读一个文件（即 &lt;code&gt;/etc/udev/rules.d/70-persistent-net.rules&lt;/code&gt; ），这个文件是一个缓冲文件，包含了网卡的 MAC 地址，因为更换了主板，网卡的 MAC 地址也变了，但是这个文件的 MAC 地址还没变，还是之前坏了的主板的上面的网卡的 MAC 地址，这样系统在加载网卡，读取这个文件的时候读取的是之前网卡的 MAC 地址，和现在更换后主板后的网卡 MAC 地址不一致导致混乱，所以就识别不了当前网卡。&lt;/p&gt;
&lt;h2 id=&#34;3-解决方法&#34;&gt;3. 解决方法&lt;a class=&#34;headerlink&#34; href=&#34;#3-解决方法&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;一般来说，删除 &lt;code&gt;/etc/udev/rules.d/70-persistent-net.rules&lt;/code&gt; 文件（或者把这个文件重新命名　或者清空该文件内容），重启服务器就可以解决了，重启后会重新生成这个文件，这样就顺利解决这个问题了！这里注意下，由于我的这台服务器绑定了网卡，所以重启网卡后，还需要进行 &lt;code&gt;modprobe&lt;/code&gt; 命令使得网卡绑定生效，大致步骤如下：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mv&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/etc/udev/rules.d/70-persistent-net.rules&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/etc/udev/rules.d/70-persistent-net.rules.bak20180307
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;init&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;6&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;重启服务器后，查看 &lt;code&gt;/etc/udev/rules.d/70-persistent-net.rules&lt;/code&gt;  文件，发现没有 eth0、eth1、eth3、eth4 的网卡信息（mac 和设备名称）：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@kevin&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;network-scripts&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# cat /etc/udev/rules.d/70-persistent-net.rules&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# This file was automatically generated by the /lib/udev/write_net_rules&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# program, run by the persistent-net-generator.rules rules file.&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;#&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# You can modify it, as long as you keep each rule on a single&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# line, and change only the value of the NAME= key.&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# PCI device 0x14e4:0x1657 (tg3)&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;SUBSYSTEM&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;net&amp;quot;&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;ACTION&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;add&amp;quot;&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;DRIVERS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;?*&amp;quot;&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ATTR&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;address&lt;span class=&#34;o&#34;&gt;}==&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;****&amp;quot;&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ATTR&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;type&lt;span class=&#34;o&#34;&gt;}==&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;1&amp;quot;&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;KERNEL&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;eth*&amp;quot;&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# PCI device 0x14e4:0x1657 (tg3)&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;SUBSYSTEM&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;net&amp;quot;&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;ACTION&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;add&amp;quot;&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;DRIVERS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;?*&amp;quot;&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ATTR&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;address&lt;span class=&#34;o&#34;&gt;}==&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;****&amp;quot;&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ATTR&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;type&lt;span class=&#34;o&#34;&gt;}==&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;1&amp;quot;&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;KERNEL&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;eth*&amp;quot;&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# PCI device 0x14e4:0x1657 (tg3)&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;SUBSYSTEM&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;net&amp;quot;&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;ACTION&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;add&amp;quot;&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;DRIVERS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;?*&amp;quot;&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ATTR&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;address&lt;span class=&#34;o&#34;&gt;}==&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;****&amp;quot;&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ATTR&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;type&lt;span class=&#34;o&#34;&gt;}==&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;1&amp;quot;&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;KERNEL&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;eth*&amp;quot;&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# PCI device 0x14e4:0x1657 (tg3)&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;SUBSYSTEM&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;net&amp;quot;&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;ACTION&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;add&amp;quot;&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;DRIVERS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;?*&amp;quot;&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ATTR&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;address&lt;span class=&#34;o&#34;&gt;}==&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;****&amp;quot;&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ATTR&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;type&lt;span class=&#34;o&#34;&gt;}==&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;1&amp;quot;&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;KERNEL&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;eth*&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;然后重启网卡等操作：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@kevin&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# modprobe bonding&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@kevin&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# /etc/init.d/network restart&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@kevin&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# modprobe bonding&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;接着 &lt;code&gt;ifconfig&lt;/code&gt;  查看，发现 eth0、eth1、eth2、eth3 网卡设备都能识别了：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@kevin&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# ifconfig -a&lt;/span&gt;
bond0&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;Link&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;encap:Ethernet&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;HWaddr&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;08&lt;/span&gt;:94:EF:5E:AE:72
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;inet&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;addr:192.168.10.20&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Bcast:192.168.10.255&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Mask:255.255.255.0
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;inet6&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;addr:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;fe80::a94:efff:fe5e:ae72/64&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Scope:Link
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;UP&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;BROADCAST&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;RUNNING&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;MASTER&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;MULTICAST&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;MTU:1500&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Metric:1
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;RX&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;packets:108809&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;errors:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;dropped:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;overruns:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;frame:0
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;TX&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;packets:84207&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;errors:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;dropped:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;overruns:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;carrier:0
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;collisions:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;txqueuelen:0
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;RX&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bytes:8471111&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;8&lt;/span&gt;.0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;MiB&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;TX&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bytes:6322341&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;6&lt;/span&gt;.0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;MiB&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;

eth0&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;Link&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;encap:Ethernet&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;HWaddr&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;08&lt;/span&gt;:94:EF:5E:AE:72
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;UP&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;BROADCAST&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;RUNNING&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;SLAVE&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;MULTICAST&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;MTU:1500&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Metric:1
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;RX&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;packets:38051&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;errors:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;dropped:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;overruns:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;frame:0
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;TX&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;packets:14301&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;errors:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;dropped:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;overruns:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;carrier:0
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;collisions:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;txqueuelen:1000
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;RX&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bytes:2869726&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;.7&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;MiB&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;TX&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bytes:944276&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;922&lt;/span&gt;.1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;KiB&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;Interrupt:16

eth1&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;Link&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;encap:Ethernet&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;HWaddr&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;08&lt;/span&gt;:94:EF:5E:AE:72
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;UP&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;BROADCAST&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;RUNNING&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;SLAVE&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;MULTICAST&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;MTU:1500&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Metric:1
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;RX&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;packets:69158&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;errors:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;dropped:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;overruns:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;frame:0
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;TX&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;packets:68615&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;errors:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;dropped:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;overruns:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;carrier:0
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;collisions:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;txqueuelen:1000
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;RX&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bytes:5469647&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;5&lt;/span&gt;.2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;MiB&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;TX&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bytes:5279012&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;5&lt;/span&gt;.0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;MiB&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;Interrupt:17

eth2&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;Link&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;encap:Ethernet&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;HWaddr&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;08&lt;/span&gt;:94:EF:5E:AE:74
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;BROADCAST&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;MULTICAST&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;MTU:1500&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Metric:1
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;RX&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;packets:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;errors:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;dropped:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;overruns:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;frame:0
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;TX&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;packets:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;errors:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;dropped:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;overruns:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;carrier:0
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;collisions:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;txqueuelen:1000
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;RX&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bytes:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;.0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;b&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;TX&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bytes:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;.0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;b&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;Interrupt:16

eth3&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;Link&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;encap:Ethernet&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;HWaddr&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;08&lt;/span&gt;:94:EF:5E:AE:75
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;BROADCAST&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;MULTICAST&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;MTU:1500&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Metric:1
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;RX&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;packets:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;errors:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;dropped:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;overruns:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;frame:0
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;TX&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;packets:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;errors:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;dropped:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;overruns:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;carrier:0
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;collisions:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;txqueuelen:1000
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;RX&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bytes:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;.0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;b&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;TX&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bytes:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;.0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;b&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;Interrupt:17

lo&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;Link&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;encap:Local&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Loopback
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;inet&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;addr:127.0.0.1&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Mask:255.0.0.0
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;inet6&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;addr:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;::1/128&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Scope:Host
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;UP&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;LOOPBACK&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;RUNNING&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;MTU:65536&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Metric:1
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;RX&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;packets:26&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;errors:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;dropped:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;overruns:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;frame:0
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;TX&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;packets:26&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;errors:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;dropped:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;overruns:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;carrier:0
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;collisions:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;txqueuelen:0
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;RX&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bytes:1983&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.9&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;KiB&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;TX&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bytes:1983&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.9&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;KiB&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;

usb0&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;Link&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;encap:Ethernet&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;HWaddr&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;0A:94:EF:5E:AE:79
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;BROADCAST&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;MULTICAST&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;MTU:1500&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Metric:1
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;RX&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;packets:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;errors:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;dropped:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;overruns:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;frame:0
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;TX&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;packets:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;errors:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;dropped:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;overruns:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;carrier:0
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;collisions:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;txqueuelen:1000
&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;RX&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bytes:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;.0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;b&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;TX&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bytes:0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;.0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;b&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;在查看 &lt;code&gt;/etc/udev/rules.d/70-persistent-net.rules&lt;/code&gt;  文件，发现 eth0、eth1、eth2、eth3 网卡及其 mac 地址信息都有了：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@kevin&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# cat /etc/udev/rules.d/70-persistent-net.rules&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# This file was automatically generated by the /lib/udev/write_net_rules&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# program, run by the persistent-net-generator.rules rules file.&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;#&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# You can modify it, as long as you keep each rule on a single&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# line, and change only the value of the NAME= key.&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# PCI device 0x14e4:0x1657 (tg3)&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;SUBSYSTEM&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;net&amp;quot;&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;ACTION&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;add&amp;quot;&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;DRIVERS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;?*&amp;quot;&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ATTR&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;address&lt;span class=&#34;o&#34;&gt;}==&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;08:94:ef:5e:ae:75&amp;quot;&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ATTR&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;type&lt;span class=&#34;o&#34;&gt;}==&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;1&amp;quot;&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;KERNEL&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;eth*&amp;quot;&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;NAME&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;eth3&amp;quot;&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# PCI device 0x14e4:0x1657 (tg3)&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;SUBSYSTEM&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;net&amp;quot;&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;ACTION&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;add&amp;quot;&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;DRIVERS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;?*&amp;quot;&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ATTR&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;address&lt;span class=&#34;o&#34;&gt;}==&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;08:94:ef:5e:ae:72&amp;quot;&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ATTR&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;type&lt;span class=&#34;o&#34;&gt;}==&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;1&amp;quot;&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;KERNEL&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;eth*&amp;quot;&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;NAME&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;eth0&amp;quot;&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# PCI device 0x14e4:0x1657 (tg3)&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;SUBSYSTEM&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;net&amp;quot;&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;ACTION&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;add&amp;quot;&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;DRIVERS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;?*&amp;quot;&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ATTR&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;address&lt;span class=&#34;o&#34;&gt;}==&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;08:94:ef:5e:ae:73&amp;quot;&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ATTR&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;type&lt;span class=&#34;o&#34;&gt;}==&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;1&amp;quot;&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;KERNEL&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;eth*&amp;quot;&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;NAME&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;eth1&amp;quot;&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# PCI device 0x14e4:0x1657 (tg3)&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;SUBSYSTEM&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;net&amp;quot;&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;ACTION&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;add&amp;quot;&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;DRIVERS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;?*&amp;quot;&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ATTR&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;address&lt;span class=&#34;o&#34;&gt;}==&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;08:94:ef:5e:ae:74&amp;quot;&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ATTR&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;type&lt;span class=&#34;o&#34;&gt;}==&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;1&amp;quot;&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;KERNEL&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;eth*&amp;quot;&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;NAME&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;eth2&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;接着尝试 &lt;code&gt;ping&lt;/code&gt;  其他机器：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@kevin&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# ping 192.168.10.23&lt;/span&gt;
PING&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;192&lt;/span&gt;.168.10.23&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;192&lt;/span&gt;.168.10.23&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;56&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;84&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bytes&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;data.
&lt;span class=&#34;m&#34;&gt;64&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bytes&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;192&lt;/span&gt;.168.10.23:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;icmp_seq&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;ttl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;64&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;time&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;.030&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ms
&lt;span class=&#34;m&#34;&gt;64&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bytes&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;192&lt;/span&gt;.168.10.23:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;icmp_seq&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;ttl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;64&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;time&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;.016&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ms
&lt;span class=&#34;m&#34;&gt;64&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bytes&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;192&lt;/span&gt;.168.10.23:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;icmp_seq&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;ttl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;64&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;time&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;.016&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ms
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;如果 &lt;code&gt;ping&lt;/code&gt; 不通的话，多执行下面命令：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@kevin&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# modprobe bonding&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&#34;admonition note&#34;&gt;
&lt;p class=&#34;admonition-title&#34;&gt;温馨提示&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;有时候重启后还是出现以上情况，对比之前的 &lt;code&gt;/etc/udev/rules.d/70-persistent-net.rules&lt;/code&gt; 文件，新的文件 mac 地址和 name 已经改变，name=eth0 和之前 name=em1 的名字不同！&lt;/strong&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id=&#34;4-后话&#34;&gt;4. 后话&lt;a class=&#34;headerlink&#34; href=&#34;#4-后话&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;如果你的服务器有 4 个网卡，重启后对比之前的 &lt;code&gt;/etc/udev/rules.d/70-persistent-net.rules&lt;/code&gt; 文件，发现新文件 mac 地址和 name 已经改变，但 name 变成了 name=eth4，name=eth5，name=eth6，name=eth7，这也是正常的。使用 &lt;code&gt;ifconfig -a&lt;/code&gt; 命令也是同样的道理。&lt;/p&gt;
&lt;p&gt;此外，如果你在 &lt;code&gt;/etc/sysconfig/network-scripts/&lt;/code&gt; 中分别使用 ifcfg-eth0、ifcfg-eth1、ifcfg-eth2、ifcfg-eth3 对四个网卡进行 IP、网关等做了绑定，你需要：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;分别把这四个文件名改为 ifcfg-eth4、ifcfg-eth5、ifcfg-eth6、ifcfg-eth7，并把其中的 MAC 地址 (HWADDR) 改为对应的新 MAC 地址；&lt;/li&gt;
&lt;li&gt;或者，把 &lt;code&gt;/etc/udev/rules.d/70-persistent-net.rules&lt;/code&gt; 文件中的 name 分别改成 name=eth0，name=eth1，name=eth2，name=eth3，同时修改 ifcfg-eth0、ifcfg-eth1、ifcfg-eth2、ifcfg-eth3 文件中对应的 MAC 地址(HWADDR)；&lt;/li&gt;
&lt;li&gt;重启网络服务。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;5-参考资料&#34;&gt;5. 参考资料&lt;a class=&#34;headerlink&#34; href=&#34;#5-参考资料&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;散尽浮华，《&lt;a href=&#34;https://www.cnblogs.com/kevingrace/p/8524664.html&#34;&gt;Linux 服务器更换主板后，网卡识别失败的处理方法&lt;/a&gt;》，博客园&lt;/li&gt;
&lt;/ul&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%85%8D%E7%BD%AE%E4%BD%BF%E7%94%A8/2019-12-03-mac-eth0/</link>
      <pubDate>Tue, 03 Dec 2019 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%85%8D%E7%BD%AE%E4%BD%BF%E7%94%A8/2019-12-03-mac-eth0/</guid>
      
    </item>
    
    <item>
      <title>为什么 Biopython 的在线 BLAST 这么慢</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2019-12-03&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2019-12-03T00:00:00&#39;&gt;2019-12-03&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2023-07-30&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2023-07-30T09:24:23&#39;&gt;2023-07-30&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;用过网页版本 BLAST 的童鞋都会发现，提交的序列比对往往在几分钟，甚至几十秒就可以得到比对的结果；而通过调用 API 却要花费几十分钟或者更长的时间！这到底是为什么呢？
&lt;img alt=&#34;ncbi_blast.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fm0tIZZDylBAvcBlSTvd_01Oh-yA.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;ncbiwww-基本用法&#34;&gt;NCBIWWW 基本用法&lt;a class=&#34;headerlink&#34; href=&#34;#ncbiwww-基本用法&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;首先，我们来看一下提供了基于 API 在线比对的  &lt;code&gt;Biopython&lt;/code&gt; 模块。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Biopython&lt;/code&gt; 中的 BLAST 提供了  over the Internet 和 locally 两种选择：&lt;code&gt;Bio.Blast.NCBIWWW&lt;/code&gt; 主要是基于 NCBI BLAST API 用于在线比对；&lt;code&gt;Bio.Blast.Applications&lt;/code&gt; 模块则是调用本地安装好的 BLAST 程序以及数据库执行比对。在这里我们来重点看一下  &lt;code&gt;Bio.Blast.NCBIWWW&lt;/code&gt; 。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Bio.Blast.NCBIWWW&lt;/code&gt; 模块中主要是通过 &lt;code&gt;qblast()&lt;/code&gt; 函数来调用 BLAST 的在线版本。它具有三个非可选参数：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;第一个参数是用于搜索的 blast 程序，为小写字符串。目前，&lt;code&gt;qblast&lt;/code&gt;（biopython==1.7.4）仅适用于 blastn，blastp，blastx，tblast 和 tblastx。&lt;/li&gt;
&lt;li&gt;第二个参数指定要搜索的数据库。关于这个选项，在  &lt;a href=&#34;https://ftp.ncbi.nlm.nih.gov/pub/factsheets/HowTo_BLASTGuide.pdf&#34;&gt;NCBI Guide to BLAST&lt;/a&gt; 上有详细的描述。&lt;/li&gt;
&lt;li&gt;第三个参数是包含查询序列的字符串。这可以是序列本身，也可以是 fasta 格式的序列，或者是诸如 GI 号之类的标识符。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;qblast&lt;/code&gt; 函数还接受许多其他选项参数，这些参数基本上类似于我们可以在 BLAST 网页上设置的不同参数。我们在这里只重点介绍其中一些：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;参数 &lt;code&gt;url_base&lt;/code&gt; 是设置用于在 Internet 上运行 BLAST 的基本 URL。默认情况下，它连接到 NCBI (即 &lt;code&gt;url_base=&#39;&amp;lt;https://blast.ncbi.nlm.nih.gov/Blast.cgi&#39;&lt;/code&gt;)，但是可以使用它连接到云端运行的 NCBI BLAST 实例。更多详细信息请参阅 qblast 功能的文档。&lt;/li&gt;
&lt;li&gt;qblast 函数可以返回各种格式的 BLAST 结果，您可以使用可选的&lt;code&gt;format_type&lt;/code&gt; 关键字进行选择：&lt;strong&gt;&amp;ldquo;HTML&amp;rdquo;&lt;/strong&gt;，&lt;strong&gt;&amp;ldquo;Text&amp;rdquo;&lt;/strong&gt;，&lt;strong&gt;&amp;ldquo;ASN.1&amp;rdquo;&lt;/strong&gt; 或 &lt;strong&gt;&amp;ldquo;XML&amp;rdquo;&lt;/strong&gt;。 默认值为 &lt;strong&gt;&amp;ldquo;XML&amp;rdquo;&lt;/strong&gt;，因为这是解析器期望的格式。&lt;/li&gt;
&lt;li&gt;参数 &lt;code&gt;expect&lt;/code&gt; 用于设置期望值或 e-value  阈值。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;有关可选的 BLAST 参数的更多信息，请参考 NCBI 自己的文档或 Biopython 内置的文档：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;Bio.Blast&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;NCBIWWW&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;help&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;NCBIWWW&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;qblast&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;Help&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;qblast&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;module&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Bio&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Blast&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;NCBIWWW&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;qblast&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;program&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;database&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sequence&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;url_base&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;https://blast.ncbi.nlm.nih.gov/Blast.cgi&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;auto_format&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;composition_based_statistics&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;db_genetic_code&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;endpoints&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;entrez_query&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;(none)&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;expect&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;10.0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;filter&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gapcosts&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;genetic_code&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hitlist_size&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;50&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i_thresh&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;layout&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;lcase_mask&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;matrix_name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;nucl_penalty&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;nucl_reward&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;other_advanced&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;perc_ident&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;phi_pattern&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;query_file&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;query_believe_defline&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;query_from&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;query_to&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;searchsp_eff&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;service&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;threshold&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ungapped_alignment&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;word_size&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;alignments&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;500&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;alignment_view&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;descriptions&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;500&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;entrez_links_new_window&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;expect_low&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;expect_high&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;format_entrez_query&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;format_object&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;format_type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;XML&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ncbi_gi&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;results_file&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;show_overview&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;megablast&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;template_type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;template_length&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
    &lt;span class=&#34;n&#34;&gt;BLAST&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;search&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;using&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;NCBI&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;s QBLAST server or a cloud service provider.&lt;/span&gt;

    &lt;span class=&#34;n&#34;&gt;Supports&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;all&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;parameters&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;of&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;the&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;qblast&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;API&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Put&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;and&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Get&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;

    &lt;span class=&#34;n&#34;&gt;Please&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;note&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;that&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLAST&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;the&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cloud&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;supports&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;the&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;NCBI&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;BLAST&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Common&lt;/span&gt;
    &lt;span class=&#34;n&#34;&gt;URL&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;API&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;http&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;//&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ncbi&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;github&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;io&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;blast&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cloud&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dev&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;api&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;html&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;To&lt;/span&gt;
    &lt;span class=&#34;n&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;this&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;feature&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;please&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;url_base&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;to&lt;/span&gt;
    &lt;span class=&#34;s1&#34;&gt;&amp;#39;http://host.my.cloud.service.provider.com/cgi-bin/blast.cgi&amp;#39;&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;and&lt;/span&gt;
    &lt;span class=&#34;n&#34;&gt;format_object&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Alignment&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;For&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;more&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;details&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;please&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;see&lt;/span&gt;
    &lt;span class=&#34;n&#34;&gt;https&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;//&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;blast&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ncbi&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;nlm&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;nih&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;gov&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Blast&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cgi&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;?&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;PAGE_TYPE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;BlastDocs&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;DOC_TYPE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;CloudBlast&lt;/span&gt;

    &lt;span class=&#34;n&#34;&gt;Some&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;useful&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;parameters&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;

     &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;program&lt;/span&gt;        &lt;span class=&#34;n&#34;&gt;blastn&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;blastp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;blastx&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;tblastn&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;or&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;tblastx&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lower&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;case&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
     &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;database&lt;/span&gt;       &lt;span class=&#34;n&#34;&gt;Which&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;database&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;to&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;search&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;against&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;nr&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;
     &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sequence&lt;/span&gt;       &lt;span class=&#34;n&#34;&gt;The&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sequence&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;to&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;search&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;
     &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ncbi_gi&lt;/span&gt;        &lt;span class=&#34;n&#34;&gt;TRUE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;FALSE&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;whether&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;to&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;give&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;gi&amp;#39;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;identifier&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;
     &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;descriptions&lt;/span&gt;   &lt;span class=&#34;n&#34;&gt;Number&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;of&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;descriptions&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;to&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;show&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;Def&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;500.&lt;/span&gt;
     &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;alignments&lt;/span&gt;     &lt;span class=&#34;n&#34;&gt;Number&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;of&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;alignments&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;to&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;show&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;Def&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;500.&lt;/span&gt;
     &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;expect&lt;/span&gt;         &lt;span class=&#34;n&#34;&gt;An&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;expect&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;value&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cutoff&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;Def&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;10.0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;
     &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;matrix_name&lt;/span&gt;    &lt;span class=&#34;n&#34;&gt;Specify&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;an&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;alt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;matrix&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;PAM30&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;PAM70&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLOSUM80&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLOSUM45&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;
     &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;filter&lt;/span&gt;         &lt;span class=&#34;s2&#34;&gt;&amp;quot;none&amp;quot;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;turns&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;off&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;filtering&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;Default&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;no&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;filtering&lt;/span&gt;
     &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;format_type&lt;/span&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;quot;HTML&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;Text&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;ASN.1&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;or&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;XML&amp;quot;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;Def&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;XML&amp;quot;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;
     &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;entrez_query&lt;/span&gt;   &lt;span class=&#34;n&#34;&gt;Entrez&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;query&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;to&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;limit&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Blast&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;search&lt;/span&gt;
     &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hitlist_size&lt;/span&gt;   &lt;span class=&#34;n&#34;&gt;Number&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;of&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hits&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;to&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Default&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;50&lt;/span&gt;
     &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;megablast&lt;/span&gt;      &lt;span class=&#34;n&#34;&gt;TRUE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;FALSE&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;whether&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;to&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MEga&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BLAST&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;algorithm&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;blastn&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;only&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
     &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;service&lt;/span&gt;        &lt;span class=&#34;n&#34;&gt;plain&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;psi&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;phi&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;rpsblast&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;megablast&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lower&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;case&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

    &lt;span class=&#34;n&#34;&gt;This&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;does&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;no&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;checking&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;of&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;the&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;validity&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;of&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;the&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;parameters&lt;/span&gt;
    &lt;span class=&#34;ow&#34;&gt;and&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;passes&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;the&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;values&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;to&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;the&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;server&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;is&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;More&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;help&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;is&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;available&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;at&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
    &lt;span class=&#34;n&#34;&gt;https&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;//&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ncbi&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;github&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;io&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;blast&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cloud&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dev&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;api&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;html&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;请注意，NCBI BLAST 网站上的默认设置与 qblast 上的默认设置不太相同。如果获得不同的结果，则需要检查参数（例如，&lt;code&gt;e-value&lt;/code&gt;  值和 &lt;code&gt;gap&lt;/code&gt;  值）。&lt;/p&gt;
&lt;p&gt;例如，如果您要使用 BLASTN 在核苷酸数据库（nt）中搜索核苷酸序列，并且知道查询序列的 GI 号，则可以使用：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;Bio.Blast&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;NCBIWWW&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;result_handle&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;NCBIWWW&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;qblast&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;blastn&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;nt&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;8332116&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;另外，如果我们的查询序列已经存在于 FASTA 格式的文件中，则只需打开文件并以字符串形式读取此记录，然后将其用作查询参数：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;Bio.Blast&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;NCBIWWW&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;fasta_string&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;open&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;m_cold.fasta&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;read&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;result_handle&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;NCBIWWW&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;qblast&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;blastn&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;nt&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;fasta_string&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;我们还可以将 FASTA 文件作为 &lt;code&gt;SeqRecord&lt;/code&gt; 对象进行读取，然后仅提供序列本身进行比对：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;Bio.Blast&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;NCBIWWW&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;Bio&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;SeqIO&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;record&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;SeqIO&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;read&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;m_cold.fasta&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;format&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;fasta&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;result_handle&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;NCBIWWW&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;qblast&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;blastn&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;nt&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;record&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;seq&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;仅提供序列意味着 BLAST 将自动为您的序列分配一个标识符。您可能更喜欢使用 &lt;code&gt;SeqRecord&lt;/code&gt; 对象的 &lt;code&gt;format&lt;/code&gt; 方法来制作 FASTA 字符串（其中将包含现有标识符）：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;Bio.Blast&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;NCBIWWW&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;Bio&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;SeqIO&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;record&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;SeqIO&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;read&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;m_cold.fasta&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;format&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;fasta&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;result_handle&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;NCBIWWW&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;qblast&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;blastn&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;nt&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;record&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;format&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;fasta&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;无论给 &lt;code&gt;qblast()&lt;/code&gt; 函数提供什么参数，都应在 &lt;code&gt;handle&lt;/code&gt; 对象（默认为 XML 格式）中返回结果。下一步是将 XML 输出解析为表示搜索结果的 Python 对象，但是您可能想先保存输出文件的本地副本。在调试从 BLAST 结果中提取信息的代码时，我发现这特别有用（因为重新运行在线搜索速度很慢，并且浪费了 NCBI 计算机时间）。&lt;/p&gt;
&lt;p&gt;我们需要小心一点，因为我们只能使用 &lt;code&gt;result_handle.read()&lt;/code&gt; 读取一次 BLAST 输出——再次调用 &lt;code&gt;result_handle.read()&lt;/code&gt; 会返回一个空字符串。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;with&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;open&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;my_blast.xml&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;w&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;out_handle&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;...&lt;/span&gt;     &lt;span class=&#34;n&#34;&gt;out_handle&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;write&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;result_handle&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;read&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;...&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;result_handle&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;close&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;完成上面的操作后，结果将保存在文件 my_blast.xml 中，并且原始句柄已提取了所有数据（因此我们将其关闭了）。 但是，BLAST 解析器的解析功能采用了类似于文件句柄的对象，因此我们可以打开保存的文件进行输入：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;result_handle&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;open&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;my_blast.xml&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;现在我们已经将 BLAST 结果重新放回了句柄中，下一步，如果我们准备对它们进行处理，我们可以参考 Biopython 中 &lt;a href=&#34;http://biopython.org/DIST/docs/tutorial/Tutorial.html#sec:parsing-blast&#34;&gt;Parsing BLAST output&lt;/a&gt; 部分的内容，这里不再说明。&lt;/p&gt;
&lt;h2 id=&#34;ncbiwww-实现&#34;&gt;NCBIWWW 实现&lt;a class=&#34;headerlink&#34; href=&#34;#ncbiwww-实现&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;在了解  NCBIWWW 的实现前，我们先来看一下 NCBI BLAST 对于 API 使用 &lt;a href=&#34;https://blast.ncbi.nlm.nih.gov/Blast.cgi?CMD=Web&amp;amp;PAGE_TYPE=BlastDocs&amp;amp;DOC_TYPE=DeveloperInfo&#34;&gt;Overview — BLASTHelp  documentation&lt;/a&gt; 的一些说明：&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;biopython.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FqBJQE8WrsY1EPlHMljkXOyCmKih.png&#34; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;NCBI BLAST 服务器是共享资源。为了确保整个社区都能使用该服务，他们可能会限制某些高流量用户的搜索。&lt;/li&gt;
&lt;li&gt;他们会将在 24 小时内提交 100 次以上搜索的用户的搜索移到较慢的队列中，或者在极端情况下将阻止请求。&lt;/li&gt;
&lt;li&gt;NCBI BLAST 优先考虑互动的用户，通过网络浏览器的 NCBI 网页的交互式用户不会遇到以上的问题。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;对于 API 的使用准则：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;与服务器联系的频率不要超过每 10 秒一次。&lt;/li&gt;
&lt;li&gt;不要轮询每一个 RID（Request ID） 多于一分钟一次。&lt;/li&gt;
&lt;li&gt;使用 URL 参数电子邮件和工具，以便 NCBI 在出现问题时可以与您联系。&lt;/li&gt;
&lt;li&gt;如果将提交超过 50 个搜索，则在周末或东部时间东部时间晚上 9 点至凌晨 5 点之间运行脚本。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;我们再来看一下  NCBIWWW 在源码层面的处理：
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FpX7eRpUzLiJEZ2wRJ41evQhiYmj.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;可以看到  NCBIWWW 从 20 秒的延迟开始，然后开始每隔一分钟执行一次 request  轮询，直至任务完成或者任务出现异常。&lt;/p&gt;
&lt;p&gt;所以，总的来说，NCBI BLAST API 的使用准则，加上  NCBI BLAST 对用户请求的任务队列处理，甚至  NCBI BLAST 服务器共享资源的限制，以及总用户请求数，这些都可能成为  &lt;code&gt;NCBIWWW.qblast()&lt;/code&gt; 异常耗时的原因，这其中还不算个人服务器的网络影响。综上种种原因，如果考虑使用  &lt;code&gt;NCBIWWW.qblast()&lt;/code&gt;  执行频繁的序列在线批处理，或许不是一个好的解决方案。&lt;/p&gt;
&lt;p&gt;最后，基于 Python 的 NCBI BLAST 在线批处理，如果你有更好的方法，欢迎留言交流。&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E7%94%9F%E7%89%A9%E4%BF%A1%E6%81%AF/%E6%AF%94%E5%AF%B9/2019-12-03-ygnigy/</link>
      <pubDate>Tue, 03 Dec 2019 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E7%94%9F%E7%89%A9%E4%BF%A1%E6%81%AF/%E6%AF%94%E5%AF%B9/2019-12-03-ygnigy/</guid>
      
    </item>
    
    <item>
      <title>CentOS 7 下编译安装 Nginx</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2019-11-18&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2019-11-18T00:00:00&#39;&gt;2019-11-18&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-06-25&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-06-25T10:38:54&#39;&gt;2021-06-25&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id=&#34;一准备工作&#34;&gt;一、准备工作&lt;a class=&#34;headerlink&#34; href=&#34;#一准备工作&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;为了编译  &lt;code&gt;Nginx&lt;/code&gt;  源代码，需要标准的  &lt;code&gt;GCC&lt;/code&gt;  编译器。&lt;code&gt;GCC&lt;/code&gt;  的全称为  &lt;code&gt;GNU Compiler Collection&lt;/code&gt;，其由  &lt;code&gt;GNU&lt;/code&gt;  开发，并以  &lt;code&gt;GPL&lt;/code&gt;  及  &lt;code&gt;LGPL&lt;/code&gt;  许可证发行，是自由的类  &lt;code&gt;UNIX&lt;/code&gt;  即苹果电脑  &lt;code&gt;Mac OSX&lt;/code&gt;  操作系统的标准编译器。因为  &lt;code&gt;GCC&lt;/code&gt;  原本只能处理  &lt;code&gt;C&lt;/code&gt;  语言，所以原名为  &lt;code&gt;GNU C&lt;/code&gt;  语言编译器，后来得到快速扩展，可处理  &lt;code&gt;C++&lt;/code&gt;、&lt;code&gt;Fortran&lt;/code&gt;、&lt;code&gt;Pascal&lt;/code&gt;、 &lt;code&gt;Objective-C&lt;/code&gt;、&lt;code&gt;Java&lt;/code&gt;  以及  &lt;code&gt;Ada&lt;/code&gt;  等其他语言。&lt;/p&gt;
&lt;p&gt;除此之外，还需要  &lt;code&gt;Automake&lt;/code&gt;  工具，以完成自动创建  &lt;code&gt;Makefile&lt;/code&gt;  文件的工作。由于  &lt;code&gt;Nginx&lt;/code&gt;  的一些模块需要依赖其他第三方库，通常有  &lt;code&gt;pcre&lt;/code&gt;  库(支持  &lt;code&gt;rewrite&lt;/code&gt;  模块)、&lt;code&gt;zlib&lt;/code&gt;  库(支持  &lt;code&gt;gzip&lt;/code&gt;  模块)和  &lt;code&gt;openssl&lt;/code&gt;  库(支持  &lt;code&gt;ssl&lt;/code&gt;  模块)等。&lt;/p&gt;
&lt;h4 id=&#34;11-安装第三方库&#34;&gt;1.1 安装第三方库&lt;a class=&#34;headerlink&#34; href=&#34;#11-安装第三方库&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;如果已经安装过以上软件，则可以略过；如果没有，可以使用一下命令进行在线安装：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;yum&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-y&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;gcc&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;gcc-c++&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;automake&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pcre&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pcre-devel&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;zlib&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;zlib-devel&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssl-devel
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;二执行安装&#34;&gt;二、执行安装&lt;a class=&#34;headerlink&#34; href=&#34;#二执行安装&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&#34;21-创建-nginx-用户&#34;&gt;2.1 创建 Nginx 用户&lt;a class=&#34;headerlink&#34; href=&#34;#21-创建-nginx-用户&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;groupadd&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;nginx
useradd&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;nginx&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-g&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;nginx&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-s&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/sbin/nologin&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-M
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;22-下载解压&#34;&gt;2.2 下载解压&lt;a class=&#34;headerlink&#34; href=&#34;#22-下载解压&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Nginx 的下载地址在：&lt;a href=&#34;http://nginx.org/en/download.html&#34;&gt;http://nginx.org/en/download.html&lt;/a&gt;，我们推荐下载  Stable 的稳定版本。
&lt;img alt=&#34;nginx-download.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fk-UCu4rvnkkZA3nRizwZ-CJiSfX.png&#34; /&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;wget&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;http://nginx.org/download/nginx-1.18.0.tar.gz
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tar&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;zvxf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;nginx-1.18.0.tar.gz
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;nginx-1.18.0
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ll
total&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;752&lt;/span&gt;
drwxr-xr-x.&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;6&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;root&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;root&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4096&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Nov&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;18&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;10&lt;/span&gt;:54&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;auto
-rw-r--r--.&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;root&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;root&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;296463&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Aug&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;13&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;20&lt;/span&gt;:51&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;CHANGES
-rw-r--r--.&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;root&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;root&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;452171&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Aug&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;13&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;20&lt;/span&gt;:51&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;CHANGES.ru
drwxr-xr-x.&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;root&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;root&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;168&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Nov&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;18&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;10&lt;/span&gt;:54&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conf
-rwxr-xr-x.&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;root&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;root&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2502&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Aug&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;13&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;20&lt;/span&gt;:51&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;configure
drwxr-xr-x.&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;root&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;root&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;72&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Nov&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;18&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;10&lt;/span&gt;:54&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;contrib
drwxr-xr-x.&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;root&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;root&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;40&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Nov&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;18&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;10&lt;/span&gt;:54&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;html
-rw-r--r--.&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;root&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;root&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1397&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Aug&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;13&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;20&lt;/span&gt;:51&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;LICENSE
drwxr-xr-x.&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;root&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;root&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;21&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Nov&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;18&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;10&lt;/span&gt;:54&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;man
-rw-r--r--.&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;root&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;root&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;49&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Aug&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;13&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;20&lt;/span&gt;:51&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;README
drwxr-xr-x.&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;9&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;root&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;root&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;91&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Nov&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;18&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;10&lt;/span&gt;:54&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;src
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;这里对解压完成后的部分目录和文件做个简单的介绍：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;src 该目录存放了&lt;code&gt;Nginx&lt;/code&gt;的所有源码；&lt;/li&gt;
&lt;li&gt;man 该目录存放了&lt;code&gt;Nginx&lt;/code&gt;的帮助文档；&lt;/li&gt;
&lt;li&gt;html 该目录存放了两个&lt;code&gt;html&lt;/code&gt;文件。这两个文件与&lt;code&gt;Nginx&lt;/code&gt;服务器的运行相关，这两个文件的作用会在下文给出，这里不做赘述；&lt;/li&gt;
&lt;li&gt;conf 该目录存放的是&lt;code&gt;Nginx&lt;/code&gt;服务器的配置文件，包含&lt;code&gt;Nginx&lt;/code&gt;服务器的基本配置文件；&lt;/li&gt;
&lt;li&gt;auto 该目录存放了大量脚本文件，和&lt;code&gt;configure&lt;/code&gt;脚本程序有关；&lt;/li&gt;
&lt;li&gt;configure 该文件是&lt;code&gt;Nginx&lt;/code&gt;软件的自动脚本程序。运行&lt;code&gt;configure&lt;/code&gt;脚本一般会完成两项工作：一是检查环境，根据环境检查结果生成&lt;code&gt;C&lt;/code&gt;代码；二是生成编译代码需要的&lt;code&gt;Makefile&lt;/code&gt;文件。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;23-编译安装&#34;&gt;2.3 编译安装&lt;a class=&#34;headerlink&#34; href=&#34;#23-编译安装&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;在介绍生成 Makefile 文件操作之前，先介绍一下 &lt;code&gt;configure&lt;/code&gt;  脚本支持的常用选项：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;选项&lt;/th&gt;
&lt;th&gt;说明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&amp;ndash;prefix=path&lt;/td&gt;
&lt;td&gt;定义一个目录，存放服务器上的文件 ，也就是 nginx 的安装目录。默认使用 /usr/local/nginx。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;ndash;sbin-path=path&lt;/td&gt;
&lt;td&gt;设置 nginx 的可执行文件的路径，默认为 prefix/sbin/nginx.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;ndash;conf-path=path&lt;/td&gt;
&lt;td&gt;设置在 nginx.conf 配置文件的路径。nginx 允许使用不同的配置文件启动，通过命令行中的-c 选项。默认为 prefix/conf/nginx.conf.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;ndash;pid-path=path&lt;/td&gt;
&lt;td&gt;设置 nginx.pid 文件，将存储的主进程的进程号。安装完成后，可以随时改变的文件名 ， 在 nginx.conf 配置文件中使用 PID 指令。默认情况下，文件名 为 prefix/logs/nginx.pid.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;ndash;error-log-path=path&lt;/td&gt;
&lt;td&gt;设置主错误，警告，和诊断文件的名称。安装完成后，可以随时改变的文件名 ，在 nginx.conf 配置文件中 使用 的 error_log 指令。默认情况下，文件名 为 prefix/logs/error.log.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;ndash;http-log-path=path&lt;/td&gt;
&lt;td&gt;设置主请求的 HTTP 服务器的日志文件的名称。安装完成后，可以随时改变的文件名 ，在 nginx.conf 配置文件中 使用 的 access_log 指令。默认情况下，文件名 为 prefix/logs/access.log.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;ndash;user=name&lt;/td&gt;
&lt;td&gt;设置 nginx 工作进程的用户。安装完成后，可以随时更改的名称在 nginx.conf 配置文件中 使用的 user 指令。默认的用户名是 nobody。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;ndash;group=name&lt;/td&gt;
&lt;td&gt;设置 nginx 工作进程的用户组。安装完成后，可以随时更改的名称在 nginx.conf 配置文件中 使用的 user 指令。默认的为非特权用户。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;ndash;with-select_module&lt;/td&gt;
&lt;td&gt;启用或禁用构建一个模块来允许服务器使用 select()方法。该模块将自动建立，如果平台不支持的 kqueue，epoll，rtsig 或/dev/poll。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;ndash;without-select_module&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;ndash;with-poll_module&lt;/td&gt;
&lt;td&gt;启用或禁用构建一个模块来允许服务器使用 poll()方法。该模块将自动建立，如果平台不支持的 kqueue，epoll，rtsig 或/dev/poll。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;ndash;without-poll_module&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;ndash;without-http_gzip_module&lt;/td&gt;
&lt;td&gt;不编译压缩的 HTTP 服务器的响应模块。编译并运行此模块需要 zlib 库。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;ndash;without-http_rewrite_module&lt;/td&gt;
&lt;td&gt;不编译重写模块。编译并运行此模块需要 PCRE 库支持。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;ndash;without-http_proxy_module&lt;/td&gt;
&lt;td&gt;不编译 http_proxy 模块。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;ndash;with-http_ssl_module&lt;/td&gt;
&lt;td&gt;使用 https 协议模块。默认情况下，该模块没有被构建。建立并运行此模块的 OpenSSL 库是必需的。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;ndash;with-pcre=path&lt;/td&gt;
&lt;td&gt;设置 PCRE 库的源码路径。PCRE 库的源码（版本 4.4 - 8.30）需要从 PCRE 网站下载并解压。其余的工作是 Nginx 的./ configure 和 make 来完成。正则表达式使用在 location 指令和 ngx_http_rewrite_module 模块中。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;ndash;with-pcre-jit&lt;/td&gt;
&lt;td&gt;编译 PCRE 包含“just-in-time compilation”（1.1.12 中， pcre_jit 指令）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;ndash;with-zlib=path&lt;/td&gt;
&lt;td&gt;设置的 zlib 库的源码路径。要下载从 zlib（版本 1.1.3 - 1.2.5）的并解压。其余的工作是 Nginx 的./ configure 和 make 完成。ngx_http_gzip_module 模块需要使用 zlib 。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;ndash;with-cc-opt=parameters&lt;/td&gt;
&lt;td&gt;置额外的参数将被添加到 CFLAGS 变量。例如,当你在 FreeBSD 上使用 PCRE 库时需要使用:&amp;ndash;with-cc-opt=&amp;rdquo;-I /usr/local/include。.如需要需要增加 select()支持的文件数量:&amp;ndash;with-cc-opt=&amp;rdquo;-D FD_SETSIZE=2048&amp;rdquo;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;ndash;with-ld-opt=parameters&lt;/td&gt;
&lt;td&gt;设置附加的参数，将用于在链接期间。例如，当在 FreeBSD 下使用该系统的 PCRE 库,应指定:&amp;ndash;with-ld-opt=&amp;rdquo;-L /usr/local/lib&amp;rdquo;.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;了解了如上选项后，就可以根据实际情况使用 configure 脚本生成 Makefile 文件了。若上面的选项无法满足需求，可自行 Google 其他选项，上面介绍的只是其中的一小部分。&lt;/p&gt;
&lt;h3 id=&#34;24-生成-makefile-文件&#34;&gt;2.4 生成 Makefile 文件&lt;a class=&#34;headerlink&#34; href=&#34;#24-生成-makefile-文件&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;使用下面的命令配置并生成&lt;code&gt;Makefile&lt;/code&gt;文件：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;./configure&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/data/software/nginx-1.18.0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--with-http_ssl_module
checking&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;OS
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;+&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Linux&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;.10.0-957.el7.x86_64&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;x86_64
checking&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;C&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;compiler&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;found
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;+&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;using&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;GNU&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;C&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;compiler
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;+&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;gcc&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;version:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4&lt;/span&gt;.8.5&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;20150623&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;Red&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Hat&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4&lt;/span&gt;.8.5-39&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;GCC&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
checking&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;gcc&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-pipe&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;switch&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;found
checking&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-Wl,-E&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;switch&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;found
checking&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;gcc&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;builtin&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;atomic&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;operations&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;found
checking&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;C99&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;variadic&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;macros&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;found
checking&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;gcc&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;variadic&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;macros&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;found
checking&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;gcc&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;builtin&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;64&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bit&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;byteswap&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;found
...
...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;这里省略n行
...
checking&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;zlib&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;library&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;found
creating&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;objs/Makefile

Configuration&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;summary
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;+&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;using&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;system&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;PCRE&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;library
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;+&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;using&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;system&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;OpenSSL&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;library
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;+&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;using&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;system&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;zlib&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;library

&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;nginx&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;path&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;prefix:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;/data/software/nginx-1.18.0&amp;quot;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;nginx&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;binary&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;/data/software/nginx-1.18.0/sbin/nginx&amp;quot;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;nginx&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;modules&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;path:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;/data/software/nginx-1.18.0/modules&amp;quot;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;nginx&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;configuration&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;prefix:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;/data/software/nginx-1.18.0/conf&amp;quot;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;nginx&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;configuration&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;/data/software/nginx-1.18.0/conf/nginx.conf&amp;quot;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;nginx&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pid&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;/data/software/nginx-1.18.0/logs/nginx.pid&amp;quot;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;nginx&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;error&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;log&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;/data/software/nginx-1.18.0/logs/error.log&amp;quot;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;nginx&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;http&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;access&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;log&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;/data/software/nginx-1.18.0/logs/access.log&amp;quot;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;nginx&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;http&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;client&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;request&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;body&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;temporary&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;files:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;client_body_temp&amp;quot;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;nginx&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;http&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;proxy&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;temporary&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;files:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;proxy_temp&amp;quot;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;nginx&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;http&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;fastcgi&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;temporary&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;files:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;fastcgi_temp&amp;quot;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;nginx&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;http&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;uwsgi&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;temporary&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;files:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;uwsgi_temp&amp;quot;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;nginx&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;http&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;scgi&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;temporary&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;files:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;scgi_temp&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;--prefix&lt;/code&gt; 配置置指定了&lt;code&gt;Nginx&lt;/code&gt;的安装路径，其他的配置使用默认的配置。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;默认情况下，Nginx 的 https/ssl 协议模块是没有被构建的。需要增加 &lt;strong&gt;&amp;ndash;with-http_ssl_module&lt;/strong&gt; 建立并运行该模块的 OpenSSL 库。否则在配置 SSL 时可能会导致 &lt;strong&gt;nginx: [emerg] unknown directive &amp;ldquo;ssl&amp;rdquo;&lt;/strong&gt; 报错。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在运行过程中，&lt;code&gt;configure&lt;/code&gt; 脚本调用 &lt;code&gt;auto&lt;/code&gt; 目录中的各种脚本对系统环境及相关配置和设置进行了检查。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;24-编译安装&#34;&gt;2.4 编译安装&lt;a class=&#34;headerlink&#34; href=&#34;#24-编译安装&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;得到了 Makefile 文件后，就可以编译源码了。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;到此，我们已经安装后了一个最基本的 Nginx 服务器，其安装路径为 /data/software/nginx-1.18.0。&lt;/p&gt;
&lt;h2 id=&#34;三启动与测试&#34;&gt;三、启动与测试&lt;a class=&#34;headerlink&#34; href=&#34;#三启动与测试&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&#34;31-启动&#34;&gt;3.1 启动&lt;a class=&#34;headerlink&#34; href=&#34;#31-启动&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;使用下面的命令启动 nginx：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;./sbin/nginx
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;32-测试&#34;&gt;3.2 测试&lt;a class=&#34;headerlink&#34; href=&#34;#32-测试&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;使用下面的命令执行测试：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;curl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;localhost
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;nginx-curl-localhost.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FlzwvP17jTxavBAndazgmWoFGYQE.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;若返回类似如上的结果，证明已成功启动。其实，上面返回的是目录&lt;code&gt;/Nginx/html/&lt;/code&gt;下的&lt;code&gt;index.html&lt;/code&gt;文件，可以使用&lt;code&gt;cat /Nginx/html/index.html&lt;/code&gt;命令进行验证。&lt;/p&gt;
&lt;p&gt;若是有图形界面，在浏览器访问 &lt;a href=&#34;https://links.jianshu.com/go?to=localhost&#34;&gt;localhost&lt;/a&gt; 或者你本机的公网 ip，可以看到类似下图的页面：
&lt;img alt=&#34;welcome-to-nginx.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fg8DlX9CsT8zQEpdzOBtLnS8lMaM.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;四常用命令&#34;&gt;四、常用命令&lt;a class=&#34;headerlink&#34; href=&#34;#四常用命令&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;附上一些 nginx 的常用命令。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;nginx&lt;span class=&#34;w&#34;&gt;                   &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 启动nginx&lt;/span&gt;
nginx&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-s&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;quit&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 快速停止nginx&lt;/span&gt;
nginx&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-V&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 查看版本，以及配置文件地址&lt;/span&gt;
nginx&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-v&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 查看版本&lt;/span&gt;
nginx&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-s&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;reload&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;reopen&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;stop&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;quit&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 重新加载配置|重启|快速停止|安全关闭nginx&lt;/span&gt;
nginx&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-h&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 帮助&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;五参考资料&#34;&gt;五、参考资料&lt;a class=&#34;headerlink&#34; href=&#34;#五参考资料&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;sprinkle_liz，《&lt;a href=&#34;https://www.jianshu.com/p/2c30ab4f5478&#34;&gt;Centos 7 下编译安装 Nginx&lt;/a&gt;》，简书&lt;/li&gt;
&lt;/ol&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/WebServer/2019-11-18-centos-install-nginx/</link>
      <pubDate>Mon, 18 Nov 2019 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/WebServer/2019-11-18-centos-install-nginx/</guid>
      
    </item>
    
    <item>
      <title>OBS 录屏的一些配置与使用</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2019-11-13&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2019-11-13T00:00:00&#39;&gt;2019-11-13&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-06-25&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-06-25T10:48:25&#39;&gt;2021-06-25&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;OBS，Open Broadcaster Software（&lt;a href=&#34;https://obsproject.com/zh-cn&#34;&gt;https://obsproject.com/zh-cn&lt;/a&gt;），是一款免费且开源的用于视频录制以及直播串流的软件。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;添加**&amp;ldquo;窗口捕获&amp;rdquo;**，获取需要录屏的窗口。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fu1Ih_Vzxv7mn1ycEcpelPKQOpnK.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FrE-u1AqIImw9sj0s9Bk8y3xTq6f.png&#34; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;设置输出&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FlW10y9U0hyCVetfPOMYxZPF6S1W.png&#34; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;设置录屏的快捷方式&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FqEPx10QbSos1_a0TKdoRWqMkX9A.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;最后，开始录屏（录像）。&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/Windows/2019-11-13-obs/</link>
      <pubDate>Wed, 13 Nov 2019 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/Windows/2019-11-13-obs/</guid>
      
    </item>
    
    <item>
      <title>R 语言中的高级图像处理包</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2019-10-19&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2019-10-19T00:00:00&#39;&gt;2019-10-19&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2019-10-19&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2019-10-19T10:45:15&#39;&gt;2019-10-19&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;最新的  &lt;a href=&#34;https://cran.r-project.org/package=magick&#34;&gt;magick&lt;/a&gt;  包是为能够在 R 中更现代化、简单化高质量图像处理而进行的一次努力。该包封装了目前最强大的开源图片处理库  &lt;a href=&#34;https://www.imagemagick.org/Magick++/STL.html&#34;&gt;ImageMagick STL&lt;/a&gt; 。&lt;/p&gt;
&lt;p&gt;ImageMagick 库具有大量功能。当前版本的 Magick 公开了很多内容，但是作为第一个发行版本，文档仍然很少。本文简单的介绍了其中一些最重要的概念来帮助了解  &lt;code&gt;magick&lt;/code&gt; 。&lt;/p&gt;
&lt;h2 id=&#34;安装-magick&#34;&gt;安装  magick&lt;a class=&#34;headerlink&#34; href=&#34;#安装-magick&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;在 Windows 或者 MacOS，可以通过 CRAN 安装该软件包。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nf&#34;&gt;install.packages&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;magick&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;二进制 CRAN 软件包开箱即用，只需少量的工作，就可以使绝大多数的重要特性得以实现。使用 &lt;code&gt;magick_config&lt;/code&gt;  可以查看您的 ImageMagick 版本支持哪些功能和格式。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;library&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;magick&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Linking&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;to&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ImageMagick&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;6.9&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;9.14&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Enabled&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;features&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cairo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;freetype&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fftw&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ghostscript&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lcms&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pango&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rsvg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;webp&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Disabled&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;features&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fontconfig&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x11&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;magick&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;magick_config&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;List&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;of&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;21&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;version&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;           &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Class&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;numeric_version&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hidden&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;list&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;of&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;..&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;6&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;9&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;9&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;14&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;modules&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;           &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;logi&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;FALSE&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cairo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;             &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;logi&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;TRUE&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fontconfig&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;logi&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;FALSE&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;freetype&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;logi&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;TRUE&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fftw&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;              &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;logi&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;TRUE&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ghostscript&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;logi&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;TRUE&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;jpeg&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;              &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;logi&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;TRUE&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lcms&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;              &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;logi&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;TRUE&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;libopenjp2&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;logi&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;FALSE&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lzma&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;              &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;logi&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;TRUE&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pangocairo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;logi&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;TRUE&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pango&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;             &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;logi&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;TRUE&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;png&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;               &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;logi&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;TRUE&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rsvg&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;              &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;logi&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;TRUE&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tiff&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;              &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;logi&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;TRUE&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;webp&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;              &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;logi&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;TRUE&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;wmf&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;               &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;logi&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;FALSE&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x11&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;               &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;logi&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;FALSE&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;xml&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;               &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;logi&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;TRUE&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;zero&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;configuration&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;logi&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;TRUE&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;源码编译&#34;&gt;源码编译&lt;a class=&#34;headerlink&#34; href=&#34;#源码编译&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Linux 下你需要安装  ImageMagick++ 库。在  Debian/Ubuntu，这个库叫  &lt;a href=&#34;https://packages.debian.org/testing/libmagick++-dev&#34;&gt;libmagick++-dev&lt;/a&gt;：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;sudo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;apt-get&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;libmagick++-dev
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;在 Fedora 或者 CentOS/RHEL 我们需要安装  &lt;a href=&#34;https://apps.fedoraproject.org/packages/ImageMagick-c++-devel&#34;&gt;ImageMagick-c++-devel&lt;/a&gt;：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;sudo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;yum&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ImageMagick-c++-devel
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;要从 macOS 上的源代码安装，您需要来自 homebrew 的 &lt;code&gt;imagemagick@6&lt;/code&gt; 。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;brew&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;imagemagick@6
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;不幸的是，当前 homebrew  上的 &lt;code&gt;imagemagick@6&lt;/code&gt; 配置禁用了许多功能，包括 librsvg 和 fontconfig。 因此，字体和 svg 渲染的质量可能不是最佳的（建议安装时至少加上  &lt;code&gt;--with-fontconfig&lt;/code&gt;  和  &lt;code&gt;--with-librsvg&lt;/code&gt;  选项来支持高质量的字体和 svg 渲染。CRAN 上的 OS-Xe 二进制包已经默认配置好了）。&lt;/p&gt;
&lt;h2 id=&#34;图像输入输出&#34;&gt;图像输入输出&lt;a class=&#34;headerlink&#34; href=&#34;#图像输入输出&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;magick 之所以如此神奇，是因为它会自动转换并呈现所有常见的图像格式。ImageMagick 支持数十种格式并自动检测类型。使用 &lt;code&gt;magick::magick_config()&lt;/code&gt;  可以列出您的 ImageMagick 版本支持的格式。&lt;/p&gt;
&lt;h3 id=&#34;读和写&#34;&gt;读和写&lt;a class=&#34;headerlink&#34; href=&#34;#读和写&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;可以使用 &lt;code&gt;image_read&lt;/code&gt; 从图像数据的文件路径，URL 或原始矢量直接读取图像。&lt;code&gt;image_info&lt;/code&gt; 函数显示有关图像的一些元数据，类似 于 imagemagick 标识命令行实用程序。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nf&#34;&gt;library&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;magick&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;tiger&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;image_read_svg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;http://jeroen.github.io/images/tiger.svg&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;350&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tiger&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;##   format width height colorspace matte filesize density&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## 1    PNG   350    350       sRGB  TRUE        0   72x72&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FuLbjZTWqApeI_8dmyUAEfUhOqac.png&#34; /&gt;
我们使用 &lt;code&gt;image_write&lt;/code&gt; 将任何格式的图像导出为磁盘上的文件，或者如果 &lt;code&gt;path = NULL&lt;/code&gt; 则导出到内存中的文件。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# Render svg to png bitmap&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;image_write&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tiger&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;path&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;tiger.png&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;format&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;png&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;如果 &lt;code&gt;path&lt;/code&gt; 是文件名，则 &lt;code&gt;image_write&lt;/code&gt; 成功返回 &lt;code&gt;path&lt;/code&gt;，以便可以将结果通过文件路径传递给函数。&lt;/p&gt;
&lt;h3 id=&#34;转换格式&#34;&gt;转换格式&lt;a class=&#34;headerlink&#34; href=&#34;#转换格式&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Magick 以原始格式将图像保留在内存中。你可以在 &lt;code&gt;image_write&lt;/code&gt; 中通过指定格式参数以转换为另一种格式。或者还可以在应用转换之前，先在内部将图像转换为其他格式。如果你的原始格式是有损的，这将很有用。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;tiger_png&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;image_convert&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tiger&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;png&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;image_info&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tiger_png&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;##   format width height colorspace matte filesize density&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## 1    PNG   350    350       sRGB  TRUE        0   72x72&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;预览&#34;&gt;预览&lt;a class=&#34;headerlink&#34; href=&#34;#预览&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;具有内置网络浏览器（例如 RStudio）的 IDE 会在查看器中自动显示魔术图像。这就形成了一个整洁的交互式图像编辑环境。
&lt;img alt=&#34;aaa1.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Ful5yh4GHKvGlIxi70EFnN6L3MeE.png&#34; /&gt;
另外，在 Linux 上，您可以使用 &lt;code&gt;image_display&lt;/code&gt; 在 X11 窗口中预览图像。最后，&lt;code&gt;image_browse&lt;/code&gt;  会在你系统默认的应用程序中为给定类型打开图像。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# X11 only&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;image_display&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tiger&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# System dependent&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;image_browse&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tiger&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;另一种方法是将图像转换为栅格对象，然后将其绘制在 R 的图形显示上。但是，这非常慢，并且仅在与其他绘图功能结合使用时才有用。 请参阅下面的 #raster。&lt;/p&gt;
&lt;h2 id=&#34;转变&#34;&gt;转变&lt;a class=&#34;headerlink&#34; href=&#34;#转变&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;了解可用转换的最佳方法是遍历 RStudio 中 &lt;code&gt;?transformations&lt;/code&gt;  页面中的示例。下面是一些示例。&lt;/p&gt;
&lt;h3 id=&#34;剪切与编辑&#34;&gt;剪切与编辑&lt;a class=&#34;headerlink&#34; href=&#34;#剪切与编辑&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;一些转换函数采用了 &lt;code&gt;geometry&lt;/code&gt;  参数，该参数需要 &lt;code&gt;AxB + C + D&lt;/code&gt; 形式的特殊语法，其中每个元素都是可选的。 一些例子：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;image_crop(image, &#34;100x150+50&#34;)&lt;/code&gt;: crop out &lt;code&gt;width:100px&lt;/code&gt; and &lt;code&gt;height:150px&lt;/code&gt; starting &lt;code&gt;+50px&lt;/code&gt; from the left&lt;/li&gt;
&lt;li&gt;&lt;code&gt;image_scale(image, &#34;200&#34;)&lt;/code&gt;: resize proportionally to width: &lt;code&gt;200px&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;image_scale(image, &#34;x200&#34;)&lt;/code&gt;: resize proportionally to height: &lt;code&gt;200px&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;image_fill(image, &#34;blue&#34;, &#34;+100+200&#34;)&lt;/code&gt;: flood fill with blue starting at the point at &lt;code&gt;x:100, y:200&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;image_border(frink, &#34;red&#34;, &#34;20x10&#34;)&lt;/code&gt;: adds a border of 20px left+right and 10px top+bottom&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;完整的语法，可以参考  &lt;a href=&#34;http://www.imagemagick.org/Magick++/Geometry.html&#34;&gt;Magick::Geometry&lt;/a&gt;  文档。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# Example image&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;frink&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;image_read&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;https://jeroen.github.io/images/frink.png&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;frink&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;##   format width height colorspace matte filesize density&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## 1    PNG   220    445       sRGB  TRUE    73494   72x72&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FlV7P7YtH_2WQMsxZldbo5KXBcHf.png&#34; /&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# Add 20px left/right and 10px top/bottom&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;image_border&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;image_background&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;frink&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;hotpink&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;#000080&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;20x10&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fm22JgSMAVB9b5lwJs2XdDWduzDQ.png&#34; /&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# Trim margins&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;image_trim&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;frink&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fhx-0wk1Ni1mjMyVt78if2nSYM69.png&#34; /&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# Passport pica&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;image_crop&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;frink&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;100x150+50&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FiSBcqyBZkTABEShIaxPIN-7yu83.png&#34; /&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# Resize&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;image_scale&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;frink&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;300&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# width: 300px&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fv8a1wLrg0-Dlt-AKQFlg1GPRYaR.png&#34; /&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nf&#34;&gt;image_scale&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;frink&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;x300&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# height: 300px&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FjPECLff8hjyjbJccC7d7f224S7l.png&#34; /&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# Rotate or mirror&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;image_rotate&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;frink&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;45&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FtqDPXmQacO5yg1EZiEbpwyG2q4e.png&#34; /&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nf&#34;&gt;image_flip&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;frink&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FqnFMwS6VU9CneuQxOfmENoymNuZ.png&#34; /&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nf&#34;&gt;image_flop&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;frink&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FtimRQfjHX87iVIUFUk4s-LX4Phl.png&#34; /&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# Brightness, Saturation, Hue&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;image_modulate&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;frink&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;brightness&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;80&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;saturation&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;120&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hue&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;90&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FvrrMzE6tH0JlZx5hfzfUWfs6Y1E.png&#34; /&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# Paint the shirt orange&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;image_fill&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;frink&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;orange&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;point&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;+100+200&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fuzz&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;20&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FluuWhblbeTFArHfOR_XJZkWa31t.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;使用 &lt;code&gt;image_fill&lt;/code&gt;，我们可以从像素点开始填充。模糊参数允许填充物穿过具有相似颜色的相邻像素。值必须在 0 到 256^2 之间，指定要视为相等的颜色之间的最大几何距离。在这里，我们给教授 Frink 一件橙色的世界杯衬衫。&lt;/p&gt;
&lt;h3 id=&#34;滤镜和效果&#34;&gt;滤镜和效果&lt;a class=&#34;headerlink&#34; href=&#34;#滤镜和效果&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;ImageMagick 还具有许多值得去检查尝试的标准效果。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# Add randomness&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;image_blur&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;frink&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FqSBckuFlA9keFFc9QPS8KYV_n-J.png&#34; /&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nf&#34;&gt;image_noise&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;frink&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fm4E54Q30efRLgpkqkDDnYW-qVSa.png&#34; /&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# Silly filters&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;image_charcoal&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;frink&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FkwXd6SStEoUDHVr4e4JQrLw-Eod.png&#34; /&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nf&#34;&gt;image_oilpaint&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;frink&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FmTdWz7FhwrY34RFnZYX7s2qesY0.png&#34; /&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nf&#34;&gt;image_negate&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;frink&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fh0FBHPspS1QXE7_CUk1ZXveJ4Zi.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;核卷积&#34;&gt;核卷积&lt;a class=&#34;headerlink&#34; href=&#34;#核卷积&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;image_convolve()&lt;/code&gt; 函数在图像上实行  &lt;a href=&#34;https://en.wikipedia.org/wiki/Kernel_(image_processing)&#34;&gt;kernel&lt;/a&gt;  变换。核卷积是指在核矩阵中，图片每个像素的值根据相邻像素的加权和重新计算。例如，让我们看一下这个简单的核变换：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;kern&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;matrix&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ncol&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;nrow&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;kern&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0.25&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;kern&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0.25&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;kern&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0.25&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;kern&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;##      [,1] [,2] [,3]&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## [1,] 0.00 0.25 0.00&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## [2,] 0.25 0.00 0.25&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## [3,] 0.00 0.25 0.00&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;该核变换将每个像素更改为其水平和垂直相邻像素的平均值，从而在下面的右侧图像中产生轻微的模糊效果：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;image_resize&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;logo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;300x300&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;img_blurred&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;image_convolve&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;kern&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;image_append&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img_blurred&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.gif&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FtHductdc0XNwIuBIU9FXK5rsupQ.gif&#34; /&gt;&lt;/p&gt;
&lt;p&gt;或使用任何的  &lt;a href=&#34;http://www.imagemagick.org/Usage/convolve/&#34;&gt;standard kernels&lt;/a&gt;：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;%&amp;gt;%&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;image_convolve&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;Sobel&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;%&amp;gt;%&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;image_negate&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.gif&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FoMamLgClJsXl-uY4LIEKg-qqigu.gif&#34; /&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;%&amp;gt;%&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;image_convolve&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;DoG:0,0,2&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;%&amp;gt;%&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;image_negate&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.gif&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FoLfKyxFDjLDaiCljebugew_HJNX.gif&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;文本注释&#34;&gt;文本注释&lt;a class=&#34;headerlink&#34; href=&#34;#文本注释&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;最后，在图像的最上层打印输出一些文本往往是十分有用的：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# Add some text&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;image_annotate&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;frink&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;bioinit&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;70&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;gravity&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;southwest&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;green&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;bioinit.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FghbpybZdHGe8qiWvybFp8kx-TSA.png&#34; /&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# Customize text&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;image_annotate&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;frink&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;Welcome to bioinit&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;30&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;red&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;boxcolor&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;pink&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;degrees&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;60&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;location&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;+50+100&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;preview.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fj1tPMGunbPzMECKBpX8O9HB8y_u.png&#34; /&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# Fonts may require ImageMagick has fontconfig&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;image_annotate&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;frink&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;Hello world, bioinit!&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;font&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;Times&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;30&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;he.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FpjTastp1y53grVXsxWC88FR_BbU.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;大多数平台上支持的字体，包括  &lt;code&gt;&#34;sans&#34;&lt;/code&gt;， &lt;code&gt;&#34;mono&#34;&lt;/code&gt;， &lt;code&gt;&#34;serif&#34;&lt;/code&gt;， &lt;code&gt;&#34;Times&#34;&lt;/code&gt;， &lt;code&gt;&#34;Helvetica&#34;&lt;/code&gt;， &lt;code&gt;&#34;Trebuchet&#34;&lt;/code&gt;， &lt;code&gt;&#34;Georgia&#34;&lt;/code&gt;， &lt;code&gt;&#34;Palatino&#34;&lt;/code&gt; ，以及  &lt;code&gt;&#34;Comic Sans&#34;&lt;/code&gt; 。&lt;/p&gt;
&lt;h3 id=&#34;与管道结合&#34;&gt;与管道结合&lt;a class=&#34;headerlink&#34; href=&#34;#与管道结合&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;每个图像转换功能都会返回一个原始图像的修改后的副本。它不会影响原始图像。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;frink&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;image_read&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;https://jeroen.github.io/images/frink.png&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;frink2&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;image_scale&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;frink&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;100&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;image_info&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;frink&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;##   format width height colorspace matte filesize density&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## 1    PNG   220    445       sRGB  TRUE    73494   72x72&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nf&#34;&gt;image_info&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;frink2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;##   format width height colorspace matte filesize density&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## 1    PNG   100    202       sRGB  TRUE        0   72x72&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;因此，要组合转换，你需要将它们链接起来：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;test&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;image_rotate&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;frink&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;90&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;test&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;image_background&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;test&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;blue&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;flatten&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;TRUE&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;test&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;image_border&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;test&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;red&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;10x10&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;test&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;image_annotate&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;test&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;This is how we combine transformations&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;white&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;30&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;test&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;##   format width height colorspace matte filesize density&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## 1    PNG   465    240       sRGB  TRUE        0   72x72&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FiZaDDUtB1k9p62GOCPussr6Gfyp.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;使用 &lt;code&gt;magrittr&lt;/code&gt; 管道语法，可以使这一过程更具可读性。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nf&#34;&gt;image_read&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;https://jeroen.github.io/images/frink.png&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;%&amp;gt;%&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;image_rotate&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;270&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;%&amp;gt;%&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;image_background&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;blue&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;flatten&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;TRUE&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;%&amp;gt;%&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;image_border&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;red&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;10x10&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;%&amp;gt;%&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;image_annotate&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;The same thing with pipes&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;white&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;30&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FmcKRSe3mMoK9MN95raRD49ud1lZ.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;图像向量&#34;&gt;图像向量&lt;a class=&#34;headerlink&#34; href=&#34;#图像向量&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;上面的示例涉及的是单个图像。但是，Magick 中的所有函数都已经过向量化，以支持图层、合成或动画的处理。&lt;/p&gt;
&lt;p&gt;标准的基本方法 &lt;code&gt;[&lt;/code&gt; ，&lt;code&gt;[[&lt;/code&gt;，&lt;code&gt;c()&lt;/code&gt; 和 &lt;code&gt;length()&lt;/code&gt;  可用于处理图像向量，然后可以将其视为图层或帧。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# Download earth gif and make it a bit smaller for vignette&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;earth&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;image_read&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;https://jeroen.github.io/images/earth.gif&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;%&amp;gt;%&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;image_scale&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;200x&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;%&amp;gt;%&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;image_quantize&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;128&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;nf&#34;&gt;length&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;earth&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;## [1] 44&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;earth&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.gif&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fpa3AW70VCwbjcfCX1WhsEtPew8T.gif&#34; /&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nf&#34;&gt;head&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;image_info&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;earth&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;##   format width height colorspace matte filesize density&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## 1    GIF   200    200        RGB FALSE        0   72x72&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## 2    GIF   200    200        RGB FALSE        0   72x72&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## 3    GIF   200    200        RGB FALSE        0   72x72&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## 4    GIF   200    200        RGB FALSE        0   72x72&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## 5    GIF   200    200        RGB FALSE        0   72x72&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## 6    GIF   200    200        RGB FALSE        0   72x72&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nf&#34;&gt;rev&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;earth&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;%&amp;gt;%&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;image_flip&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;%&amp;gt;%&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;image_annotate&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;meanwhile in Australia&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;20&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;white&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.gif&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FlYafL-QG-ZIglCUtvU4JbtwSBns.gif&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;图层&#34;&gt;图层&lt;a class=&#34;headerlink&#34; href=&#34;#图层&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;我们可以像在 Photoshop 中那样，将图层堆叠在一起：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;bigdata&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;image_read&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;https://jeroen.github.io/images/bigdata.jpg&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;frink&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;image_read&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;https://jeroen.github.io/images/frink.png&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;logo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;image_read&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;https://jeroen.github.io/images/Rlogo.png&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bigdata&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;logo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;frink&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;image_scale&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;300x300&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;image_info&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;##   format width height colorspace matte filesize density&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## 1   JPEG   300    225       sRGB FALSE        0   72x72&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## 2    PNG   300    232       sRGB  TRUE        0   72x72&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## 3    PNG   148    300       sRGB  TRUE        0   72x72&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;打印的图案相互镶嵌叠加在一起，从而扩展输出画布，使所有内容都适合：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nf&#34;&gt;image_mosaic&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FlrHVyMABla_IaW2H5Lg7u5hFhGg.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;Flattening  扁平化处理将各个图层合并成一张与第一张图片大小相同的图片：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nf&#34;&gt;image_flatten&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FtKu0aAfNLknk0XBsGoYQg51kuxP.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;Flattening  和 mosaic 处理允许指定其他的复合运算符操作(&lt;a href=&#34;https://www.imagemagick.org/Magick++/Enumerations.html#CompositeOperator&#34;&gt;composite operators&lt;/a&gt;)：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nf&#34;&gt;image_flatten&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;Add&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fv_TlL5Et38wV_iwCH8v4TmNDbPH.png&#34; /&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nf&#34;&gt;image_flatten&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;Modulate&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FuitoCzoSHeNEveFBN15yg2kGm45.png&#34; /&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nf&#34;&gt;image_flatten&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;Minus&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FuhGpcsil9xtxh0twGNC5GnzO8L4.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;合并&#34;&gt;合并&lt;a class=&#34;headerlink&#34; href=&#34;#合并&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Appending  追加意味着将框架彼此相邻放置：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nf&#34;&gt;image_append&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;image_scale&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;x200&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FtxpdQkHZFwzkLBJgahib9MT_4nF.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;使用 &lt;code&gt;stack = TRUE&lt;/code&gt;  可以将它们放置在彼此的顶部：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nf&#34;&gt;image_append&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;image_scale&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;100&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;stack&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;TRUE&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FhMVlwTnOjh9yUkQtlMPi5Od6NF_.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;合成允许在特定位置上组合两个图像：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;bigdatafrink&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;image_scale&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;image_rotate&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;image_background&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;frink&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;none&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;300&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;x200&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;image_composite&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;image_scale&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bigdata&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;x400&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bigdatafrink&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;offset&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;+180+100&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FkOEAsghPH7_g7BKUJdGWhefsNsT.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;页面&#34;&gt;页面&lt;a class=&#34;headerlink&#34; href=&#34;#页面&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;当读取 PDF 文档时，每个页面都成为向量的一个元素。注意，PDF 是在读取时呈现的，因此需要立即指定密度。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;manual&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;image_read_pdf&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;https://cloud.r-project.org/web/packages/magick/magick.pdf&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;density&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;72&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;image_info&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;manual&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;##    format width height colorspace matte filesize density&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## 1     PNG   612    792       sRGB  TRUE        0   72x72&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## 2     PNG   612    792       sRGB  TRUE        0   72x72&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## 3     PNG   612    792       sRGB  TRUE        0   72x72&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## 4     PNG   612    792       sRGB  TRUE        0   72x72&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## 5     PNG   612    792       sRGB  TRUE        0   72x72&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## 6     PNG   612    792       sRGB  TRUE        0   72x72&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## 7     PNG   612    792       sRGB  TRUE        0   72x72&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## 8     PNG   612    792       sRGB  TRUE        0   72x72&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## 9     PNG   612    792       sRGB  TRUE        0   72x72&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## 10    PNG   612    792       sRGB  TRUE        0   72x72&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## 11    PNG   612    792       sRGB  TRUE        0   72x72&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## 12    PNG   612    792       sRGB  TRUE        0   72x72&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## 13    PNG   612    792       sRGB  TRUE        0   72x72&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## 14    PNG   612    792       sRGB  TRUE        0   72x72&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## 15    PNG   612    792       sRGB  TRUE        0   72x72&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## 16    PNG   612    792       sRGB  TRUE        0   72x72&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## 17    PNG   612    792       sRGB  TRUE        0   72x72&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## 18    PNG   612    792       sRGB  TRUE        0   72x72&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## 19    PNG   612    792       sRGB  TRUE        0   72x72&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## 20    PNG   612    792       sRGB  TRUE        0   72x72&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## 21    PNG   612    792       sRGB  TRUE        0   72x72&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## 22    PNG   612    792       sRGB  TRUE        0   72x72&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## 23    PNG   612    792       sRGB  TRUE        0   72x72&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## 24    PNG   612    792       sRGB  TRUE        0   72x72&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## 25    PNG   612    792       sRGB  TRUE        0   72x72&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## 26    PNG   612    792       sRGB  TRUE        0   72x72&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## 27    PNG   612    792       sRGB  TRUE        0   72x72&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## 28    PNG   612    792       sRGB  TRUE        0   72x72&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## 29    PNG   612    792       sRGB  TRUE        0   72x72&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## 30    PNG   612    792       sRGB  TRUE        0   72x72&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## 31    PNG   612    792       sRGB  TRUE        0   72x72&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## 32    PNG   612    792       sRGB  TRUE        0   72x72&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## 33    PNG   612    792       sRGB  TRUE        0   72x72&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## 34    PNG   612    792       sRGB  TRUE        0   72x72&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## 35    PNG   612    792       sRGB  TRUE        0   72x72&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;manual&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fu_HHq0k0faj2Ykl3CMnW2PvcEbZ.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;动画&#34;&gt;动画&lt;a class=&#34;headerlink&#34; href=&#34;#动画&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;除了将矢量元素视为图层之外，我们还可以将它们制作成动画帧！&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nf&#34;&gt;image_animate&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;image_scale&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;200x200&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fps&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dispose&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;previous&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.gif&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FvQD-fSNeprbTsmi5Y6xj7UZ3SSG.gif&#34; /&gt;&lt;/p&gt;
&lt;p&gt;变形创建了 &lt;code&gt;n&lt;/code&gt; 个图像序列，这些序列逐渐地将一个图像变形为另一个图像。这样，它就变成了动画。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;newlogo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;image_scale&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;image_read&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;https://jeroen.github.io/images/Rlogo.png&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;x150&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;oldlogo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;image_scale&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;image_read&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;https://developer.r-project.org/Logo/Rlogo-3.png&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;x150&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;frames&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;image_morph&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;oldlogo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;newlogo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;frames&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;image_animate&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;frames&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.gif&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fs0Fqy5mNgieuIAqqP5SyRCcaUjQ.gif&#34; /&gt;&lt;/p&gt;
&lt;p&gt;如果您读入现有的 GIF 或视频文件，则每一帧都会变成一个图层：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# Foreground image&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;banana&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;image_read&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;https://jeroen.github.io/images/banana.gif&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;banana&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;image_scale&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;banana&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;150&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;image_info&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;banana&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;##   format width height colorspace matte filesize density&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## 1    GIF   150    148       sRGB  TRUE        0   72x72&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## 2    GIF   150    148       sRGB  TRUE        0   72x72&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## 3    GIF   150    148       sRGB  TRUE        0   72x72&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## 4    GIF   150    148       sRGB  TRUE        0   72x72&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## 5    GIF   150    148       sRGB  TRUE        0   72x72&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## 6    GIF   150    148       sRGB  TRUE        0   72x72&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## 7    GIF   150    148       sRGB  TRUE        0   72x72&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## 8    GIF   150    148       sRGB  TRUE        0   72x72&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;处理各个帧并将其放回动画中：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# Background image&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;background&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;image_background&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;image_scale&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;logo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;200&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;white&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;flatten&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;TRUE&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# Combine and flatten frames&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;frames&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;image_composite&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;background&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;banana&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;offset&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;+70+30&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# Turn frames into animation&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;animation&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;image_animate&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;frames&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fps&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;animation&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;##   format width height colorspace matte filesize density&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## 1    gif   200    155       sRGB  TRUE        0   72x72&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## 2    gif   200    155       sRGB  TRUE        0   72x72&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## 3    gif   200    155       sRGB  TRUE        0   72x72&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## 4    gif   200    155       sRGB  TRUE        0   72x72&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## 5    gif   200    155       sRGB  TRUE        0   72x72&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## 6    gif   200    155       sRGB  TRUE        0   72x72&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## 7    gif   200    155       sRGB  TRUE        0   72x72&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## 8    gif   200    155       sRGB  TRUE        0   72x72&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.gif&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FjHQESx0Dsy7q8otiCpbGA0kpMQ7.gif&#34; /&gt;&lt;/p&gt;
&lt;p&gt;动画可以另存为 GIF 格式的  MPEG 文件：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nf&#34;&gt;image_write&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;animation&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;Rlogo-banana.gif&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;绘图与图形&#34;&gt;绘图与图形&lt;a class=&#34;headerlink&#34; href=&#34;#绘图与图形&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;该软件包的一个相对较新的组件是一个本地的 R 图形设备，它生成 magick 图像对象。它可以像用于绘制绘图的常规设备一样使用它，也可以打开一个使用像素坐标绘制到现有图像的设备。&lt;/p&gt;
&lt;h3 id=&#34;图形设备&#34;&gt;图形设备&lt;a class=&#34;headerlink&#34; href=&#34;#图形设备&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;image_graph()&lt;/code&gt; 函数可打开一个新的图形设备，类似于 &lt;code&gt;png()&lt;/code&gt; 或 &lt;code&gt;x11()&lt;/code&gt; 。它返回要写入绘图的图像对象。绘图设备中的每个“page”都将成为图像对象中的一帧。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# Produce image using graphics device&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;fig&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;image_graph&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;400&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;height&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;400&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;res&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;96&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;ggplot2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;qplot&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mpg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;wt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mtcars&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;colour&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cyl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;dev.off&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;我们可以使用常规图像操作轻松地对图形进行后处理。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# Combine&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;out&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;image_composite&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fig&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;frink&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;offset&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;+70+30&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;out&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;## # A tibble: 1 x 7&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;##   format width height colorspace matte filesize density&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;##   &amp;lt;chr&amp;gt;  &amp;lt;int&amp;gt;  &amp;lt;int&amp;gt; &amp;lt;chr&amp;gt;      &amp;lt;lgl&amp;gt;    &amp;lt;int&amp;gt; &amp;lt;chr&amp;gt;&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## 1 PNG      400    400 sRGB       TRUE         0 72x72&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FkDdPqcnq84W9woFJ-B_ftetqlfH.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;绘图设备&#34;&gt;绘图设备&lt;a class=&#34;headerlink&#34; href=&#34;#绘图设备&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;使用图形设备的另一种方法是使用像素坐标在现有图像的上面绘制。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# Or paint over an existing image&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;image_draw&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;frink&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;rect&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;20&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;20&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;200&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;border&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;red&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lty&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;dashed&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lwd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;abline&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;h&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;300&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;col&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;blue&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lwd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;10&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lty&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;dotted&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;text&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;30&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;250&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;Hoiven-Glaven&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;family&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;monospace&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cex&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;srt&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;90&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;palette&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;rainbow&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;11&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;end&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0.9&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;symbols&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;rep&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;200&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;11&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;seq&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;400&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;40&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;circles&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;runif&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;11&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;35&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bg&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;11&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;inches&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;FALSE&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;add&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;TRUE&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;dev.off&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nf&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;## # A tibble: 1 x 7&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;##   format width height colorspace matte filesize density&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;##   &amp;lt;chr&amp;gt;  &amp;lt;int&amp;gt;  &amp;lt;int&amp;gt; &amp;lt;chr&amp;gt;      &amp;lt;lgl&amp;gt;    &amp;lt;int&amp;gt; &amp;lt;chr&amp;gt;&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## 1 PNG      220    445 sRGB       TRUE         0 72x72&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FgRXn3ahO3jSVUf3HavycJkSQDN9.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;默认情况下，&lt;code&gt;image_draw()&lt;/code&gt; 将所有空白设置为 0，并使用图形坐标来匹配图像大小，像素(宽度 x 高度)为左上角 (0,0)。注意，这意味着 y 轴从上到下递增，这与典型的图形坐标相反。您可以通过向 &lt;code&gt;image_draw&lt;/code&gt; 传递定制的 &lt;code&gt;xlim&lt;/code&gt;、&lt;code&gt;ylim&lt;/code&gt; 或 &lt;code&gt;mar&lt;/code&gt; 值来覆盖所有这些。&lt;/p&gt;
&lt;h3 id=&#34;动画图形&#34;&gt;动画图形&lt;a class=&#34;headerlink&#34; href=&#34;#动画图形&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;图形设备支持多帧，这使它很容易创建动画图形。下面的代码展示了如何使用 magick 图形设备实现来自非常酷的 &lt;a href=&#34;https://github.com/dgrtwo/gganimate&#34;&gt;gganimate&lt;/a&gt;  包的示例。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nf&#34;&gt;library&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;gapminder&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;library&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ggplot2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;image_graph&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;600&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;340&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;res&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;96&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;datalist&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;split&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;gapminder&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;gapminder&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;year&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;out&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;lapply&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;datalist&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;){&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;ggplot&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;aes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;gdpPercap&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lifeExp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pop&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;continent&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;scale_size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;population&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;limits&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;range&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;gapminder&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pop&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;geom_point&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;ylim&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;20&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;90&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;scale_x_log10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;limits&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;range&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;gapminder&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;gdpPercap&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;ggtitle&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;year&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;theme_classic&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;})&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;dev.off&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;animation&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;image_animate&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fps&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;animation&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;## # A tibble: 12 x 7&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;##    format width height colorspace matte filesize density&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;##    &amp;lt;chr&amp;gt;  &amp;lt;int&amp;gt;  &amp;lt;int&amp;gt; &amp;lt;chr&amp;gt;      &amp;lt;lgl&amp;gt;    &amp;lt;int&amp;gt; &amp;lt;chr&amp;gt;&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;##  1 gif      600    340 sRGB       TRUE         0 72x72&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;##  2 gif      600    340 sRGB       TRUE         0 72x72&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;##  3 gif      600    340 sRGB       TRUE         0 72x72&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;##  4 gif      600    340 sRGB       TRUE         0 72x72&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;##  5 gif      600    340 sRGB       TRUE         0 72x72&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;##  6 gif      600    340 sRGB       TRUE         0 72x72&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;##  7 gif      600    340 sRGB       TRUE         0 72x72&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;##  8 gif      600    340 sRGB       TRUE         0 72x72&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;##  9 gif      600    340 sRGB       TRUE         0 72x72&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## 10 gif      600    340 sRGB       TRUE         0 72x72&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## 11 gif      600    340 sRGB       TRUE         0 72x72&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## 12 gif      600    340 sRGB       TRUE         0 72x72&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.gif&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FmnLc502JTXejGFx4lRklxXWcfLH.gif&#34; /&gt;&lt;/p&gt;
&lt;p&gt;要将其写入文件，您只需执行以下操作：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nf&#34;&gt;image_write&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;animation&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;gapminder.gif&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;光栅图像&#34;&gt;光栅图像&lt;a class=&#34;headerlink&#34; href=&#34;#光栅图像&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Magick 图像也可以转换为光栅对象，来用于 R 的图形设备。因此，我们可以将它与其他图形工具相结合。然而，请注意，R 的图形设备非常慢，且它有一个非常不同的坐标系，它会降低图像的质量。&lt;/p&gt;
&lt;h3 id=&#34;基础格栅&#34;&gt;基础格栅&lt;a class=&#34;headerlink&#34; href=&#34;#基础格栅&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Base R 有一个 as.raster 格式，它可将图像转换为字符串向量。Paul Murrell  在  &lt;a href=&#34;https://journal.r-project.org/archive/2011-1/RJournal_2011-1_Murrell.pdf&#34;&gt;Raster Images in R Graphics&lt;/a&gt;  一文中给出了一个很好的概述。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nf&#34;&gt;plot&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;as.raster&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;frink&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Foylwf9AX4zNBs0JGF4rHbQU5KdW.png&#34; /&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# Print over another graphic&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;plot&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cars&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;rasterImage&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;frink&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;21&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;25&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;80&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FsLD8uRNCnhiVMS-8fYZ2as4aRa6.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;grid-包&#34;&gt;grid 包&lt;a class=&#34;headerlink&#34; href=&#34;#grid-包&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;grid&lt;/code&gt; 包使您更容易在图形设备上叠加栅格，而不必调整绘图的 x/y 坐标。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nf&#34;&gt;library&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ggplot2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;library&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;grid&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;qplot&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;speed&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dist&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cars&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;geom&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;point&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;smooth&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;## `geom_smooth()` using method = &amp;#39;loess&amp;#39; and formula &amp;#39;y ~ x&amp;#39;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nf&#34;&gt;grid.raster&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;frink&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FjD7xj3dzxfoQUKjtTpZFXXTHvf_.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;raster-包&#34;&gt;raster 包&lt;a class=&#34;headerlink&#34; href=&#34;#raster-包&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;raster 包具有自己的 bitmaps  类，这些类对于空间应用程序很有用。将图像转换为栅格的最简单方法是将其导出为 &lt;code&gt;tiff&lt;/code&gt; 文件：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;tiff_file&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;tempfile&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;image_write&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;frink&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;path&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tiff_file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;format&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;tiff&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;r&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;raster&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;brick&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tiff_file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;raster&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;plotRGB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;r&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FlxSnpf3uVblq7UZ6DWy39UJKFrk.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;你还可以手动将位图数组(bitmap array )转换为栅格对象，但这似乎会删除一些元数据：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;buf&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;as.integer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;frink&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]])&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;rr&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;raster&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;brick&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;buf&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;raster&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;plotRGB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;asp&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;ocr-文本提取&#34;&gt;OCR 文本提取&lt;a class=&#34;headerlink&#34; href=&#34;#ocr-文本提取&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;magick&lt;/code&gt;  最新的功能是利用 OCR 技术从图片中提取文本。这需要 &lt;code&gt;tesseract&lt;/code&gt; 包。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nf&#34;&gt;install.packages&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;tesseract&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;image_read&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;http://jeroen.github.io/images/testocr.png&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;## # A tibble: 1 x 7&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;##   format width height colorspace matte filesize density&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;##   &amp;lt;chr&amp;gt;  &amp;lt;int&amp;gt;  &amp;lt;int&amp;gt; &amp;lt;chr&amp;gt;      &amp;lt;lgl&amp;gt;    &amp;lt;int&amp;gt; &amp;lt;chr&amp;gt;&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## 1 PNG      640    480 sRGB       TRUE     23359 72x72&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fl0CF7q5gK6U-qs6AQnC8ZbOa1SO.png&#34; /&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# Extract text&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;cat&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;image_ocr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;## This is a lot of 12 point text to test the&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## ocr code and see if it works on all types&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## of file format.&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;##&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## The quick brown dog jumped over the&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## lazy fox. The quick brown dog jumped&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## over the lazy fox. The quick brown dog&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## jumped over the lazy fox. The quick&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## brown dog jumped over the lazy fox.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;总结&#34;&gt;总结&lt;a class=&#34;headerlink&#34; href=&#34;#总结&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;本文章篇幅很长，对 magick 包的各种使用非常直观详细。作为与 “ImageMagick” 绑定，可用的最全面的开源图像处理库，magick 包支持许多常见格式（png，jpeg，tiff，pdf 等）和操作（旋转，缩放，修剪，修剪，翻转，模糊等）。这些所有操作都是通过 Magick ++ STL 矢量化的，这意味着它们可以在单个帧或一系列帧上进行操作，以处理图层，拼贴或动画。&lt;/p&gt;
&lt;p&gt;在 RStudio 中，可以将图像打印到控制台后会自动预览，从而形成一个交互式编辑环境。因此，强烈推荐大家在 RStudio 中进行使用和测试。&lt;/p&gt;
&lt;p&gt;更多  magick、ImageMagick 相关的 R 语言高级图像处理操作，有兴趣的童鞋可以自行去研究学习，也欢迎大家留言交流。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;参考资料：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://cran.r-project.org/web/packages/magick/vignettes/intro.html&#34;&gt;https://cran.r-project.org/web/packages/magick/vignettes/intro.html&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;</description>
      <link>https://shenwy.com/yuque/%E7%BC%96%E7%A8%8B%E6%8A%80%E6%9C%AF/R/2019-10-19-uoepud/</link>
      <pubDate>Sat, 19 Oct 2019 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E7%BC%96%E7%A8%8B%E6%8A%80%E6%9C%AF/R/2019-10-19-uoepud/</guid>
      
    </item>
    
    <item>
      <title>Cool New Features in Python 3.8</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2019-10-16&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2019-10-16T00:00:00&#39;&gt;2019-10-16&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2019-11-13&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2019-11-13T09:34:40&#39;&gt;2019-11-13&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;原文：&lt;a href=&#34;https://realpython.com/python38-new-features/&#34;&gt;https://realpython.com/python38-new-features/&lt;/a&gt;&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E7%BC%96%E7%A8%8B%E6%8A%80%E6%9C%AF/Python/2019-10-16-pcfnsd/</link>
      <pubDate>Wed, 16 Oct 2019 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E7%BC%96%E7%A8%8B%E6%8A%80%E6%9C%AF/Python/2019-10-16-pcfnsd/</guid>
      
    </item>
    
    <item>
      <title>基于 Dash Bio 的生物信息学数据可视化</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2019-10-12&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2019-10-12T00:00:00&#39;&gt;2019-10-12&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-06-30&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-06-30T09:42:48&#39;&gt;2021-06-30&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;bio-dash.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fi5esTnPH9t6x5p8HQx1TYY2fLrV.png&#34; /&gt;
&lt;a href=&#34;https://plot.ly/dash/&#34;&gt;Dash&lt;/a&gt;  是用于搭建响应式 Web 应用的 Python 开源库。Dash Bio 是面向生物信息学，且与 Dash 兼容的组件，它可以将生物信息学领域中常见的数据整合到  Dash 应用程序，以实现响应式的生物信息学数据可视化。&lt;/p&gt;
&lt;h2 id=&#34;安装&#34;&gt;安装&lt;a class=&#34;headerlink&#34; href=&#34;#安装&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;pip&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;install&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dash&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dash&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bio&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;截止 2019.09.25，dash-bio 在 PyPI 的最新版本为 0.1.3，dash 的最新版本为  1.3.1。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;dash&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;dash_bio&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dash&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;__version__&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;mf&#34;&gt;1.3.1&lt;/span&gt;

&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dash_bio&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;__version__&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;mf&#34;&gt;0.1.4&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;dash&#34;&gt;dash&lt;a class=&#34;headerlink&#34; href=&#34;#dash&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Plotly 的 &lt;code&gt;dash&lt;/code&gt; 库提供了一个声明性的 Python 接口，用于开发全栈式 Web 应用程序（“Dash apps&amp;rdquo;）。除了主要的 &lt;code&gt;dash&lt;/code&gt; 库之外，&lt;code&gt;dash-html-components&lt;/code&gt; 和 &lt;code&gt;dash-core-components&lt;/code&gt; 包还构成了 Dash 应用程序的  building blocks。&lt;code&gt;dash-html-components&lt;/code&gt; 提供了一个用于构建 Dash 应用程序布局的界面，该界面模仿了构建网站布局的过程； &lt;code&gt;dash-core-components&lt;/code&gt; 是用于与 Dash 应用程序进行交互的一组常用工具（例如，下拉菜单，文本输入和滑块），并包括 &lt;code&gt;dcc.Graph&lt;/code&gt; 组件，用于使用 plotly.py 制作交互式图形。&lt;/p&gt;
&lt;p&gt;一个只包含了一个字符串页面的最小 Dash 应用可以使用以下代码生成。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;dash&lt;/span&gt;
&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;dash_html_components&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;as&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;html&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;app&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dash&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Dash&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;app&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;layout&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;html&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Hello, world!&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# 只能 localhost 内部访问&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;app&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;run_server&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# 开启外网访问&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;#app.run_server(host=&amp;quot;0.0.0.0&amp;quot;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;092513352363001.Png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FiwBpT_Q72LoTHbWcFXeoZI1HstX.png&#34; /&gt;
&lt;strong&gt;Fig. 1&lt;/strong&gt;: A simple Dash application.&lt;/p&gt;
&lt;p&gt;运行上述代码后，将指定一个本地主机地址在控制台中。在浏览器中访问该地址会产生一个简单的结果包含文本 &amp;ldquo;Hello，world！&amp;rdquo; 的网页 （见图 1）。&lt;/p&gt;
&lt;h2 id=&#34;dash-bio&#34;&gt;dash-bio&lt;a class=&#34;headerlink&#34; href=&#34;#dash-bio&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Dash Bio 是一个用于在 Python  中构建生物信息学和药物开发应用程序的开源工具包。许多 Dash Bio 组件都建立在 JavaScript 库之上，这些库在全栈生物信息学应用程序开发人员中已经很流行。Plotly** **团队对这些 JavaScript 小部件经过进行了重新设计，以便 Python 开发人员现在可以访问它们。换句话说，科学计算的 Python 开发人员现在可以将这些小部件投入使用而无需了解 JavaScript。您只需要了解 Python 和 Dash。&lt;/p&gt;
&lt;p&gt;下面是以下是从 dash-bio 选取的 10 个 Dash 可视化应用程序示例，这些应用程序显示了这种基于 Web 的敏捷和交互式的生物信息学和药物开发分析方法。&lt;/p&gt;
&lt;h3 id=&#34;clustergram&#34;&gt;Clustergram&lt;a class=&#34;headerlink&#34; href=&#34;#clustergram&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;聚类图是热图-树状图的组合，通常在基因表达数据中使用。由树状图表示的分层聚类可用于识别具有相关表达水平的基因组。Dash Bio Clustergram 组件是基于 Python 的组件，它使用 plotly.py 生成图形。它以二维 numpy 浮点值数组作为输入。缺失数据的插入和层次聚类的计算都发生在组件本身内。达到或超过用户定义相似性阈值的聚类在相应的树状图中包含单个迹线，并且可以用注释突出显示。
&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fi6dgJ1NxlUZb-vMbnaHY0mb0mS5.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;ideogram&#34;&gt;Ideogram&lt;a class=&#34;headerlink&#34; href=&#34;#ideogram&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;ideogram  是基因组数据的示意图。染色体以链表示，特定基因的位置由染色体上的条带表示。Dash Bio Ideogram 组件建立在 ideogram.js 库之上，并包括注释，直方图和同源性等功能。可以对每个染色体的不同片段进行注释，并以条带的形式显示，并且可以通过使用同源性功能将一条染色体上的一个区域连接到另一条染色体上的一个区域来突出显示不同染色体之间的关系。
&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FpLzZm0Qslohoy7iBZII14UIYi2X.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;manhattan-plot&#34;&gt;Manhattan Plot&lt;a class=&#34;headerlink&#34; href=&#34;#manhattan-plot&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;曼哈顿图是全基因组关联研究中常用的图。它可以突出显示特定的核苷酸，当将其更改为其他核苷酸时，这些核苷酸与某些遗传条件有关。Dash Bio ManhattanPlot 组件是使用 plotly.js 构建的。输入数据采用 pandas 数据框的形式。图上的两条线（见下图）分别代表阈值水平和建议线。这些线的 y 值可由用户控制。
&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FmjxHubNFpVy3sA5XWduiX-i_mhZ.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;needle-plot&#34;&gt;Needle Plot&lt;a class=&#34;headerlink&#34; href=&#34;#needle-plot&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;针迹图是条形图，其中每个条形图的顶部都已替换为标记，并且从 x 轴到上述标记的线也被替换。它的主要用例是密集数据集的可视化，当用条形图表示时，看起来过于拥挤而无法有效地解释。在生物信息学中，针刺图可用于注释基因组上发生基因突变的位置（见下图）。Dash Bio NeedlePlot 组件是使用 plotly.js 构建的。它接收字典作为输入数据。可以使用不同的颜色和标记样式来区分不同类型的突变，并且可以在图上标出特定基因的域。
&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FpfukcBGUmGy8VnSXTSKywT5Uxvy.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;volcano-plot&#34;&gt;Volcano Plot&lt;a class=&#34;headerlink&#34; href=&#34;#volcano-plot&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;火山图是用于同时显示数据集的统计显着性和定义“效果大小”（例如倍数变化）的图。当可视化代表重复数据的大量数据点时，这种类型的绘图非常有用。它有助于识别同时具有统计意义和巨大影响的数据。Dash Bio VolcanoPlot 件是使用 plotly.py 构建的。它以 pandas 数据框作为输入数据。用户可以定义代表效果大小阈值（正值和负值）和统计意义的阈值的线（见下图）。
&lt;img alt=&#34;092513395069008.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FmhCFwhABPDbpfWDkbLbwMlNH_Sh.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;molecule-3d-viewer&#34;&gt;Molecule 3D Viewer&lt;a class=&#34;headerlink&#34; href=&#34;#molecule-3d-viewer&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Dash Bio Molecule3dViewer 组件建立在 &lt;code&gt;molecule-3d-for-react&lt;/code&gt;  库之上。其目的是显示分子结构。这些类型的可视化可以显示蛋白质的形状，并深入了解它们与其他分子结合的方式。在交流生物分子过程的机理时，这会非常有用。Molecule3dViewer 接收字典作为输入数据，该字典指定分子中每个原子的布局和样式。它可以呈现各种样式的分子，例如带状图，并允许单击鼠标选择特定的原子或残基（见下图），这些特定的原子或残基可以在 Dash 程序中进行读取或写入。
&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fr14y3-8NWN8UCoEyrlszcr0DyfM.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;speck&#34;&gt;Speck&lt;a class=&#34;headerlink&#34; href=&#34;#speck&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;这是一个使用 WebGL 和环境遮挡来提供更好的深度感知的 3d 分子环境遮挡查看器。Dash Bio Speck 组件是基于 WebGL 的 3D 渲染器，它基于 &lt;code&gt;Speck&lt;/code&gt;  构建。它使用环境光遮挡和轮廓线等技术来提供分子结构的丰富视图（见下图）。Dash Bio Speck 组件以字典的形式接收输入数据，该字典包含每个原子的原子符号和空间位置（以 x，y 和 z 坐标表示）。与分子渲染有关的参数（例如原子大小，环境光吸收水平和轮廓）可以选择在另一个作为参数提供的字典中指定。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FrvmjARZHw452wGQrZ5wNun9IzZT.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;alignment-chart&#34;&gt;Alignment Chart&lt;a class=&#34;headerlink&#34; href=&#34;#alignment-chart&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;比对可视化图是用于查看多个序列比对的工具。图表中显示了核苷酸或氨基酸的多个相关序列（例如，来自不同生物的似乎具有相同的功能的氨基酸蛋白序列），以显示它们的相似性。Dash Bio AlignmentChart 组件构建在 &lt;code&gt;react-alignment-viewer&lt;/code&gt; 之上。它以 FASTA 文件作为输入并进行比对计算。它可以可选地显示一个条形图，该条形图表示输入文件中定义的每个序列中特定氨基酸或核苷酸的保守性水平（见下图）。
&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fo_WPkP2xN0bIiXTj04I-Zq6FaOP.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;oncoprint&#34;&gt;OncoPrint&lt;a class=&#34;headerlink&#34; href=&#34;#oncoprint&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;OncoPrint 图是一种热图，可帮助可视化多个基因组改变事件。Dash Bio OncoPrint 组件构建在 &lt;code&gt;react-oncoprint&lt;/code&gt;  之上。组件的输入数据采用字典列表的形式，每个字典都定义一个样本，基因，改变和突变类型。
&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FlxrtAvpeWD5P6uvlFO37gt94JAB.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;sequence-viewer&#34;&gt;Sequence Viewer&lt;a class=&#34;headerlink&#34; href=&#34;#sequence-viewer&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Dash Bio SequenceViewer 组件是一个可用于基因组或蛋白质组序列注释的简单工具。它基于 &lt;code&gt;react-sequence-viewer&lt;/code&gt; 库。该可视化图包括一个搜索功能，允许用户使用正则表达式搜索序列。另外，可以使用由起始位置、终止位置和颜色定义的选项，或可以编码一旦单击子序列即可显示的其他信息的覆盖范围来注释序列。选择和覆盖范围可在 Dash 应用程序中进行读取和写入，还可以通过鼠标悬停来选择和搜索结果。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FkmUUZHTSS2t0p2ZJztQtNCAwnch.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;总结&#34;&gt;总结&lt;a class=&#34;headerlink&#34; href=&#34;#总结&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Dash Bio 组件有助于对生物信息学领域中收集和分析中常见的数据集类型进行可视化展示。它与 Plotly Dash 的声明性质保持一致，并允许用户创建可与其他 Dash 组件集成的交互响应式 Web 应用程序。&lt;/p&gt;
&lt;p&gt;除此之外，在 Dash Bio 中还有一个与 &lt;code&gt;dash-bio&lt;/code&gt;  一起开发的  &lt;code&gt;dash-bio-utils&lt;/code&gt; 包。它包含了生物信息学分析中常用文件类型的解析器。通过这个包的解析器可以将一些常用生物信息学文件中编码的数据转换为与 Dash Bio 组件兼容的输入，如将文件从一些最著名的生物信息学数据库（GEO 表达数据，PDB 蛋白质分子结构数据等）转换为熟悉的 Python 数据类型，例如字典。当与 &lt;code&gt;dash-bio&lt;/code&gt; 软件包结合使用时，这使生物信息学家可以快速，简洁地相互之间以及与其他科学界人士交流信息。&lt;/p&gt;
&lt;p&gt;喜欢 R 语言的同学，也可以了解一下  &lt;code&gt;dashR&lt;/code&gt; 这个包，它是 Dash 生态系统的 R 接口，可用于编写响应式的 Web 可视化应用程序。&lt;/p&gt;
&lt;p&gt;本文章只简单介绍了  &lt;code&gt;dash-bio&lt;/code&gt;  的一些常用案例，没有涉及  &lt;code&gt;dash-bio-utils&lt;/code&gt;  和 &lt;code&gt;dashR&lt;/code&gt; 包，有兴趣的童鞋可以去研究学习一下，也欢迎留言交流。&lt;/p&gt;
&lt;h2 id=&#34;参考资料&#34;&gt;参考资料&lt;a class=&#34;headerlink&#34; href=&#34;#参考资料&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Plotly，&lt;a href=&#34;https://medium.com/plotly/announcing-dash-bio-ed8835d5da0c&#34;&gt;Announcing Dash Bio&lt;/a&gt;，Medium&lt;/li&gt;
&lt;li&gt;Dash by Plotly，《&lt;a href=&#34;https://dashr.plot.ly/?source=post_page&#34;&gt;Dash for R User Guide&lt;/a&gt;》，dashr.plot.ly&lt;/li&gt;
&lt;li&gt;dash-bio，&lt;a href=&#34;https://dash.plot.ly/dash-bio&#34;&gt;Dash User Guide and Documentation - Dash by Plotly&lt;/a&gt;，dashr.plot.ly&lt;/li&gt;
&lt;/ol&gt;</description>
      <link>https://shenwy.com/yuque/%E5%8F%AF%E8%A7%86%E5%8C%96/Python%E5%8F%AF%E8%A7%86%E5%8C%96/2019-10-12-tp85x1/</link>
      <pubDate>Sat, 12 Oct 2019 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%8F%AF%E8%A7%86%E5%8C%96/Python%E5%8F%AF%E8%A7%86%E5%8C%96/2019-10-12-tp85x1/</guid>
      
    </item>
    
    <item>
      <title>PostgreSQL 常用命令</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2019-09-30&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2019-09-30T00:00:00&#39;&gt;2019-09-30&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2023-08-22&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2023-08-22T11:03:01&#39;&gt;2023-08-22&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;关于 PostgreSQL 的基本用法，供初次使用者上手。以下内容基于 CentOS 操作系统，其他操作系统实在没有精力兼顾，但是大部分内容应该普遍适用。&lt;/p&gt;
&lt;h2 id=&#34;1-数据库登录&#34;&gt;1. 数据库登录&lt;a class=&#34;headerlink&#34; href=&#34;#1-数据库登录&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;重启：&lt;/strong&gt; /etc/init.d/postgresql restart&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;登陆：&lt;/strong&gt; psql -U user -d dbname  （默认的用户和数据库是 postgres）&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;psql -h 172.16.254.21 -p 5432 -U postgres –d databasename     # 访问远程数据库
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;\h             // 查看 SQL 命令的解释，比如 \h select。
\?             // 查看 psql 命令列表。
\l             // 列举数据库，相当于 mysql 的 show databases
\c dbname      // 切换数据库，相当于 mysql 的use dbname
\dt            // 查看表结构，相当于 desc tblname,show columns from tbname
\d tblname     // 看数据结构
\di            // 查看索引
\q             // 退出
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;create database [数据库名];               // 创建数据库
drop database [数据库名];                 // 删除数据库
alter table [表名A] rename to [表名B];    // 重命名一个表
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;2-用户操作&#34;&gt;2. 用户操作&lt;a class=&#34;headerlink&#34; href=&#34;#2-用户操作&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;创建删除用户：postgres 创建除 postgres 本身以外的新用户，需要通过以 postgres 登录命令行的方式进行创建，或者删除。&lt;/p&gt;
&lt;h3 id=&#34;创建新用户&#34;&gt;创建新用户&lt;a class=&#34;headerlink&#34; href=&#34;#创建新用户&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;createuser&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-P&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;用户名
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;运行该命令后系统会自动提示输入该用户的密码、是否为超级用户、是否具有创建数据库，或者其他用户的权限。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;bash-4.1$ createuser -P shenweiyan`
Enter ``password` `for` `new role:`
Enter it again:`
Shall the new role be a superuser? (y/n) n`
Shall the new role be allowed ``to` `create` `databases? (y/n) y`
Shall the new role be allowed ``to` `create` `more new roles? (y/n) n
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;为新用户创建新数据库&#34;&gt;为新用户创建新数据库&lt;a class=&#34;headerlink&#34; href=&#34;#为新用户创建新数据库&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;createdb&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;数据库名&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-O&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;用户名
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;bash-4.1$ createdb djangodb -O shenweiyan
bash-4.1$ psql`
psql (8.4.20)`
Type &amp;quot;help&amp;quot; for elp.
postgres=# \l
List of databases
Name    |   Owner    | Encoding |  Collation  |    Ctype    |   Access privileges
-----------+------------+----------+-------------+-------------+-----------------------
djangodb  | shenweiyan | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
postgres  | postgres   | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
template0 | postgres   | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres
                                                              : postgres=CTc/postgres
template1 | postgres   | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres
                                                              : postgres=CTc/postgres
(4 rows)
bash-4.1$
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;删除用户&#34;&gt;删除用户&lt;a class=&#34;headerlink&#34; href=&#34;#删除用户&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;dropuser&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-e&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;用户名
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;注意：删除用户，必须先要删除该用户所拥有的数据库，否则无法删除。&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;bash-4.1$ dropuser -e shenweiyan
DROP ROLE shenweiyan;
dropuser: removal of role &amp;quot;shenweiyan&amp;quot; failed: ERROR:  role &amp;quot;shenweiyan&amp;quot; cannot be dropped because some objects depend on it
DETAIL:  owner of database djangodb
bash-4.1$ dropdb -U postgres -e djangodb
DROP DATABASE djangodb;
bash-4.1$ dropuser -e shenweiyan
DROP ROLE shenweiyan;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;查看数据库用户&#34;&gt;查看数据库用户&lt;a class=&#34;headerlink&#34; href=&#34;#查看数据库用户&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;k&#34;&gt;select&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pg_user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;（注意分号不能省）&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;postgres=# select * from pg_user;
  usename   | usesysid | usecreatedb | usesuper | usecatupd |  passwd  | valuntil | useconfig
------------+----------+-------------+----------+-----------+----------+----------+-----------
 postgres   |       10 | t           | t        | t         | ******** |          |
 shenweiyan |    16408 | t           | f        | f         | ******** |          |
(2 rows)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;修改数据库内某个用户密码&#34;&gt;修改数据库内某个用户密码&lt;a class=&#34;headerlink&#34; href=&#34;#修改数据库内某个用户密码&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;postgres=# \password djangoadmin
Enter new password:
Enter it again:
postgres=#
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;3-数据库操作&#34;&gt;3. 数据库操作&lt;a class=&#34;headerlink&#34; href=&#34;#3-数据库操作&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&#34;31-数据库导入与导出&#34;&gt;3.1 数据库导入与导出&lt;a class=&#34;headerlink&#34; href=&#34;#31-数据库导入与导出&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;数据库的导入导出是最常用的功能之一，每种数据库都提供有这方面的工具，例如 Oracle 的 &lt;strong&gt;exp/imp&lt;/strong&gt;，Informi 的&lt;strong&gt;dbexp/dbimp&lt;/strong&gt;，MySQL 的 &lt;strong&gt;mysqldump&lt;/strong&gt;，而 PostgreSQL 提供的对应工具为 &lt;strong&gt;pg_dump&lt;/strong&gt; 和 &lt;strong&gt;pg_restore&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;pg_dump&lt;/strong&gt; 是用于备份 PostgreSQL 数据库的工具。它可以在数据库正在使用的时候进行完整一致的备份，并不阻塞其它用户对数据库的访问。&lt;/p&gt;
&lt;p&gt;转储格式可以是一个脚本（纯文件）或者归档文件。转储脚本的格式是纯文本，包含许多 SQL 命令，这些 SQL 命令可以用于重建该数据库并将之恢复到保存脚本时的状态。可以使用 &lt;strong&gt;psql&lt;/strong&gt; 从这样的脚本中恢复。它们甚至可以用于在其它机器甚至是其它硬件体系的机器上重建数据库，通过对脚本进行一些修改，甚至可以在其它 SQL 数据库产品上重建数据库。&lt;/p&gt;
&lt;p&gt;归档文件格式必须和 &lt;strong&gt;pg_restore&lt;/strong&gt; 一起使用重建数据库。它们允许 &lt;strong&gt;pg_restore&lt;/strong&gt; 对恢复什么东西进行选择，甚至是在恢复之前对需要恢复的条目进行重新排序。归档文件也是可以跨平台移植的。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;最简单的导出命令如下(导出指定数据库)：&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pg_dump&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;db_name&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;db.sql
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pg_dump&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-U&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;postgres&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-f&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mydatabase.sql&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mydatabase
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pg_dump&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-h&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;数据库服务器地址&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-U&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;postgres&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;用户名&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;-t&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;表名&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;数据库名&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;缺省时同用户名&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;路径/文件名.sql
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;导入数据时，首先创建数据库，再用 psql/pg_restore 导入：&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$ createdb newdatabase
$ psql -d newdatabase -U postgres -f mydatabase.sql
$ pg_restore -d newdb db.dump
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;hr /&gt;
&lt;h3 id=&#34;32-修改数据库名&#34;&gt;3.2 修改数据库名&lt;a class=&#34;headerlink&#34; href=&#34;#32-修改数据库名&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;ALTER DATABASE &amp;quot;3_8_dev_test&amp;quot; RENAME TO &amp;quot;3_8_dev_demo&amp;quot;;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;4-常用数据库表操作&#34;&gt;4. 常用数据库表操作&lt;a class=&#34;headerlink&#34; href=&#34;#4-常用数据库表操作&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&#34;数据表导入与导出&#34;&gt;数据表导入与导出&lt;a class=&#34;headerlink&#34; href=&#34;#数据表导入与导出&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;在 postgres 数据库中执行：
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;bash-4.1$ psql
psql (10.18, server 9.6.23)
Type &amp;quot;help&amp;quot; for help.

postgres=# \l
                                  List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
 galaxydb  | shenwy   | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =Tc/shenwy           +
           |          |          |             |             | shenwy=CTc/shenwy
 plpgsql   | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
 postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
 template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
(5 rows)

postgres=# \c plpgsql
psql (10.18, server 9.6.23)
You are now connected to database &amp;quot;plpgsql&amp;quot; as user &amp;quot;postgres&amp;quot;.
# 从数据库中把 clustercas_gene 表导出为表格(\t)，且带表头
plpgsql=# \copy clustercas_gene to &amp;#39;/home/shenweiyan/pg/clustercas_gene.txt&amp;#39; with csv header DELIMITER E&amp;#39;\t&amp;#39;;
COPY 3
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;在命令行中执行：
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;# 从 galaxydb 数据库中把 galaxy_user 表导出为表格(\t)，默认不带表头
$ echo &amp;#39;copy &amp;quot;galaxy_user&amp;quot; to stdout&amp;#39; | psql galaxydb &amp;gt; galaxy_user.txt

# 从 galaxydb 数据库中把 galaxy_user 表导出为 sql
$ pg_dump -Upostgres -t galaxy_user -f galaxy_user.sql galaxydb

# 把 galaxy_user.txt 内容导入 galaxy_user 表
galaxydb=# \copy &amp;quot;galaxy_user&amp;quot; from &amp;#39;/home/postgres/galaxy_user.txt&amp;#39;;

# 把 galaxy_user.sql 导入 galaxy_user 表
$ psql -U galaxy -d galaxydb -f galaxy_user.sql
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;h3 id=&#34;赋予所有权限&#34;&gt;赋予所有权限&lt;a class=&#34;headerlink&#34; href=&#34;#赋予所有权限&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;# 把 galaxydb 数据库的所有权限赋予 shenweiyan 用户
postgres=# grant all on database galaxydb to shenweiyan;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;常用数据表操作命令&#34;&gt;常用数据表操作命令&lt;a class=&#34;headerlink&#34; href=&#34;#常用数据表操作命令&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;# 创建 user_table 新表
CREATE TABLE user_table(name VARCHAR(20), signup_date DATE);
# 在 user_table 表中插入数据
INSERT INTO user_table(name, signup_date) VALUES(&amp;#39;张三&amp;#39;, &amp;#39;2013-12-22&amp;#39;);
# 查找 user_table 表记录
SELECT * FROM user_table;
# 更新数据
UPDATE user_table set name = &amp;#39;李四&amp;#39; WHERE name = &amp;#39;张三&amp;#39;;
# 删除记录
DELETE FROM user_table WHERE name = &amp;#39;李四&amp;#39; ;
# 添加 email 字段
ALTER TABLE user_table ADD email VARCHAR(40);
# 更新结构
ALTER TABLE user_table ALTER COLUMN signup_date SET NOT NULL;
# 重命名 signup_date 字段
ALTER TABLE user_table RENAME COLUMN signup_date TO signup;
# 删除字段
ALTER TABLE user_table DROP COLUMN email;
# 表重命名
ALTER TABLE user_table RENAME TO user_tbl;
# 删除表
DROP TABLE IF EXISTS user_tbl;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;4-备份数据库-shell-脚本&#34;&gt;4. 备份数据库 shell 脚本&lt;a class=&#34;headerlink&#34; href=&#34;#4-备份数据库-shell-脚本&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;#!/bin/bash
#PostgreSQL database_backup

#SET VARIABLE-----

DB_NAME=&amp;quot;galaxydb&amp;quot;
DB_USER=&amp;quot;shenweiyan&amp;quot;
BIN_DIR=&amp;quot;/usr/bin/pg_dump&amp;quot;
BACK_DIR=&amp;quot;/data/db_backup/galaxy&amp;quot;
LOG_DIR=&amp;quot;/root/logs&amp;quot;
DATE=&amp;quot;$(date +&amp;#39;%Y%m%d-%H-%M&amp;#39;)&amp;quot;
LogFile=&amp;quot;${LOG_DIR}/${DB_NAME}-bakup.log&amp;quot;
BackNewFile=${DB_NAME}-$DATE.sql
KEEP_TIME=&amp;quot;30&amp;quot;

#BACK_UP----------------------------------------------------

[ ! -d ${BACK_DIR} ] &amp;amp;&amp;amp; mkdir -p ${BACK_DIR}

$BIN_DIR -U $DB_USER -Fc $DB_NAME &amp;gt; $BACK_DIR/${BackNewFile}

echo -----------------------&amp;quot;$(date +&amp;quot;%Y-%m-%d %H:%M:%S&amp;quot;)&amp;quot;----------------------- &amp;gt;&amp;gt; $LogFile

echo  createFile:&amp;quot;$BackNewFile&amp;quot; &amp;gt;&amp;gt; $LogFile

#BACK_UP_FILE_CLEAN ----------------------------------------

find &amp;quot;${BACK_DIR}&amp;quot; -atime +$KEEP_TIME -type f -name &amp;quot;${DB_NAME}-*.sql&amp;quot; -print &amp;gt; ${LOG_DIR}/${DB_NAME}_del_list

echo -e &amp;quot;delete files:\n&amp;quot; &amp;gt;&amp;gt; $LogFile

cat ${LOG_DIR}/${DB_NAME}_del_list | while read LINE
do
    rm -rf $LINE
    echo $LINE &amp;gt;&amp;gt; $LogFile
done

echo -e &amp;quot;---------------------------------------------------------------\n \n&amp;quot; &amp;gt;&amp;gt; $LogFile
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
      <link>https://shenwy.com/yuque/%E6%95%B0%E6%8D%AE%E5%BA%93/PostgreSQL/2019-09-30-pgsql-usage/</link>
      <pubDate>Mon, 30 Sep 2019 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E6%95%B0%E6%8D%AE%E5%BA%93/PostgreSQL/2019-09-30-pgsql-usage/</guid>
      
    </item>
    
    <item>
      <title>阿里云 ECS 更换操作系统</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2019-09-23&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2019-09-23T00:00:00&#39;&gt;2019-09-23&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-07-07&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-07-07T15:08:20&#39;&gt;2021-07-07&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;参考：&lt;a href=&#34;https://help.aliyun.com/document_detail/50134.html?spm=a2c4g.11186623.2.8.6a6447a0NgnzZM#concept-n4k-x3j-ydb&#34;&gt;更换系统盘（公共镜像）&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FqY9-nAGGTmZy7Mems-OBw2BpYAc.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;操作步骤&#34;&gt;操作步骤&lt;a class=&#34;headerlink&#34; href=&#34;#操作步骤&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;登录&lt;a href=&#34;https://ecs.console.aliyun.com/&#34;&gt;ECS 管理控制台&lt;/a&gt;。&lt;/li&gt;
&lt;li&gt;在左侧导航栏，选择&lt;strong&gt;实例与镜像  &amp;gt;  实例&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;在顶部状态栏处，选择地域。&lt;/li&gt;
&lt;li&gt;找到需要更换系统盘的实例，在&lt;strong&gt;操作&lt;/strong&gt;列中，单击&lt;strong&gt;更多  &amp;gt;  实例状态  &amp;gt;  停止&lt;/strong&gt;，并按页面提示停止实例。
    &lt;strong&gt;说明&lt;/strong&gt;  对于按量付费的 VPC 类型实例而言，停机不收费模式下，更换系统盘后可能无法成功启动实例。建议您停止实例时关闭&lt;strong&gt;停机不收费&lt;/strong&gt;。具体操作，请参见&lt;a href=&#34;https://help.aliyun.com/document_detail/63353.html#concept-js1-1fd-5db&#34;&gt;按量付费实例停机不收费&lt;/a&gt;。&lt;/li&gt;
&lt;li&gt;实例停止后，在&lt;strong&gt;操作&lt;/strong&gt;列中，单击&lt;strong&gt;更多  &amp;gt;  磁盘和镜像  &amp;gt;  更换系统盘&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;在弹出的对话框里，仔细阅读更换系统盘注意事项后，单击&lt;strong&gt;确定，更换系统盘&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;在&lt;strong&gt;更换系统盘&lt;/strong&gt;页面上，配置以下参数。
    _ &lt;strong&gt;镜像类型&lt;/strong&gt;：选择&lt;strong&gt;公共镜像&lt;/strong&gt;，并选择需要的镜像版本。
    &lt;strong&gt;说明&lt;/strong&gt;  如果您需要使用其他镜像，请参见&lt;a href=&#34;https://help.aliyun.com/document_detail/25448.html#concept-vbb-ckj-ydb&#34;&gt;更换系统盘（非公共镜像）&lt;/a&gt;。
    _ &lt;strong&gt;系统盘&lt;/strong&gt;：不能更换系统盘的云盘类型，但是您能根据业务需求和新镜像的需求扩容系统盘，最大容量为 500 GiB。扩容时能设置的最小容量与系统盘当前容量有关，如下表所示。
    _ &lt;strong&gt;安全设置。&lt;/strong&gt;
    _ 确认&lt;strong&gt;配置费用&lt;/strong&gt;：目前中国站所有公共镜像都不收费，这里的配置费用指系统盘的费用。系统盘价格，请参见&lt;a href=&#34;https://www.aliyun.com/price/product#/ecs/detail&#34;&gt;云产品价格页&lt;/a&gt;。 * 确认无误后，单击&lt;strong&gt;确定更换&lt;/strong&gt;。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;执行结果&#34;&gt;执行结果&lt;a class=&#34;headerlink&#34; href=&#34;#执行结果&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;登录 ECS 控制台监控系统状态，完成操作系统更换大概需要 10 分钟。完成后，实例会自动启动。&lt;/p&gt;
&lt;h2 id=&#34;后续步骤&#34;&gt;后续步骤&lt;a class=&#34;headerlink&#34; href=&#34;#后续步骤&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;更换系统盘后，您可能需要做以下操作：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;（可选）自动快照策略与磁盘 ID 绑定。更换了新的系统盘后，旧磁盘上应用的自动快照策略自动失效。您需要对新系统盘设置自动快照策略。具体操作，请参见&lt;a href=&#34;https://help.aliyun.com/document_detail/25457.html#concept-nyv-k3l-xdb&#34;&gt;为新的系统盘设置自动快照策略&lt;/a&gt;。&lt;/li&gt;
&lt;li&gt;如果更换前后都是 Linux 系统，而且，实例上原来挂载了数据盘并设置了开机自动挂载分区。更换系统盘后，原来系统盘中的数据盘分区挂载信息丢失。您必须在新系统盘的/etc/fstab 文件写入新分区信息，并挂载分区，不需要对数据盘格式化并分区。操作步骤如下，具体的操作命令，请参见&lt;a href=&#34;https://help.aliyun.com/document_detail/25426.html#concept-jl1-qzd-wdb&#34;&gt;Linux 格式化数据盘&lt;/a&gt;。&lt;/li&gt;
&lt;li&gt;（建议）备份 etc/fstab。&lt;/li&gt;
&lt;li&gt;向 etc/fstab 写入新分区信息。&lt;/li&gt;
&lt;li&gt;查看 etc/fstab 中的新分区信息。&lt;/li&gt;
&lt;li&gt;运行&lt;code&gt;mount&lt;/code&gt;命令挂载分区。&lt;/li&gt;
&lt;li&gt;查看文件系统空间和使用情况：运行命令&lt;code&gt;df -h&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;挂载操作完成后，不需要重启实例即可开始使用新的数据盘。&lt;/li&gt;
&lt;/ul&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%85%8D%E7%BD%AE%E4%BD%BF%E7%94%A8/2019-09-23-alyun-change-os/</link>
      <pubDate>Mon, 23 Sep 2019 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%85%8D%E7%BD%AE%E4%BD%BF%E7%94%A8/2019-09-23-alyun-change-os/</guid>
      
    </item>
    
    <item>
      <title>Python 日期和时间函数使用指南</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2019-09-21&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2019-09-21T00:00:00&#39;&gt;2019-09-21&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-06-30&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-06-30T09:41:18&#39;&gt;2021-06-30&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;作者： Deepanshu Bhalla     
编译： Steven Shen      
标题： &lt;a href=&#34;https://www.listendata.com/2019/07/how-to-use-datetime-in-python.html&#34;&gt;A Complete Guide to Date and Time Functions&lt;/a&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;在本教程中，我们将介绍 python 的 &lt;code&gt;datetime&lt;/code&gt;  模块以及如何使用它来处理日期、时间，以及日期时间的格式化处理。 它包含各种实用示例，可帮助您通过 python 函数更加快捷高效进行日期和时间处理。 一般来说，日期类型列不容易操作，因为它带来很多挑战，例如处理闰年，一个月中的不同天数，不同的日期和时间格式，或者日期值是否以字符串（字符）格式存储等等。&lt;/p&gt;
&lt;h3 id=&#34;1-datatime-模块&#34;&gt;1. datatime  模块&lt;a class=&#34;headerlink&#34; href=&#34;#1-datatime-模块&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;它是一个 python 模块，它提供了几个处理日期和时间的函数。它有以下四个类，在本文的后半部分将解释这些类是如何工作的。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;datetime&lt;/li&gt;
&lt;li&gt;date&lt;/li&gt;
&lt;li&gt;time&lt;/li&gt;
&lt;li&gt;timedelta&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;没有使用真实数据集经验的人可能没有遇到 date columns。在他们的印象中可能会觉得使用日期的机会很少而且不那么重要。为了启发他们，我列出了现实世界的例子，其中使用 &lt;code&gt;datetime&lt;/code&gt;  模块的好处可能是非常明显的。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;选择 2018 年 6 月 30 日活跃的所有储蓄账户持有人，并检查他们的状态是否仍然有效；&lt;/li&gt;
&lt;li&gt;确定在过去 3 个月内提交超过 20 件索赔的被保险人；&lt;/li&gt;
&lt;li&gt;识别在过去 6 个月内进行多笔交易的客户；&lt;/li&gt;
&lt;li&gt;从时间戳值中提取日期。&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&#34;导入-datetime-模块&#34;&gt;导入 &lt;code&gt;datetime&lt;/code&gt;  模块&lt;a class=&#34;headerlink&#34; href=&#34;#导入-datetime-模块&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;您可以使用以下命令导入或加载 &lt;code&gt;datetime&lt;/code&gt;  模块：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;datetime&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;您不需要安装此模块，因为它与 python 软件的安装捆绑在一起。&lt;/p&gt;
&lt;h3 id=&#34;2-dates&#34;&gt;2. Dates&lt;a class=&#34;headerlink&#34; href=&#34;#2-dates&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;这里我们使用 &lt;code&gt;datetime.date&lt;/code&gt;  类来表示日历日期值。 &lt;code&gt;today()&lt;/code&gt;  方法用于获取当前日期。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;datetime&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;datetime&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;date&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;today&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;datetime&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;date&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2019&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;9&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;为了将其显示为正确的日历日期，我们可以将其包装在 &lt;code&gt;print()&lt;/code&gt;  命令中。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;datetime&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;date&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;today&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2019&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;09&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4 id=&#34;21-创建-date-对象&#34;&gt;2.1 创建 Date 对象&lt;a class=&#34;headerlink&#34; href=&#34;#21-创建-date-对象&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;日期类遵循如下所示的语法：&lt;code&gt;**date(year, month, day)**&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dt&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;datetime&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;date&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2019&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;20&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2019&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;20&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4 id=&#34;22-从-date-值中提取-day-month-和-year&#34;&gt;2.2 从 date 值中提取 day, month 和 year&lt;a class=&#34;headerlink&#34; href=&#34;#22-从-date-值中提取-day-month-和-year&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dt&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;datetime&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;date&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2019&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;20&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;day&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;20&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;month&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;year&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2019&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4 id=&#34;23-自定义日期格式&#34;&gt;2.3 自定义日期格式&lt;a class=&#34;headerlink&#34; href=&#34;#23-自定义日期格式&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;您可以使用 &lt;code&gt;strftime&lt;/code&gt;  方法定义日期格式来自定义日期格式。它将日期对象转换为字符串。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dt&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;datetime&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;date&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2019&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;20&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2019&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;20&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;strftime&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;%d&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;-%m-%Y&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;&amp;#39;20-10-2019&amp;#39;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;code&gt;%d&lt;/code&gt;  指的是一个月中的某一天。在 &lt;code&gt;20-10-2019&lt;/code&gt;  中， &lt;code&gt;%d&lt;/code&gt;  返回 20。
&lt;code&gt;%m&lt;/code&gt;  指的是一年中的某个月。在 &lt;code&gt;20-10-2019&lt;/code&gt;  中， &lt;code&gt;%m&lt;/code&gt;  返回 10。
&lt;code&gt;%Y&lt;/code&gt;  指的是年。字母 &lt;strong&gt;&amp;lsquo;Y&amp;rsquo;&lt;/strong&gt; 是大写的。在 &lt;code&gt;20-10-2019&lt;/code&gt;  中，&lt;code&gt;%Y&lt;/code&gt; 返回 2019 年。
&lt;code&gt;%y&lt;/code&gt;  指的是两位数格式的年份。在 &lt;code&gt;20-10-2019&lt;/code&gt;  中，&lt;code&gt;%y&lt;/code&gt; 返回 19。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;其他流行的格式代码：&lt;/strong&gt;
&lt;code&gt;%a&lt;/code&gt; 返回工作日的前三个字母，如  &lt;code&gt;Sun&lt;/code&gt; ；
&lt;code&gt;%A&lt;/code&gt; 返回工作日的完整名称，如  &lt;code&gt;Sunday&lt;/code&gt;；
&lt;code&gt;%b&lt;/code&gt; 返回月份的前三个字母，如  &lt;code&gt;Oct&lt;/code&gt; ；
&lt;code&gt;%B&lt;/code&gt; 返回月份的完整名称，如  &lt;code&gt;October&lt;/code&gt; ；&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dt&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;datetime&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;date&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2019&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;20&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;strftime&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;%d&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;/%m/%Y&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;&amp;#39;20/10/2019&amp;#39;&lt;/span&gt;

&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;strftime&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;%b &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;%d&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;, %Y&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;&amp;#39;Oct 20, 2019&amp;#39;&lt;/span&gt;

&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;strftime&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;%B &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;%d&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;, %Y&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;&amp;#39;October 20, 2019&amp;#39;&lt;/span&gt;

&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;strftime&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;%a&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; %B &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;%d&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;, %Y&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;&amp;#39;Sun October 20, 2019&amp;#39;&lt;/span&gt;

&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;strftime&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;%A %B &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;%d&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;, %Y&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;&amp;#39;Sunday October 20, 2019&amp;#39;&lt;/span&gt;

&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;strftime&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;%A, %B &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;%d&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;, %Y&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;&amp;#39;Sunday, October 20, 2019&amp;#39;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;3-time&#34;&gt;3. Time&lt;a class=&#34;headerlink&#34; href=&#34;#3-time&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;时间值使用 &lt;code&gt;datetime.time&lt;/code&gt;  类定义。它遵循如下所示的语法：
&lt;code&gt;_datetime.time(hour, minute, second, microseconds)_&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;t&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;datetime&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;time&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;21&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;21&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;02&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;03&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4 id=&#34;31-从时间值获取小时分钟和秒&#34;&gt;3.1 从时间值获取小时，分钟和秒&lt;a class=&#34;headerlink&#34; href=&#34;#31-从时间值获取小时分钟和秒&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;t&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;datetime&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;time&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;21&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hour&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;21&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;minute&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;second&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;microsecond&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4 id=&#34;32-将时间转换为-am-pm-格式&#34;&gt;3.2 将时间转换为 AM PM 格式&lt;a class=&#34;headerlink&#34; href=&#34;#32-将时间转换为-am-pm-格式&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;%I&lt;/code&gt; 将 24 小时时间格式转换为 12 小时格式。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;%p&lt;/code&gt;  根据时间值返回 AM PM。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;%H&lt;/code&gt; 返回时间值的小时数。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;%M&lt;/code&gt; 返回时间值的分钟数。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;%S&lt;/code&gt; 返回时间值的秒数。&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;t&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;datetime&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;time&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;21&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;21&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;02&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;03&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;strftime&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;%I:%M %p&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;&amp;#39;09:02 PM&amp;#39;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;4-同时处理-dates-和-time&#34;&gt;4. 同时处理 Dates 和 Time&lt;a class=&#34;headerlink&#34; href=&#34;#4-同时处理-dates-和-time&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;datetime&lt;/code&gt;  库有另一个名为 &lt;code&gt;datetime.datetime&lt;/code&gt;  的类，用于表示日期加时间。你可以称之为时间戳。 &lt;code&gt;now()&lt;/code&gt;  或 &lt;code&gt;today()&lt;/code&gt;  方法的 &lt;code&gt;datetime&lt;/code&gt;  类用于提取当前日期和时间。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dt&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;datetime&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;datetime&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;now&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2019&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;09&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;45&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;46.941261&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;code&gt;%c&lt;/code&gt;  表示当地的日期和时间。&lt;code&gt;%X&lt;/code&gt;  表示当地的时间。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dt&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;datetime&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;datetime&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;now&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2019&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;09&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;45&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;46.941261&lt;/span&gt;

&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;strftime&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;%c&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;&amp;#39;Tue Sep 10 10:45:46 2019&amp;#39;&lt;/span&gt;

&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;strftime&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;%A %B &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;%d&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;%X&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;&amp;#39;Tuesday September 10 10:45:46&amp;#39;&lt;/span&gt;

&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;strftime&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;%A %B &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;%d&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; %H:%M&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;&amp;#39;Tuesday September 10 10:45&amp;#39;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4 id=&#34;41-创建-datetime-对象&#34;&gt;4.1 创建  datetime 对象&lt;a class=&#34;headerlink&#34; href=&#34;#41-创建-datetime-对象&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;datetime&lt;/code&gt;  类的语法如下：
&lt;code&gt;_datetime(year, month, day, hour, minute, second, microsecond)_&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dt&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;datetime&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;datetime&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2019&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;7&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;20&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;51&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2019&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;07&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;20&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;51&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;00&lt;/span&gt;

&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;strftime&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;%d&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;-%m-%Y %H-%M&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;&amp;#39;20-07-2019 10-51&amp;#39;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4 id=&#34;42-在-python-中将字符串转换为-datetime&#34;&gt;4.2 在 python 中将字符串转换为 datetime&lt;a class=&#34;headerlink&#34; href=&#34;#42-在-python-中将字符串转换为-datetime&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;dateutil.parser&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;parse&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;parse&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;March 01, 2019&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2019&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;03&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;01&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;00&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;00&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;00&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;5-如何获取当前的时间&#34;&gt;5. 如何获取当前的时间？&lt;a class=&#34;headerlink&#34; href=&#34;#5-如何获取当前的时间&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;我们可以使用我们在上一节中使用的相同函数，并使用 &lt;code&gt;time()&lt;/code&gt;  方法从返回值中提取时间。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;time&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;6-如何获得当前周的天&#34;&gt;6. 如何获得当前周的天？&lt;a class=&#34;headerlink&#34; href=&#34;#6-如何获得当前周的天&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dt&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;datetime&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;datetime&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;now&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2019&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;09&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;58&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;10.044233&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;strftime&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;%A %B &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;%d&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; %H:%M&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;&amp;#39;Tuesday September 10 10:58&amp;#39;&lt;/span&gt;

&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;isoweekday&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;7-计算未来或过去的日期&#34;&gt;7. 计算未来或过去的日期&lt;a class=&#34;headerlink&#34; href=&#34;#7-计算未来或过去的日期&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;通过使用 &lt;code&gt;timedelta&lt;/code&gt; ，您可以添加或减去天，周，小时，分钟，秒，微秒和毫秒。当您想要计算未来或过去的日期时，它非常有用。假设您要求识别过去 30 天内注册产品的所有客户。要解决此问题，您需要计算今天日期之前 30 天的日期。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dt&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;datetime&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;datetime&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;now&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2019&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;09&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;11&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;01&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;54.959386&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;#30 days ahead&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;delta&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;datetime&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;timedelta&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;days&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;30&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dt&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;delta&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2019&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;11&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;01&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;54.959386&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;#30 days back&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dt&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;delta&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2019&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;08&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;11&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;11&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;01&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;54.959386&lt;/span&gt;

&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;delta&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;datetime&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;timedelta&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;days&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hours&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;minutes&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;30&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;seconds&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;30&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dt&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;delta&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2019&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;09&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;20&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;32&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;24.959386&lt;/span&gt;

&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;delta&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;datetime&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;timedelta&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;weeks&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hours&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;minutes&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;30&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;seconds&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;30&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dt&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;delta&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2019&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;08&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;32&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;24.959386&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;在 &lt;code&gt;timedelta&lt;/code&gt;  中，缺少月份和年份选项，这意味着您无法按月（s）或年（s）计算未来日期增量。要完成此任务，我们可以使用 &lt;code&gt;dateutil&lt;/code&gt;  包。让我们通过提交以下代码来导入此包：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;dateutil.relativedelta&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;如果 &lt;code&gt;dateutil&lt;/code&gt;  包未安装在您的系统上，请通过运行此命令 &lt;code&gt;pip install python-dateutil&lt;/code&gt;  来安装它。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;dateutil.relativedelta&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dt&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;datetime&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;datetime&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2019&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;7&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;20&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;51&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2019&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;07&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;20&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;51&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;00&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;#1 Month ahead&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dt&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;relativedelta&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;months&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=+&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2019&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;08&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;20&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;51&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;00&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;#1 Month Back&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dt&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;relativedelta&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;months&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2019&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;06&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;20&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;51&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;00&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;如果您想知道这个 &lt;code&gt;relativedelta(months = + 1)&lt;/code&gt;  与 &lt;code&gt;datetime.timedelta(days = 30)&lt;/code&gt;  有何不同，请观察两个命令的返回值（结果）。&lt;/p&gt;
&lt;p&gt;由于 7 月有 31 天，提前 30 天使用此 &lt;code&gt;datetime.timedelta(days=30)&lt;/code&gt; 返回 2019-08-19 10:51:00。 &lt;code&gt;relativedelta(months=+1)&lt;/code&gt; 返回 2019-08-20 10:51:00 这是一个完整的 1 个月。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;#Next month, plus one week&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dt&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;relativedelta&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;months&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=+&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;weeks&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=+&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2019&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;08&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;27&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;51&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;00&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;#Next Year&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dt&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;relativedelta&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;years&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=+&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2020&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;07&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;20&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;51&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;00&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4 id=&#34;71-考虑闰年&#34;&gt;7.1 考虑闰年&lt;a class=&#34;headerlink&#34; href=&#34;#71-考虑闰年&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;来自 &lt;code&gt;dateutil&lt;/code&gt;  包的 &lt;code&gt;relativedelta&lt;/code&gt;  方法在计算未来或过去日期时会同时考虑闰年的情况。2000 年是闰年，所以 2 月份有 29 天；但明年 2 月只有 28 天。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;datetime&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;date&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2000&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;29&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;relativedelta&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;years&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=+&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2001&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;02&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;28&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;8-两个日期之间的差异&#34;&gt;8. 两个日期之间的差异&lt;a class=&#34;headerlink&#34; href=&#34;#8-两个日期之间的差异&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;假设您需要计算两个日期之间的天数。当您需要计算特定信息客户的使用期限时，即当他们开立账户（开始日期）和账户关闭时（结束日期）时，这是一个非常常见的数据问题陈述。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;date1&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;datetime&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;date&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2020&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;25&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;date2&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;datetime&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;date&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2019&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;12&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;25&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;diff&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;date1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;date2&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;diff&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;days&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;305&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4 id=&#34;81-如何计算两个日期之间的月数&#34;&gt;8.1 如何计算两个日期之间的月数&lt;a class=&#34;headerlink&#34; href=&#34;#81-如何计算两个日期之间的月数&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;一种方法是计算天数，然后除以 30 得到月数。但它并不总是正确的，因为有些月份有 31 天。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FrEdr7l2wr5CfFc3K9LEOAJzKn1y.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;它是怎么起作用的呢？&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;date1.month - date2.month returns -2&lt;/li&gt;
&lt;li&gt;12*(date1.year - date2.year) returns 12&lt;/li&gt;
&lt;li&gt;-2 + 12 = 10&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;注意：&lt;/strong&gt; 
假设您要计算 31/10/2018 和 01/11/2018 之间的月数，上面建议的方法将返回 1，因为两个日期位于月差异中。您可能会发现它不正确，因为两个日期之间的天数是 1。您是否知道 SAS 软件中的 INTCK 功能（默认设置）也会返回 1？ 返回 1 的用法是什么？ 当您需要将时间序列数据排序到箱中时，它非常有用。例如，每日数据可以累积到月度数据，以作为月度系列进行处理。如果您希望 0 作为月数，则可以使用上面“&lt;em&gt;Not full-proof Solution&lt;/em&gt;”下面显示的代码。&lt;/p&gt;
&lt;h3 id=&#34;9-如何使用-pandas-数据框上的日期&#34;&gt;9. 如何使用  pandas 数据框上的日期？&lt;a class=&#34;headerlink&#34; href=&#34;#9-如何使用-pandas-数据框上的日期&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;在现实世界中，我们通常从外部文件导入数据并将其存储在 pandas DataFrame 中。因此，了解我们如何在 DataFrame 上执行日期和时间操作非常重要。让我们创建一个示例数据框用于说明目的。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;pandas&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;as&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;pd&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;df&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;DataFrame&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;({&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;A&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;2019-01-01&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;2019-05-03&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;2019-07-03&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;
                       &lt;span class=&#34;s2&#34;&gt;&amp;quot;B&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;2019-03-02&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;2019-08-01&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;2019-10-01&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;})&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# Let&amp;#39;s check the column types.&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;df&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dtypes&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;A&lt;/span&gt;    &lt;span class=&#34;nb&#34;&gt;object&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;B&lt;/span&gt;    &lt;span class=&#34;nb&#34;&gt;object&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;dtype&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;object&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;可以看到，这里的 A 列和 B 列都是字符串（character values）。由于这些变量存储在字符串中，因此需要将列转换为 &lt;code&gt;datetime&lt;/code&gt;  对象。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;df&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;A&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;to_datetime&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;df&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;A&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;df&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;B&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;to_datetime&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;df&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;B&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;df&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dtypes&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;A&lt;/span&gt;    &lt;span class=&#34;n&#34;&gt;datetime64&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ns&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;B&lt;/span&gt;    &lt;span class=&#34;n&#34;&gt;datetime64&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ns&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;dtype&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;object&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;为了计算在 pandas dataframe  上使用 A 列和 B 列的天数，您只需要对这两列进行计算。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;df&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;C&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;df&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;B&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;df&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;A&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;df&lt;/span&gt;
           &lt;span class=&#34;n&#34;&gt;A&lt;/span&gt;          &lt;span class=&#34;n&#34;&gt;B&lt;/span&gt;       &lt;span class=&#34;n&#34;&gt;C&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2019&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;01&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;01&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2019&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;03&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;02&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;60&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;days&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2019&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;03&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2019&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;08&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;01&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;90&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;days&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2019&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;07&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;03&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2019&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;01&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;90&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;days&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;我们计算的 C 列采用日期时间格式。为了获得整数格式的差值，您可以提交以下命令。 &lt;code&gt;dt&lt;/code&gt;  可以让 pandas 使用 &lt;code&gt;datetime&lt;/code&gt;  方法。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;df&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;C&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;df&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;B&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;df&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;A&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;days&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;df&lt;/span&gt;
           &lt;span class=&#34;n&#34;&gt;A&lt;/span&gt;          &lt;span class=&#34;n&#34;&gt;B&lt;/span&gt;   &lt;span class=&#34;n&#34;&gt;C&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2019&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;01&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;01&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2019&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;03&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;02&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;60&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2019&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;03&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2019&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;08&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;01&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;90&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2019&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;07&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;03&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2019&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;01&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;90&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4 id=&#34;91-获取过去-3-个月的日期&#34;&gt;9.1 获取过去 3 个月的日期&lt;a class=&#34;headerlink&#34; href=&#34;#91-获取过去-3-个月的日期&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;纯粹的 pythonic 方法是在 lambda 中定义函数，它在所有行上运行。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;dateutil.relativedelta&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;df&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;D&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;df&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;B&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;apply&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;lambda&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;relativedelta&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;months&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;df&lt;/span&gt;
           &lt;span class=&#34;n&#34;&gt;A&lt;/span&gt;          &lt;span class=&#34;n&#34;&gt;B&lt;/span&gt;   &lt;span class=&#34;n&#34;&gt;C&lt;/span&gt;          &lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2019&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;01&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;01&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2019&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;03&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;02&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;60&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2018&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;12&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;02&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2019&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;03&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2019&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;08&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;01&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;90&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2019&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;01&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2019&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;07&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;03&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2019&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;01&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;90&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2019&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;07&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;01&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;另一种方法是使用 &lt;code&gt;pandas&lt;/code&gt;  包的内置函数 &lt;code&gt;DateOffset&lt;/code&gt; ，它可以增加或减少天，月，年，周，小时，分钟，秒，微秒和纳秒。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;df&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;D1&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;df&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;B&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;DateOffset&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;months&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4 id=&#34;92-按日期过滤数据框&#34;&gt;9.2 按日期过滤数据框&lt;a class=&#34;headerlink&#34; href=&#34;#92-按日期过滤数据框&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;假设您只想选择列 B 的值大于 2019 年 5 月 1 日的那些行。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;df&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;df&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;B&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;datetime&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;datetime&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2019&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4 id=&#34;93-选择两个日期之间的数据&#34;&gt;9.3 选择两个日期之间的数据&lt;a class=&#34;headerlink&#34; href=&#34;#93-选择两个日期之间的数据&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;假设您要在两个日期之间从 pandas 数据框中选择行（比如 5 月 1 日到 9 月 30 日之间）。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;df&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;df&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;between&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;datetime&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;datetime&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2019&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;datetime&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;datetime&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2019&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;9&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;30&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))]&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# OR&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;df&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;df&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;B&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;datetime&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;datetime&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2019&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;df&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;B&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;datetime&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;datetime&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2019&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;9&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;30&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;10-如何使用不同的时区&#34;&gt;10. 如何使用不同的时区&lt;a class=&#34;headerlink&#34; href=&#34;#10-如何使用不同的时区&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;很多时候我们在不同的时区有日期值，我们需要将它转换为我们当地的时区。手动解决这个问题并不容易。在 python 中，有一个名为 &lt;code&gt;pytz&lt;/code&gt;  的库用于设置和转换时区。&lt;/p&gt;
&lt;p&gt;您可以通过提交此命令找到所有时区。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;pytz&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;pytz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;all_timezones&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;要在特定时区设置日期时间对象（比如说亚洲/加尔各答），可以使用名为 &lt;code&gt;tzinfo&lt;/code&gt;  的参数。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;dt&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;datetime&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;datetime&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2019&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;7&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;20&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;tzinfo&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pytz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;timezone&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Asia/Kolkata&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;要将其转换为美国/亚利桑那州时区，我们可以使用名为 &lt;code&gt;astimezone&lt;/code&gt;  的方法进行转换。如果你观察到转换后的日期已经改变，是因为这两个时区之间的差异超过 12 小时。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dt&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;datetime&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;datetime&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2019&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;7&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;20&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;tzinfo&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pytz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;timezone&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Asia/Kolkata&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2019&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;07&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;20&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;00&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;53&lt;/span&gt;

&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;astimezone&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pytz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;timezone&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;US/Arizona&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)))&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;2019&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;07&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;19&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;21&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;00&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;07&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;00&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
      <link>https://shenwy.com/yuque/%E7%BC%96%E7%A8%8B%E6%8A%80%E6%9C%AF/Python/2019-09-21-how-to-use-datetime-in-python/</link>
      <pubDate>Sat, 21 Sep 2019 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E7%BC%96%E7%A8%8B%E6%8A%80%E6%9C%AF/Python/2019-09-21-how-to-use-datetime-in-python/</guid>
      
    </item>
    
    <item>
      <title>Python 文件下载并显示下载进度条</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2019-09-19&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2019-09-19T00:00:00&#39;&gt;2019-09-19&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-06-30&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-06-30T09:41:27&#39;&gt;2021-06-30&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;先上代码，后面有空再整理细节：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# -*- coding:utf-8 -*-&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# vim:et:ts=4:sw=4:&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;#!/usr/bin/env python&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;######################################################################&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;__author__&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;ishenweiyan@qq.com&amp;#39;&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;__create__&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;2019-09-19&amp;#39;&lt;/span&gt;
&lt;span class=&#34;vm&#34;&gt;__file__&lt;/span&gt;    &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;download_demo.py&amp;#39;&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;__license__&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;2019 All rights reserved.&amp;#39;&lt;/span&gt;
&lt;span class=&#34;vm&#34;&gt;__doc__&lt;/span&gt;     &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;The test script.&amp;#39;&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;#####################################################################&lt;/span&gt;

&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;os&lt;/span&gt;
&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;urllib.request&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;urlopen&lt;/span&gt;

&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;requests&lt;/span&gt;
&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;tqdm&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;tqdm&lt;/span&gt;
&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;contextlib&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;closing&lt;/span&gt;


&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;ProgressBar&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;object&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;

    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;fm&#34;&gt;__init__&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
                 &lt;span class=&#34;n&#34;&gt;count&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;0.0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
                 &lt;span class=&#34;n&#34;&gt;run_status&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
                 &lt;span class=&#34;n&#34;&gt;fin_status&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
                 &lt;span class=&#34;n&#34;&gt;total&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;100.0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
                 &lt;span class=&#34;n&#34;&gt;unit&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sep&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;/&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
                 &lt;span class=&#34;n&#34;&gt;chunk_size&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;1.0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
        &lt;span class=&#34;nb&#34;&gt;super&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ProgressBar&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;fm&#34;&gt;__init__&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
        &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;info&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;[&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;%s&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;] &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;%s&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;%.2f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;%s&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;%s&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;%.2f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;%s&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;
        &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;title&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;title&lt;/span&gt;
        &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;total&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;total&lt;/span&gt;
        &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;count&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;count&lt;/span&gt;
        &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;chunk_size&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;chunk_size&lt;/span&gt;
        &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;status&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;run_status&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;or&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;&amp;quot;&lt;/span&gt;
        &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fin_status&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;fin_status&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;or&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot; &amp;quot;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;len&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;status&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
        &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;unit&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;unit&lt;/span&gt;
        &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;seq&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sep&lt;/span&gt;

    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;__get_info&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
        &lt;span class=&#34;c1&#34;&gt;# [名称] 状态 进度 单位 分割线 总数 单位&lt;/span&gt;
        &lt;span class=&#34;n&#34;&gt;_info&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;info&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;%&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;status&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
                             &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;count&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;chunk_size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;unit&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;seq&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;total&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;chunk_size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;unit&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;_info&lt;/span&gt;

    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;refresh&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;count&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;status&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
        &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;count&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;count&lt;/span&gt;
        &lt;span class=&#34;c1&#34;&gt;# if status is not None:&lt;/span&gt;
        &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;status&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;status&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;or&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;status&lt;/span&gt;
        &lt;span class=&#34;n&#34;&gt;end_str&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\r&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;
        &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;count&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;=&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;total&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
            &lt;span class=&#34;n&#34;&gt;end_str&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&lt;/span&gt;
            &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;status&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;status&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;or&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fin_status&lt;/span&gt;
        &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;__get_info&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;end&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;end_str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;


&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;download_from_url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dst&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;sd&#34;&gt;&amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;
&lt;span class=&#34;sd&#34;&gt;    @param: url to download file&lt;/span&gt;
&lt;span class=&#34;sd&#34;&gt;    @param: dst place to put the file&lt;/span&gt;
&lt;span class=&#34;sd&#34;&gt;    &amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;
    &lt;span class=&#34;n&#34;&gt;file_size&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;urlopen&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;info&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Content-Length&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;

    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;os&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;path&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;exists&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dst&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
        &lt;span class=&#34;n&#34;&gt;first_byte&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;os&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;path&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;getsize&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dst&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
    &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
        &lt;span class=&#34;n&#34;&gt;first_byte&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;
    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;first_byte&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;file_size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;file_size&lt;/span&gt;
    &lt;span class=&#34;n&#34;&gt;header&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;Range&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;bytes=&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;%s&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;%s&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;%&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;first_byte&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;file_size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)}&lt;/span&gt;
    &lt;span class=&#34;n&#34;&gt;pbar&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;tqdm&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;
        &lt;span class=&#34;n&#34;&gt;total&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;file_size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;initial&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;first_byte&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
        &lt;span class=&#34;n&#34;&gt;unit&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;B&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;unit_scale&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;True&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;desc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;split&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;/&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)[&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;
    &lt;span class=&#34;n&#34;&gt;req&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;requests&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;headers&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;header&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;stream&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;True&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
    &lt;span class=&#34;k&#34;&gt;with&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;open&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dst&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;ab&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
        &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;chunk&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;req&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;iter_content&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;chunk_size&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1024&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
            &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;chunk&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
                &lt;span class=&#34;n&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;write&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;chunk&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
                &lt;span class=&#34;n&#34;&gt;pbar&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;update&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1024&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
    &lt;span class=&#34;n&#34;&gt;pbar&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;close&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;file_size&lt;/span&gt;

&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;__main__&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;():&lt;/span&gt;

    &lt;span class=&#34;n&#34;&gt;url&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;http://ftp.ncbi.nlm.nih.gov/gene/DATA/gene2ensembl.gz&amp;#39;&lt;/span&gt;
    &lt;span class=&#34;n&#34;&gt;file_name&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;gene2ensembl.gz&amp;#39;&lt;/span&gt;

&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;sd&#34;&gt;&amp;#39;&amp;#39;&amp;#39;&lt;/span&gt;
&lt;span class=&#34;sd&#34;&gt;    with closing(requests.get(url, stream=True)) as response:&lt;/span&gt;
&lt;span class=&#34;sd&#34;&gt;        chunk_size = 1024 # 单次请求最大值&lt;/span&gt;
&lt;span class=&#34;sd&#34;&gt;        content_size = int(response.headers[&amp;#39;content-length&amp;#39;]) # 内容体总大小&lt;/span&gt;
&lt;span class=&#34;sd&#34;&gt;        progress = ProgressBar(file_name, total=content_size,&lt;/span&gt;
&lt;span class=&#34;sd&#34;&gt;                                     unit=&amp;quot;KB&amp;quot;, chunk_size=chunk_size, run_status=&amp;quot;正在下载&amp;quot;, fin_status=&amp;quot;下载完成&amp;quot;)&lt;/span&gt;
&lt;span class=&#34;sd&#34;&gt;        with open(file_name, &amp;quot;wb&amp;quot;) as file:&lt;/span&gt;
&lt;span class=&#34;sd&#34;&gt;            for data in response.iter_content(chunk_size=chunk_size):&lt;/span&gt;
&lt;span class=&#34;sd&#34;&gt;                file.write(data)&lt;/span&gt;
&lt;span class=&#34;sd&#34;&gt;                progress.refresh(count=len(data))&lt;/span&gt;
&lt;span class=&#34;sd&#34;&gt;    &amp;#39;&amp;#39;&amp;#39;&lt;/span&gt;
    &lt;span class=&#34;n&#34;&gt;download_from_url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;file_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;vm&#34;&gt;__name__&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;__main__&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
    &lt;span class=&#34;n&#34;&gt;__main__&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;参考资料&#34;&gt;参考资料&lt;a class=&#34;headerlink&#34; href=&#34;#参考资料&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Python 玩家，《&lt;a href=&#34;https://blog.csdn.net/programmer_yf/article/details/80512428&#34;&gt;自制一个 python 下载文件的进度条模块！&lt;/a&gt;》，CSDN&lt;/li&gt;
&lt;li&gt;微寒 Super，《&lt;a href=&#34;https://blog.csdn.net/supercooly/article/details/51046561&#34;&gt;Python3 使用 requests 模块显示下载进度&lt;/a&gt;》，CSDN&lt;/li&gt;
&lt;li&gt;Kenneth Reitz，《&lt;a href=&#34;http://cn.python-requests.org/en/latest/user/advanced.html&#34;&gt;高级用法 — Requests 2.18.1 文档&lt;/a&gt;》，Requests 2.18.1 文档&lt;/li&gt;
&lt;li&gt;昊天 seo，《&lt;a href=&#34;https://www.168seo.cn/python/24286.html&#34;&gt;Python3 使用 requests 模块显示下载视频并且显示进度&lt;/a&gt;》，WordPress 博客&lt;/li&gt;
&lt;/ul&gt;</description>
      <link>https://shenwy.com/yuque/%E7%BC%96%E7%A8%8B%E6%8A%80%E6%9C%AF/Python/2019-09-19-xu2eg5/</link>
      <pubDate>Thu, 19 Sep 2019 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E7%BC%96%E7%A8%8B%E6%8A%80%E6%9C%AF/Python/2019-09-19-xu2eg5/</guid>
      
    </item>
    
    <item>
      <title>GO 学习资料</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2019-09-18&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2019-09-18T00:00:00&#39;&gt;2019-09-18&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-04-12&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-04-12T14:32:49&#39;&gt;2021-04-12&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://gocn.vip/article/36&#34;&gt;Python 程序员的 Golang 学习指南（I）: Go 之初体验&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://gocn.vip/question/1615&#34;&gt;Go 零基础编程入门教程&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://eddycjy.gitbook.io/golang/&#34;&gt;跟煎鱼学 Go&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;软软 Go 语言上课链接：&lt;a href=&#34;https://docs.microsoft.com/zh-cn/learn/paths/go-first-steps/&#34;&gt;https://docs.microsoft.com/zh-cn/learn/paths/go-first-steps/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <link>https://shenwy.com/yuque/%E7%BC%96%E7%A8%8B%E6%8A%80%E6%9C%AF/Go/2019-09-18-ygzmzn/</link>
      <pubDate>Wed, 18 Sep 2019 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E7%BC%96%E7%A8%8B%E6%8A%80%E6%9C%AF/Go/2019-09-18-ygzmzn/</guid>
      
    </item>
    
    <item>
      <title>如何同步更新 Github 上 Fork 的项目？</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2019-09-12&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2019-09-12T00:00:00&#39;&gt;2019-09-12&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-11-03&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-11-03T15:46:14&#39;&gt;2021-11-03&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h3 id=&#34;github-fork-过程概述&#34;&gt;Github Fork 过程概述&lt;a class=&#34;headerlink&#34; href=&#34;#github-fork-过程概述&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;在 Github 上有很多优秀的开源项目，相信每一位热衷于技术的朋友都会在 Github 上 Fork 一些感兴趣的项目，然后在本地修改并提交。本文以 Galaxy Project 下的 galaxy 仓库为例，在 Github 上 Fork 该项目，更新提交的一个完整过程如下图所示：&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FoTEC0UrbDMw2OuK_tZh5lzOjAU8.png&#34; /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;fork 一个项目，比如 galaxy，该操作会复制该项目的所有历史提交内容到个人仓库中，并生成一个相同的项目；&lt;/li&gt;
&lt;li&gt;clone 之前 fork 的项目到本地计算机中；&lt;/li&gt;
&lt;li&gt;在本地仓库中更新某些文件；&lt;/li&gt;
&lt;li&gt;提交更新的文件到本地仓库；&lt;/li&gt;
&lt;li&gt;将本地仓库的更改内容推送 push 到个人 github 远程仓库；&lt;/li&gt;
&lt;li&gt;创建 pull 请求，既可以把 fork 原始项目中别人的更新同步到自己的 github 仓库中，也可以提交个人更新的内容到 fork 的原始项目。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;我 fork 的  &lt;a href=&#34;https://github.com/galaxyproject/galaxy&#34;&gt;galaxyproject/galaxy&lt;/a&gt;  项目如下：
&lt;img alt=&#34;1-shen-galaxy-master.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FuLbQzEQw_2qBwLaPfz2BBkBaipy.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/galaxyproject/galaxy&#34;&gt;galaxyproject/galaxy&lt;/a&gt;  项目 master 版本最新进展如下，可以看到已经有了很大新的代码提交：
&lt;img alt=&#34;2-galaxyproject-master.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FkQ-d450LKDnCnhGIjtNtnoVXN7R.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;下面我们简单介绍一下，如何同被 fork 的项目保持同步更新，将以 galaxyproject/galaxy  项目为例。&lt;/p&gt;
&lt;h3 id=&#34;fork-同步更新步骤&#34;&gt;fork 同步更新步骤&lt;a class=&#34;headerlink&#34; href=&#34;#fork-同步更新步骤&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;打开自己的 github 中 fork 的项目，打开 Code 选项卡，点击下面的 &lt;strong&gt;&amp;ldquo;New pull request&amp;rdquo;&lt;/strong&gt; 创建一个新的 pull 请求；&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img alt=&#34;3-new-pull-request.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Frjfr8h3daSvJkimzvCswOV_Kdmd.png&#34; /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;在 &lt;strong&gt;Comparing chanages&lt;/strong&gt; 页面，如下图所示，这时 base fork 默认是你 fork 的项目，而 head fork 则默认是你自己的仓库。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img alt=&#34;5-compare-change.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FqJK_irtxyxIKLRMj0gR8_360rA2.png&#34; /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;在上图中进行选择（前面的 base-fork 选择自己的 github 仓库）后会出现如下图所示页面，这时需要点击 &lt;strong&gt;&amp;ldquo;compare across forks&amp;rdquo;&lt;/strong&gt;，再一次进行选择。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img alt=&#34;5.1-compare-fork.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FqZx4b3roNh9ZeI14VqRyLPEiZVh.png&#34; /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;具体选择如下：base:master 是自己仓库和分支，后面选择 head fork, compare:master 是你 fork 项目来源的仓库和分支，可以对比两个项目前后的变化情况。然后点击 &lt;strong&gt;&amp;ldquo;Create pull request&amp;rdquo;&lt;/strong&gt;，创建新的 pull 请求。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img alt=&#34;compare-change.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FnI99s09kYyCTUuXCsoa-wh-d7hj.png&#34; /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;填写标题（Title）和评论（Comment），并点击 Create pull request。Preview 可以预览评论效果，右侧有 5 个选项可以设置检阅用户（Reviewers）、分配给哪个用户（Assignees）、Labels 标签（bug、duplocate、enhancement、help wanted、invalid、question、wontfix，也支持自定义）、项目（Projects），以及里程碑事件（Milestone）。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img alt=&#34;pull-request-commit.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FsMlmWA_jPu4mt4ic5nx3vIBS5K7.png&#34; /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;点击 &lt;strong&gt;&amp;ldquo;Create pull request&amp;rdquo;&lt;/strong&gt; 之后，就可以在 Pull request 中看到刚才提交的 comment，如下所示。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img alt=&#34;update-master.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fu8ECaQSoxmoY26-j4XZB5xq8lwa.png&#34; /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;可以看到期间有很多的提交更新，往下翻可以找到如下图所示，点击** &amp;ldquo;Merge pull request&amp;rdquo;**。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img alt=&#34;6-merge-master-pull-request.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FiQUFpRTizMW1JamrEEeDUfruPsn.png&#34; /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;填写 Merge 的评论并且提交，如果有冲突一定要先解决冲突，然后就全部 OK 了。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img alt=&#34;7-confirm-merge.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FqSP4BB1N4wv5rIfi5XY9dQGlwEA.png&#34; /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;最后，再次打开自己仓库的 galaxy 项目，可以看到项目已更新到最新版本，和最开始 galaxy 原始项目内容一致了。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img alt=&#34;8-galaxy-master-fork.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fl89acRkvA2WUX_ZTLRB3dp4XDqk.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;2-galaxyproject-master.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FkQ-d450LKDnCnhGIjtNtnoVXN7R.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;总结&#34;&gt;总结&lt;a class=&#34;headerlink&#34; href=&#34;#总结&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;本文讲解了同步更新 Github 上 Fork 项目的其中一种方法，还有其他的方法比如可以删除个人 github 中 fork 的该项目然后重新 fork，这种方式不能合并自己已更新的代码；还有另外一种方式是在本地建立两个仓库，把两个远程库都 clone 到本地，然后拉取原 fork 项目更新到本地，合并更新，最后 push 到你个人的 github 即可。&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E7%89%88%E6%9C%AC%E6%8E%A7%E5%88%B6/2019-09-12-github-fork-update/</link>
      <pubDate>Thu, 12 Sep 2019 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E7%89%88%E6%9C%AC%E6%8E%A7%E5%88%B6/2019-09-12-github-fork-update/</guid>
      
    </item>
    
    <item>
      <title>Gitbook 安装与使用笔记</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2019-09-06&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2019-09-06T00:00:00&#39;&gt;2019-09-06&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-06-25&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-06-25T10:45:51&#39;&gt;2021-06-25&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/GitbookIO/gitbook&#34;&gt;Gitbook&lt;/a&gt;  是基于 Node.js 的命令行工具，用来创建漂亮的电子书，它使用 Markdown 或 AsciiDoc 语法来撰写内容，用 Git 进行版本控制，且可以托管在 Github 上。Gitbook 可以将作品编译成网站、 PDF、 ePub 和 MOBI 等多重格式。&lt;/p&gt;
&lt;h3 id=&#34;1-安装&#34;&gt;1. 安装&lt;a class=&#34;headerlink&#34; href=&#34;#1-安装&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;首先，安装 Node.js。GitBook 依赖 Node.js 环境。如果您的系统中还未安装 Node.js，请到  &lt;a href=&#34;https://nodejs.org/en/&#34;&gt;Node.js 官方网站&lt;/a&gt;，根据你所使用的系统下载对应的版本。如果已安装则略过本步骤。&lt;/p&gt;
&lt;p&gt;第二，安装 GitBook 命令行工具。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;npm&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;gitbook&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-g

$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ll&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/local/software/node-v6.12.0/bin/gitbook
lrwxrwxrwx&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;shenweiyan&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bioinfo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;42&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Sep&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;6&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;10&lt;/span&gt;:39&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/local/software/node-v6.12.0/bin/gitbook&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;../lib/node_modules/gitbook/bin/gitbook.js

$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;gitbook&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-h
You&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;need&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;gitbook-cli&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;have&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;access&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;gitbook&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;command&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;anywhere&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;on&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;your&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;system.
If&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;you&lt;span class=&#34;err&#34;&gt;&amp;#39;&lt;/span&gt;ve&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;installed&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;this&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;globally,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;you&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;need&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;uninstall&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;it.
&amp;gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Run&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;npm uninstall -g gitbook&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;npm install -g gitbook-cli&amp;quot;&lt;/span&gt;
shenweiyan@ecs-steven&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;11&lt;/span&gt;:15:01&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/ifs1

&lt;span class=&#34;c1&#34;&gt;# gitbook-cli 是 gitbook 的一个命令行工具, 通过它可以在电脑上安装和管理 gitbook 的多个版本.&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;npm&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-g&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;gitbook-cli

$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;gitbook&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-h

&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Usage:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;gitbook&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;options&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;command&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;


&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Options:

&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;-v,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--gitbook&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;version&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;specify&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;GitBook&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;version&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;use
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;-d,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--debug&lt;span class=&#34;w&#34;&gt;              &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;enable&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;verbose&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;error
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;-V,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--version&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;Display&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;running&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;versions&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;gitbook&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;and&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;gitbook-cli
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;-h,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--help&lt;span class=&#34;w&#34;&gt;               &lt;/span&gt;output&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;usage&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;information


&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Commands:

&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;ls&lt;span class=&#34;w&#34;&gt;                        &lt;/span&gt;List&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;versions&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;installed&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;locally
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;current&lt;span class=&#34;w&#34;&gt;                   &lt;/span&gt;Display&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;currently&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;activated&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;version
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;ls-remote&lt;span class=&#34;w&#34;&gt;                 &lt;/span&gt;List&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;remote&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;versions&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;available&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;fetch&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;version&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;           &lt;/span&gt;Download&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;and&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;a&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;lt;version&amp;gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;alias&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;folder&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;version&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Set&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;an&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;alias&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;named&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;lt;version&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pointing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;lt;folder&amp;gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;uninstall&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;version&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;Uninstall&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;a&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;version
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;update&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;tag&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;              &lt;/span&gt;Update&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;latest&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;version&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;GitBook
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;help&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;                      &lt;/span&gt;List&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;commands&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;GitBook
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;*&lt;span class=&#34;w&#34;&gt;                         &lt;/span&gt;run&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;a&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;command&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;a&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;specific&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;gitbook&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;version
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;2-制作文档步骤&#34;&gt;2. 制作文档步骤&lt;a class=&#34;headerlink&#34; href=&#34;#2-制作文档步骤&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;使用 GitBook 命令行工具制作文档的步骤，如下：&lt;/p&gt;
&lt;h4 id=&#34;21-新建-gitbook-项目&#34;&gt;2.1 新建 GitBook 项目&lt;a class=&#34;headerlink&#34; href=&#34;#21-新建-gitbook-项目&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;新建一个目录，并进入该目录使用 gitbook 命令初始化电子书项目。举个例子，现在要创建一个名为“MyBook”的空白电子书项目，如下所示：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;mkdir&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;MyBook&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;#新建目录&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;MyBook&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;#进入目录&lt;/span&gt;
gitbook&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;init&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;#初始化目录&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;初始化后的目录中会出现“README.md”和“SUMMARY.md”两个基本文件。每个作品目录中这两个文件都是必须的。README.md 是作品的介绍，SUMMARY.md 是作品的目录结构，里面要包含一个章节标题和文件索引的列表&lt;/p&gt;
&lt;h4 id=&#34;22-编辑电子书内容&#34;&gt;2.2 编辑电子书内容&lt;a class=&#34;headerlink&#34; href=&#34;#22-编辑电子书内容&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;首先，GitBook 使用 &lt;code&gt;SUMMARY.md&lt;/code&gt;  文件组织整个内容的目录，如：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# Summary&lt;/span&gt;

*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;简介&lt;span class=&#34;o&#34;&gt;](&lt;/span&gt;README.md&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;常见问题&lt;span class=&#34;o&#34;&gt;](&lt;/span&gt;Faq.md&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;如上面目录中“常见问题”章节的内容，就存放在名为  &lt;code&gt;Faq.md&lt;/code&gt;  的纯文本文件中，md 文件使用  &lt;a href=&#34;http://wowubuntu.com/markdown/&#34;&gt;markdown 语法&lt;/a&gt;  编辑，规则非常简单，几分钟就可以学会。&lt;/p&gt;
&lt;h4 id=&#34;23-预览电子书&#34;&gt;2.3 预览电子书&lt;a class=&#34;headerlink&#34; href=&#34;#23-预览电子书&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;当内容书写完毕后，可以在终端中输入如下命令，实现实时预览：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;gitbook&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;serve
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;code&gt;gitbook serve&lt;/code&gt;  命令实际上会首先调用  &lt;code&gt;gitbook build&lt;/code&gt;  编译书籍，完成以后会打开一个 web 服务器，监听本地 4000 端口，在浏览器中输入  &lt;code&gt;http://localhost:4000&lt;/code&gt;，即可打开电子书。&lt;/p&gt;
&lt;h4 id=&#34;24-发布电子书&#34;&gt;2.4 发布电子书&lt;a class=&#34;headerlink&#34; href=&#34;#24-发布电子书&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;当电子书内容制作好后，可以使用如下命令，生成 html 版本的电子书：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;gitbook&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;build
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;该命令会在当前文件夹中生成  &lt;code&gt;_book&lt;/code&gt;  文件夹，用户可以将这个文件夹内容托管到网上，从而实现内容的发布。&lt;/p&gt;
&lt;h3 id=&#34;3-制作多级目录&#34;&gt;3. 制作多级目录&lt;a class=&#34;headerlink&#34; href=&#34;#3-制作多级目录&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;GitBook 使用  &lt;code&gt;SUMMURY.md&lt;/code&gt;  文件实现目录结构的设定，在该文件中，可以通过缩进实现多级目录的效果，如：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;第一章&lt;span class=&#34;o&#34;&gt;](&lt;/span&gt;section1/README.md&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;第一节&lt;span class=&#34;o&#34;&gt;](&lt;/span&gt;section1/example1.md&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;第二节&lt;span class=&#34;o&#34;&gt;](&lt;/span&gt;section1/example2.md&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;第二章&lt;span class=&#34;o&#34;&gt;](&lt;/span&gt;section2/README.md&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;第一节&lt;span class=&#34;o&#34;&gt;](&lt;/span&gt;section2/example1.md&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;如上所示，章节的 md 文件，还可以存放在子文件夹中。另外，GitBook 的目录，限定为三级。&lt;/p&gt;
&lt;p&gt;用户还可以通过使用标题或者水平分割线标识将 GitBook 目录分为几个不同的部分：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# Summary&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;### Part I&lt;/span&gt;

*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;Introduction&lt;span class=&#34;o&#34;&gt;](&lt;/span&gt;README.md&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;Writing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;is&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;nice&lt;span class=&#34;o&#34;&gt;](&lt;/span&gt;part1/writing.md&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;GitBook&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;is&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;nice&lt;span class=&#34;o&#34;&gt;](&lt;/span&gt;part1/gitbook.md&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;### Part II&lt;/span&gt;

*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;We&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;love&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;feedback&lt;span class=&#34;o&#34;&gt;](&lt;/span&gt;part2/feedback_please.md&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;Better&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tools&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;authors&lt;span class=&#34;o&#34;&gt;](&lt;/span&gt;part2/better_tools.md&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;

----

*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;Last&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;part&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;without&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;title&lt;span class=&#34;o&#34;&gt;](&lt;/span&gt;part3/title.md&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E7%9F%A5%E8%AF%86%E7%AE%A1%E7%90%86/2019-09-06-ga7bft/</link>
      <pubDate>Fri, 06 Sep 2019 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E7%9F%A5%E8%AF%86%E7%AE%A1%E7%90%86/2019-09-06-ga7bft/</guid>
      
    </item>
    
    <item>
      <title>博客 | hugo 博客添加 disqus 评论系统</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2019-08-28&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2019-08-28T00:00:00&#39;&gt;2019-08-28&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-06-30&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-06-30T09:36:31&#39;&gt;2021-06-30&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;打开 diqus 官网：&lt;a href=&#34;http://disqus.com/&#34;&gt;http://disqus.com&lt;/a&gt;，点击 &amp;ldquo;GET STARTED&amp;rdquo; 进入注册页面：
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fm0Nvud2wM-Qmbfob3ehCL_rdOmd.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;选择 &amp;ldquo;I want to install Disqus on my site&amp;rdquo;，进入&amp;rdquo;Create&amp;rdquo; 创建页面：
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fiq4H0QXlYmvbO60hCDMeEUbNEUe.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;在创建页面填写网站信息：
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FvB1DauKhovYmXFfiwPY6HosIROR.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;在 &amp;ldquo;Choose a plan&amp;rdquo; 页面，拉到最下面，选择免费的 &amp;ldquo;Basic&amp;rdquo; 版本，点击 &amp;ldquo;Subscribe Now&amp;rdquo;：
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FmxqzjzaHNEoBu_uoO05DIwPGTX7.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;在 &amp;ldquo;Choose a platform&amp;rdquo; 选择博客的平台类型，对于 hugo 我们选择页面最下面的 &amp;ldquo;Universal Code&amp;rdquo;：
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FqIXNu0hV9zS8tceXMCAmm9eCAtB.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;把 &amp;ldquo;Install instructions for Universal Code - Disqus Admin&amp;rdquo; 页面的代码拷贝到 hugo 博客的  layouts/partials/disqus.html 文件：
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FjM1YaY7MfIwDdKxFCW-wTocPfrb.png&#34; /&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;disqus_thread&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;script&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;cm&#34;&gt;/**&lt;/span&gt;
&lt;span class=&#34;cm&#34;&gt;   *  RECOMMENDED CONFIGURATION VARIABLES: EDIT AND UNCOMMENT THE SECTION BELOW TO INSERT DYNAMIC VALUES FROM YOUR PLATFORM OR CMS.&lt;/span&gt;
&lt;span class=&#34;cm&#34;&gt;   *  LEARN WHY DEFINING THESE VARIABLES IS IMPORTANT: https://disqus.com/admin/universalcode/#configuration-variables*/&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;cm&#34;&gt;/*&lt;/span&gt;
&lt;span class=&#34;cm&#34;&gt;var disqus_config = function () {&lt;/span&gt;
&lt;span class=&#34;cm&#34;&gt;this.page.url = &amp;quot;{{ .Permalink }}&amp;quot;;  // Replace PAGE_URL with your page&amp;#39;s canonical URL variable&lt;/span&gt;
&lt;span class=&#34;cm&#34;&gt;this.page.identifier = &amp;quot;{{ .Permalink }}&amp;quot;; // Replace PAGE_IDENTIFIER with your page&amp;#39;s unique identifier variable&lt;/span&gt;
&lt;span class=&#34;cm&#34;&gt;};&lt;/span&gt;
&lt;span class=&#34;cm&#34;&gt;*/&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// DON&amp;#39;T EDIT BELOW THIS LINE&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;var&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;d&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;document&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;d&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;createElement&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;script&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;src&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;https://shen-hugo-blog.disqus.com/embed.js&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;setAttribute&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;data-timestamp&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;ow&#34;&gt;new&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;Date&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;());&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;d&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;head&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;||&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;d&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;body&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;).&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;appendChild&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;})();&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;script&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;noscript&lt;/span&gt;
  &lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;Please enable JavaScript to view the
  &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;href&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;https://disqus.com/?ref_noscript&amp;quot;&lt;/span&gt;
    &lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;comments powered by Disqus.&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;a&lt;/span&gt;
  &lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;noscript&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;最后，在 &amp;ldquo;Install instructions for Universal Code - Disqus Admin&amp;rdquo; 页面拉到最下面，点击 &amp;ldquo;Configure&amp;rdquo;：
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FvW6lksIeO95ArDtIzT1_oFVQ-dl.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;在 &amp;ldquo;Configure&amp;rdquo; 页面填写完善网站的相关信息，点击 &amp;ldquo;Complete Setup&amp;rdquo; 完成设置。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FjPQ-fQXnTEvXv8NwQnSVpkakm23.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;在 hugo 博客的  config.toml 配置文件中增加 &lt;code&gt;disqusShortname&lt;/code&gt;  参数：
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FptzgYP-5erH5oeiMS-se8b7g7nU.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;在 hugo 博客  layouts 目录下的模板中引入 &lt;code&gt;disqus.html&lt;/code&gt;  模板：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;p&#34;&gt;{{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;partial&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;disqus.html&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;最后，执行 hugo，重新渲染生成所有的静态博客文件，push 到 github pages，完成所有操作。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FgU5Coq-uy53JF_ELjI7JedghJOd.png&#34; /&gt;&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E9%9D%99%E6%80%81%E7%BD%91%E7%AB%99/2019-08-28-disqus-for-hugo/</link>
      <pubDate>Wed, 28 Aug 2019 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E9%9D%99%E6%80%81%E7%BD%91%E7%AB%99/2019-08-28-disqus-for-hugo/</guid>
      
    </item>
    
    <item>
      <title>前端移动端适配方案之 rem</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2019-08-23&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2019-08-23T00:00:00&#39;&gt;2019-08-23&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-06-25&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-06-25T10:53:21&#39;&gt;2021-06-25&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h3 id=&#34;一前言&#34;&gt;一、前言&lt;a class=&#34;headerlink&#34; href=&#34;#一前言&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;这几天在折腾 hugo 博客的时候发现有不少的博客都全面使用了 rem 进行移动端适配处理，相比最长使用的  em，px，pt，这里记录一下对 rem 的一些入门理解。&lt;/p&gt;
&lt;h3 id=&#34;二兼容性&#34;&gt;二、兼容性&lt;a class=&#34;headerlink&#34; href=&#34;#二兼容性&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;rem 目前支持大部分主流浏览器；在移动端 ios-6.1 系统以上，android-2.1 系统以上都支持。详细的各种设备支持列表可以在  &lt;a href=&#34;https://caniuse.com/#search=rem&#34;&gt;https://caniuse.com/#search=rem&lt;/a&gt;  查看。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FueaRc-H255-CYs67EmLOl3NILTT.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;三rem-设置字体大小&#34;&gt;三、rem 设置字体大小&lt;a class=&#34;headerlink&#34; href=&#34;#三rem-设置字体大小&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;rem 是（font size of the root element），意思就是根据网页的根元素来设置字体大小，和 em（font size of the element）的区别是，em 是根据其父元素的字体大小来设置，而 rem 是根据网页的跟元素（html）来设置字体大小的。&lt;/p&gt;
&lt;p&gt;举一个简单的例子，现在大部分浏览器 IE9+，Firefox、Chrome、Safari、Opera，如果我们不修改相关的字体配置，都是默认显示 font-size 是 16px 即：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;html { font-size:16px; }
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;那么如果我们想给一个 p 标签设置 12px 字体大小那么用 rem 来写就是：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;p { font-size: 0.75rem; //12÷16=0.75（rem） }
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;基本上使用 rem 这个单位来设置字体大小基本上是这个套路，好处是假如用户自己修改了浏览器的默认字体大小，那么使用 rem 就可以根据用户的调整的大小来显示了。 但是 rem 可以适用于字体，同样可以用于 &lt;code&gt;width&lt;/code&gt; , &lt;code&gt;height&lt;/code&gt; , &lt;code&gt;margin&lt;/code&gt;  这些样式的单位。&lt;/p&gt;
&lt;p&gt;原文：&lt;a href=&#34;https://gameinstitute.qq.com/community/detail/105566&#34;&gt;https://gameinstitute.qq.com/community/detail/105566&lt;/a&gt;&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E5%89%8D%E7%AB%AF/2019-08-23-css-rem/</link>
      <pubDate>Fri, 23 Aug 2019 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E5%89%8D%E7%AB%AF/2019-08-23-css-rem/</guid>
      
    </item>
    
    <item>
      <title>GitHub 的项目徽章</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2019-08-21&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2019-08-21T00:00:00&#39;&gt;2019-08-21&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-06-30&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-06-30T09:37:19&#39;&gt;2021-06-30&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;GitHub 项目的 README.md 中可以添加徽章（Badge）对项目进行标记和说明，这些好看的小图标不仅简洁美观，而且还包含了清晰易读的信息。&lt;/p&gt;
&lt;p&gt;GitHub 徽标的官方网站是  &lt;a href=&#34;http://shields.io/&#34;&gt;http://shields.io/&lt;/a&gt;，我们可以在官网预览绝大部分的徽标样式，然后选择自己喜欢的（当然首先需要适用于自己的目标项目）徽标，添加到自己的项目文档中去。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fp90EVTf0C6how5YdnxSq6FdE2Qt.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;生成已有的标签&#34;&gt;生成已有的标签&lt;a class=&#34;headerlink&#34; href=&#34;#生成已有的标签&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;打开  GitHub 徽标的官方网站  &lt;a href=&#34;http://shields.io/&#34;&gt;http://shields.io/&lt;/a&gt;，输入你在 Github 的 repo URL，即可看到 issues、forks、stars 相关的图标及代码。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&#34;galaxy-badges.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FtCvMnaB2Vwt1haUBIcAkQp41Jxe.png&#34; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;点击图标或者代码，即可进入设置页，设置图标的颜色、样式等属性，最后选择你想要的 markdown 或者 URL 代码到 README.md 或者项目的文档页面即可。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&#34;galaxy-star.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FqG2PLtNfOGR8dk7YVlS5_g5XeJs.png&#34; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;一些常见比较好玩的  Badges&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Ft3Ua1_WNpygDdZc6mTfaq7BAeNb.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;生成自定义徽章标签&#34;&gt;生成自定义徽章标签&lt;a class=&#34;headerlink&#34; href=&#34;#生成自定义徽章标签&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;如果我们想要生成的徽章字样和颜色  &lt;a href=&#34;http://shields.io/&#34;&gt;shields.io&lt;/a&gt;  上面没有怎么办?例如我们想生成一个类似的徽章我们应该怎么做呢?&lt;/p&gt;
&lt;p&gt;首先，我们进去  &lt;a href=&#34;https://shields.io/&#34;&gt;https://shields.io/&lt;/a&gt; ，在 shields 网站拉到最后，也就是 &amp;ldquo;You Badge&amp;rdquo; 部分填写自定义的 label、message、color 信息。
&lt;img alt=&#34;bioitee-badge.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FsoGHVozIF9cUOC8UX_ZMTzEYMEh.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;然后，点击 &amp;ldquo;Make Badge&amp;rdquo; 按钮就可以生成我们想要的任何徽章了！
&lt;img alt=&#34;bioitee-badge-img.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FgN94NqR2gZKLgWwvcX5PeaFzd6h.png&#34; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;如果我们在写 markdown 的时候想为我们的徽章或者进度条添加点击跳转的超链接，可以使用超链接和图片的语法嵌套来写，具体可以参照 markdown 标准语法。&lt;/li&gt;
&lt;li&gt;自定义徽章和进度条由于参数是写死的，不会根据网络的数据自动变化上面的文字，所以，这些标签是静态的，修改的时候需要我们手动更改 URL。&lt;/li&gt;
&lt;/ul&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E7%89%88%E6%9C%AC%E6%8E%A7%E5%88%B6/2019-08-21-github-badge/</link>
      <pubDate>Wed, 21 Aug 2019 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E7%89%88%E6%9C%AC%E6%8E%A7%E5%88%B6/2019-08-21-github-badge/</guid>
      
    </item>
    
    <item>
      <title>语雀图片的同步迁移解决方案</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2019-08-08&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2019-08-08T00:00:00&#39;&gt;2019-08-08&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2023-03-01&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2023-03-01T15:24:35&#39;&gt;2023-03-01&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;登录 Github Hugo 自建博客时候，忽然发现很多文章的图片都出现了 404！后来检查才知道，原来从 2019 年 8 月起，语雀上的一些静态图片开启了防外链设置，因此之前通过 api 同步语雀文章的内容到第三方的平台，会导致包括图片在内的静态资源都无法访问。&lt;/p&gt;
&lt;p&gt;于是乎，开始寻找解决方案。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;方案一，通过七牛的镜像空间同步语雀的图片，然后渲染博客页面的时候将语雀域名转换为七牛上绑定的自定义域名，从而确保博客的图片都正常可用。关于七牛云镜像存储，这里列举两点介绍：&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;七牛的镜像存储服务是一种快速的数据迁移和加速服务。可以帮助用户实现无缝数据迁移，迁移过程中并不影响原有业务系统的访问。镜像存储适用于迁移原有业务系统的已有数据。七牛提供分布式存储和加速分发服务，以分布式存储为核心服务。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在镜像存储的业务模型里面，原来的图片或者视频访问域名将被配置为七牛的源站，而页面里面引用图片或视频链接的地方必须使用新的访问域名。然后将新的访问域名绑定 (CNAME) 到七牛空间对应的域名。在这些操作完成之后，终端用户就可以通过七牛访问图片或者视频等非结构化资源了。在每个访问请求到七牛的时候，如果七牛空间中不存在这个资源，那么七牛将主动回客户源站抓取资源并存储在空间里面，这样七牛就不需要再次回源客户的资源站点了。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;更详细的介绍，请参考七牛云官方文档：《&lt;a href=&#34;https://developer.qiniu.com/kodo/kb/1376/seven-cattle-image-storage-instruction-manuals&#34;&gt;七牛镜像存储使用手册&lt;/a&gt;》。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;方案二，使用对象存储的镜像回源，不管是阿里云的 oss，还是腾讯云的 cos 都可以满足这一点。什么是回源，镜像回源又是什么意思，这里摘录几点信息：&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;回源的概念。说的简单点，就是当访问的 OSS 资源不存在，则直接跳过对 OSS 的请求，直接去访问网站本身存在的文件。例如网站上使用了一张图片 &lt;code&gt;static.a.com/images/a.jpg&lt;/code&gt; ，按道理，应该在 OSS 的 bucket 中也存在 &lt;code&gt;/images/a.jpg&lt;/code&gt; ，这样访问 &lt;code&gt;static.a.com/images/a.jpg&lt;/code&gt;  时，才能正常看到这张图片。但是，可惜的是，管理员把图片上传到了 &lt;code&gt;www.a.com/images/a.jpg&lt;/code&gt; ，也就是上传到了网站服务器上面去，而 OSS 中没有这张图片。而这个时候，回源的效果就是，访问 &lt;code&gt;static.a.com/images/a.jpg&lt;/code&gt;  时，发现 OSS 中没有这张图片，CDN 立即去找 &lt;code&gt;www.a.com/images/a.jpg&lt;/code&gt; ，如果有，则返回这张图片。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;那镜像又是怎么回事呢？就是做一个备份。上面这个情况中，OSS 中没有这张图片，而网站服务器上有这张图片，通过访问 &lt;code&gt;static.a.com/images/a.jpg&lt;/code&gt;  时，正常显示了图片，这个时候通过镜像功能，直接把这张图片镜像到 OS S 中的 &lt;code&gt;/images/a.jpg&lt;/code&gt; ，下一次再访问 &lt;code&gt;static.a.com/images/a.jpg&lt;/code&gt;  时，OSS 中就有这张图片了。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;p&gt;下面具体介绍一下这两种方案的一些具体操作。&lt;/p&gt;
&lt;h1 id=&#34;一使用七牛云的镜像存储&#34;&gt;一、使用七牛云的镜像存储&lt;a class=&#34;headerlink&#34; href=&#34;#一使用七牛云的镜像存储&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id=&#34;11-注册并新建对象存储的存储空间&#34;&gt;1.1 注册，并新建对象存储的存储空间&lt;a class=&#34;headerlink&#34; href=&#34;#11-注册并新建对象存储的存储空间&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;七牛云注册，实名认证，这里不细说，很简单。新建对象存储的存储空间也很简单：
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FhD1lAfu-UV6bpzBTXa7vns2waaO.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;12-增加镜像存储的镜像源&#34;&gt;1.2 增加镜像存储的镜像源&lt;a class=&#34;headerlink&#34; href=&#34;#12-增加镜像存储的镜像源&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;在创建好的对象存储空间（note-db）中，选择 &amp;ldquo;镜像存储&amp;rdquo;，添加语雀镜像源地址：
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FqnSjqQ1h_AGmImexpTVpUuHqrGf.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;13-绑定域名&#34;&gt;1.3 绑定域名&lt;a class=&#34;headerlink&#34; href=&#34;#13-绑定域名&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;七牛云绑定域名，并且设置 CNAME 的一个重要前提是：域名必须备案成功了才可以使用的！&lt;/p&gt;
&lt;p&gt;简单说一下绑定了域名的作用：我们在七牛云上存储了图片文件什么的，访问地址都需要加上一个域名的。起初我们开通对象存储的时候，七牛云会给我们一个测试域名。但是测试域名会被收回，公告如下：
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FijLo6r-uVq2ZLTbH_MvILEk3piD.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;所以我们需要用我们自己的二级域名来绑定七牛云进行访问（最好不用 www 开头的二级域名来绑定，因为 www 开头的域名，我们都是作为主域名的），具体绑定步骤如下。&lt;/p&gt;
&lt;h3 id=&#34;131-绑定域名&#34;&gt;1.3.1 绑定域名&lt;a class=&#34;headerlink&#34; href=&#34;#131-绑定域名&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fjq2sidHfcWc1BP9pZn9EM2jQvq2.png&#34; /&gt;
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fg2gkw0JFg8QVidXq5rQ7NqVDM7h.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;132-配置-cname&#34;&gt;1.3.2 配置 CNAME&lt;a class=&#34;headerlink&#34; href=&#34;#132-配置-cname&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;首先&lt;/strong&gt;，上面 3.1 步骤，点击 &amp;ldquo;确认&amp;rdquo; 完成后，即可看到新增加域名的 CNAME 信息：
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FjBW4--eURX63coCfMwPmOTkE_oR.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第二步&lt;/strong&gt;，到你买域名的地方去配置。我是在阿里云上面买的，下面以阿里云为例：&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FmVa6wK7g8yWzYayK-NCR1HeFHSQ.png&#34; /&gt;
**做到这一步就算已经完成了。成功之后，回到七牛云对象存储，在存储空间的概览也可以看到 CNAME 状态显示为&amp;rdquo;成功&amp;rdquo;：
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FqUy4JQdwDQ1EM_k1dRzGZCTUtVu.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第三&lt;/strong&gt;，在博客中把博客所有  &lt;a href=&#34;https://cdn.nlark.com/&#34;&gt;https://cdn.nlark.com&lt;/a&gt;  的域名都替换成  &lt;a href=&#34;http://qiniu.bioinit.com/&#34;&gt;http://qiniu.bioinit.com&lt;/a&gt;  即可。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第四&lt;/strong&gt;，如果想要换成  &lt;a href=&#34;http://qiniu.bioinit.com/&#34;&gt;https://qiniu.bioinit.com&lt;/a&gt;，需要在存储空间的 &lt;strong&gt;&amp;ldquo;域名管理&amp;rdquo;&lt;/strong&gt;  中修改 https 配置。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FpYa6F1OQtJVZ7_8n4raCIyNU40b.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;HTTPS 配置中的 SSL 证书可以选择申请七牛与的免费证书；也可以申请阿里云的** &amp;ldquo;免费型 DV SSL&amp;rdquo; &lt;strong&gt;证书，然后选择本地上传 &lt;/strong&gt;&amp;ldquo;证书内容&amp;rdquo;&lt;strong&gt; 和 &lt;/strong&gt;&amp;ldquo;证书私钥&amp;rdquo;&lt;strong&gt;，我这里选择的是阿里云的&lt;/strong&gt; &amp;ldquo;免费型 DV SSL&amp;rdquo; **证书。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fq5JW6xmF4nNAp4LU1HUH3Ymmlar.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FkezkzI6uURpQNZfRzZjTtVGWWvz.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FgFHSAFRhVRDMysAoCY4vHN1x9Bw.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;ldquo;确认&amp;rdquo;&lt;/strong&gt;  提交后，等待大约 10 分钟，可以在七牛云对象存储空间的 &lt;strong&gt;&amp;ldquo;域名管理&amp;rdquo;&lt;/strong&gt; → &lt;strong&gt;&amp;ldquo;HPPTS 配置&amp;rdquo;&lt;/strong&gt;  看到 HTTPS 已经开启。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fuv4WG_FNYVPd_ntz4H4xht6NGAa.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;最后&lt;/strong&gt;，在博客中把博客所有  &lt;a href=&#34;https://cdn.nlark.com/&#34;&gt;https://cdn.nlark.com&lt;/a&gt;  的域名都替换成  &lt;a href=&#34;http://qiniu.bioinit.com/&#34;&gt;https://qiniu.bioinit.com&lt;/a&gt;，并检查图片是否正常显示。&lt;/p&gt;
&lt;h1 id=&#34;二使用对象存储的镜像回源&#34;&gt;二、使用对象存储的镜像回源&lt;a class=&#34;headerlink&#34; href=&#34;#二使用对象存储的镜像回源&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;关于对象存储的镜像回源，我们以阿里云的 oss 对象存储为例。&lt;/p&gt;
&lt;h2 id=&#34;21-创建-bucket选择镜像回源&#34;&gt;2.1 创建 bucket，选择镜像回源&lt;a class=&#34;headerlink&#34; href=&#34;#21-创建-bucket选择镜像回源&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;我们可以在 oss 的 bucket 中选择 &amp;ldquo;&lt;strong&gt;基础设置&lt;/strong&gt;&amp;rdquo; 页面的   &amp;ldquo;&lt;strong&gt;镜像回源&lt;/strong&gt;&amp;rdquo; 设置。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fkuic0mx5CeObKnuCjAaIZC1nh-D.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;22-添加镜像回源规则&#34;&gt;2.2 添加镜像回源规则&lt;a class=&#34;headerlink&#34; href=&#34;#22-添加镜像回源规则&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;在 &amp;ldquo;&lt;strong&gt;镜像回源&lt;/strong&gt;&amp;rdquo; 设置中 &amp;ldquo;&lt;strong&gt;添加规则&lt;/strong&gt;&amp;ldquo;，添加规则时，会问你是否需要镜像，如果不镜像，就不会自动备份迁移一个到 OSS 中，下次访问的时候，虽然还会回源，但不一定正常显示图片，因此这里选择&amp;rdquo;&lt;strong&gt;镜像&lt;/strong&gt;&amp;ldquo;。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FoqlqaHkkKXxB0avqMsrInEc_GVM.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;这里有两个前缀的选项，比较好玩：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;第一个前缀实际上是一个判断条件，比如你访问 &lt;code&gt;https://bucketname.oss-endpoint.com/yuque/xxx&lt;/code&gt;  就遵循这条规则，如果你访问 &lt;code&gt;https://bucketname.oss-endpoint.com/videos/xxx&lt;/code&gt;  则不遵循这条规则，就不会回源了。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;第二个实际上是一个 url 重写的条件，比如你访问通过 bucketname.oss-endpoint.com/demo.jpg 这链接去访问 cdn.nlark.com/yuque/0/2019/png/1232/demo.jpg  这张语雀的图片，这个时候你就可以你可以把 yuque/0/2019/png/1232  当做前缀。如果你想选择最省事的做法，可以跟我一样选择留空。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;你也可以针对不同格式、不同年份的文件设置粒度更细的镜像回源规则，详细可以参考：《&lt;a href=&#34;https://help.aliyun.com/document_detail/31865.html&#34;&gt;管理回源设置&lt;/a&gt;》。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;23-变更链接&#34;&gt;2.3 变更链接&lt;a class=&#34;headerlink&#34; href=&#34;#23-变更链接&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;上一步镜像回源的规则创建好，点击 &amp;ldquo;确定&amp;rdquo; 后，在博客中我们只需要把博客所有 &lt;code&gt;https://cdn.nlark.com&lt;/code&gt; 的域名都替换成你 oss 对应的外网访问 Bucket 域名（如， &lt;code&gt;https://bucketname.oss-endpoint.com&lt;/code&gt;  即可），并检查图片是否正常显示。&lt;/p&gt;
&lt;p&gt;对于其他镜像回源规则的链接变更：
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FhwUMa1xlPdbZ91XKtVQ-hTWQpin.png&#34; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;把 cdn.nlark.com/yuque/0 替换成 notedb.oss-cn-shenzhen.aliyuncs.com 即可。&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;三个人博客&#34;&gt;三、个人博客&lt;a class=&#34;headerlink&#34; href=&#34;#三个人博客&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;最后，附上与语雀文章同步更新，基于 Hugo 的个人博客。
&lt;img alt=&#34;shen-bioitee.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FjMPtnGLbxm5-GoDa34mLICaFti5.png&#34; /&gt;&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E8%AF%AD%E9%9B%80%E6%8A%80%E5%B7%A7/2019-08-08-sync-from-yuque-to-oss/</link>
      <pubDate>Thu, 08 Aug 2019 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E8%AF%AD%E9%9B%80%E6%8A%80%E5%B7%A7/2019-08-08-sync-from-yuque-to-oss/</guid>
      
    </item>
    
    <item>
      <title>博客 | Hugo 博客折腾的一些记录</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2019-08-08&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2019-08-08T00:00:00&#39;&gt;2019-08-08&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2023-01-05&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2023-01-05T11:16:14&#39;&gt;2023-01-05&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;模仿 R 语言大神谢益辉，搭建了一个 Hugo+Blogdown 的博客：&lt;a href=&#34;https://www.shumlab.com&#34;&gt;https://www.shumlab.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FofWGzhVVKFkuXNKeP0e3a932SWw.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;主要记录：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;.Site.BaseURL&lt;/code&gt;  不起作用， &lt;code&gt;relURL&lt;/code&gt; 、 &lt;code&gt;absURL&lt;/code&gt;  也不起作用时，可参考使用 &lt;code&gt;params&lt;/code&gt;  方法解决。&lt;/li&gt;
&lt;li&gt;修复原博客 url 的一些 bug，shen.bioinit.com 部分链接被直接写死，想要复用的需要重新定义。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h3 id=&#34;centos-7-安装-go&#34;&gt;CentOS 7 安装 Go&lt;a class=&#34;headerlink&#34; href=&#34;#centos-7-安装-go&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;wget&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://dl.google.com/go/go1.12.7.linux-amd64.tar.gz
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tar&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;zvxf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;go1.12.7.linux-amd64.tar.gz
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mv&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;go&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;go-1.12.7

$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;vi&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~/.bashrc
&lt;span class=&#34;c1&#34;&gt;# 在文件最后一行加入以下内容&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;GOPATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/ifs1/go-projects&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;#这个是你自己开发的GO代码位置，以后开发可以放这个目录下&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;GOROOT&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/software/go-1.12.7&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;#这个就是我们安装的位置了。&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PATH&lt;/span&gt;:&lt;span class=&#34;nv&#34;&gt;$GOROOT&lt;/span&gt;/bin&lt;span class=&#34;w&#34;&gt;                  &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;#go语言一些常用的命令引入PATH环境变量&lt;/span&gt;

$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;go&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;env&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 查看 Go 的一些环境配置&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;centos-7-安装-hugo&#34;&gt;CentOS 7 安装 Hugo&lt;a class=&#34;headerlink&#34; href=&#34;#centos-7-安装-hugo&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;wget&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://github.com/gohugoio/hugo/releases/download/v0.54.0/hugo_0.54.0_Linux-64bit.tar.gz
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tar&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;zvxf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;hugo_0.54.0_Linux-64bit.tar.gz&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-C&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/local/software/hugo-0.54.0
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;export PATH=/usr/local/software/hugo-0.54.0:\$PATH&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;gt;&amp;gt;~/.bashrc
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~/.bashrc
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;启动-hugo-博客服务&#34;&gt;启动 hugo 博客服务&lt;a class=&#34;headerlink&#34; href=&#34;#启动-hugo-博客服务&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;shenweiyan@ecs-steven&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;15&lt;/span&gt;:04:06&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~/shenweiyan/home
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;hugo&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 渲染生成静态站点文件&lt;/span&gt;

&lt;span class=&#34;w&#34;&gt;                   &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ZH
+------------------+-----+
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Pages&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;159&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Paginator&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pages&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Non-page&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;files&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Static&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;files&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;44&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Processed&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;images&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Aliases&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Sitemaps&lt;span class=&#34;w&#34;&gt;         &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Cleaned&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;

Total&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;203&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ms

$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;hugo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;server&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--baseUrl&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;120&lt;/span&gt;.77.xx.xx&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--bind&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;.0.0.0&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 启动本地预览服务&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;🏷️Hugo 小知识 - 草案、未来和过期内容&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Hugo 允许您在网站内容的前言设定中设置文档的&lt;code&gt;draft&lt;/code&gt;，&lt;code&gt;publishdate&lt;/code&gt;甚至&lt;code&gt;expirydate&lt;/code&gt;字段。默认情况下，Hugo 不会发布下面内容：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;publishdate&lt;/code&gt; 发布日期值设定在未来的内容；&lt;/li&gt;
&lt;li&gt;&lt;code&gt;draft:true&lt;/code&gt; 草案状态设置为真的内容；&lt;/li&gt;
&lt;li&gt;&lt;code&gt;expirydate&lt;/code&gt; 过期日期值设置为过去某事件的内容。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;这三个可以在本地开发和部署编译时通过对&lt;code&gt;hugo&lt;/code&gt;和&lt;code&gt;hugo server&lt;/code&gt;分别添加如下参数来重新设定，或者在配置文件中设定对应(不包含&lt;code&gt;--&lt;/code&gt;)域的 boolean 值：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;-F, &amp;ndash;buildFuture include content with publishdate in the future&lt;/li&gt;
&lt;li&gt;-D, &amp;ndash;buildDrafts include content marked as draft&lt;/li&gt;
&lt;li&gt;-E, &amp;ndash;buildExpired include expired content&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;一些问题&#34;&gt;一些问题&lt;a class=&#34;headerlink&#34; href=&#34;#一些问题&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;问题：&lt;/strong&gt;
hugo-ivy 主题在 0.55 后版本的 Hugo 中 RSS 无法使用，并且在编译时会有如下警告：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Building&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sites&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;…
WARN&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2019&lt;/span&gt;/08/13&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;09&lt;/span&gt;:03:08&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Page&lt;span class=&#34;s1&#34;&gt;&amp;#39;s .URL is deprecated and will be removed in a future release. Use .Permalink or .RelPermalink. If what you want is the front matter URL value, use .Params.url.&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;WARN 2019/08/13 09:03:08 Page&amp;#39;&lt;/span&gt;s&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;.RSSLink&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;is&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;deprecated&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;and&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;will&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;be&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;removed&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;a&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;future&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;release.&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Use&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Output&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Format&lt;span class=&#34;err&#34;&gt;&amp;#39;&lt;/span&gt;s&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;link,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;e.g.&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;something&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;like:
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;{{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;.OutputFormats.Get&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;RSS&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;}}{{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;.RelPermalink&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;}}{{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;end&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;}}&lt;/span&gt;.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;方法：&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;网络部分关于将  &lt;code&gt;.URL&lt;/code&gt;  相关的文件中  &lt;code&gt;.URL&lt;/code&gt;  改成 &lt;code&gt;.Permalink&lt;/code&gt;  以解决 &lt;code&gt;.URL&lt;/code&gt;  的上述报错的做法（参考：《&lt;a href=&#34;https://blog.hgtweb.com/2019/%E4%BF%AE%E5%A4%8Dleaveit%E4%BB%A5%E6%94%AF%E6%8C%81%E6%9C%80%E6%96%B0%E7%89%88hugo/&#34;&gt;LeaveIt 以支持最新版 Hugo&lt;/a&gt;》），经测试如果针对 Menu 级别的 html 模板会引发其他错误；而且虽然 hugo 更新到了 0.56.3，但官方文档示例还在使用 &lt;code&gt;.URL&lt;/code&gt; ，参考  &lt;a href=&#34;https://github.com/gohugoio/hugo/issues/5835&#34;&gt;https://github.com/gohugoio/hugo/issues/5835&lt;/a&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;修改包含 &lt;code&gt;.RSSLink&lt;/code&gt;  相关的文件，如下：&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;!&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;修改前&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;{{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;RSSLink&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}}&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;link&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;href&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;{{ .RSSLink | relURL }}&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;rel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;alternate&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;application/rss+xml&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;{{ .Site.Title }}&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;{{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;end&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}}&lt;/span&gt;

&lt;span class=&#34;p&#34;&gt;&amp;lt;!&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;修改后&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;{{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;with&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;OutputFormats&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Get&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;RSS&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}}&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;link&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;href&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;{{ .RelPermalink | relURL }}&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;rel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;alternate&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;application/rss+xml&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;{{ $.Title }}&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;{{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;end&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;一些资料&#34;&gt;一些资料&lt;a class=&#34;headerlink&#34; href=&#34;#一些资料&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;记录一下，搭建部署过程中参考的一些资料：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;钟浩光，《&lt;a href=&#34;https://cosx.org/2018/01/build-blog-with-blogdown-hugo-netlify-github/&#34;&gt;用 R 语言的 blogdown+hugo+netlify+github 建博客&lt;/a&gt;》，统计之都&lt;/li&gt;
&lt;li&gt;Hash_Borgir, rdwatters, etc.《&lt;a href=&#34;https://discourse.gohugo.io/t/solved-what-should-be-used-for-the-value-of-site-baseurl/5896&#34;&gt;What should be used for the value of .Site.BaseURL?&lt;/a&gt;》，Hugo forums&lt;/li&gt;
&lt;li&gt;chaomifan，《&lt;a href=&#34;https://www.jianshu.com/p/076279c9ceea&#34;&gt;Hugo+GitHub 静态博客折腾笔记&lt;/a&gt;》，简书&lt;/li&gt;
&lt;li&gt;Mogeko，《&lt;a href=&#34;https://mogeko.me/2018/024/&#34;&gt;链接为 Hugo 添加谈笑风生区 (Gitalk)&lt;/a&gt;》，Mogeko`s Blog&lt;/li&gt;
&lt;li&gt;ByQiu，《&lt;a href=&#34;https://www.jianshu.com/p/78c64d07124d&#34;&gt;为博客添加 Gitalk 评论插件&lt;/a&gt;》，简书&lt;/li&gt;
&lt;li&gt;Parsia，《&lt;a href=&#34;https://parsiya.net/blog/2016-02-14-archive-page-in-hugo/&#34;&gt;Archive Page in Hugo&lt;/a&gt;》，Hackerman&amp;rsquo;s Hacking Tutorials&lt;/li&gt;
&lt;li&gt;olOwOlo desu，《&lt;a href=&#34;https://blog.olowolo.com/post/hugo-quick-start/&#34;&gt;Hugo 从入门到会用&lt;/a&gt;》，olOwOlo&amp;rsquo;s Blog&lt;/li&gt;
&lt;li&gt;小龙虾，《&lt;a href=&#34;https://cray.vip/post/blog/&#34;&gt;用 hugo 创建自己的博客&lt;/a&gt;》，小龙虾的博客&lt;/li&gt;
&lt;li&gt;Hugo 的作品集主题页：&lt;a href=&#34;https://themes.gohugo.io/tags/portfolio/&#34;&gt;&lt;em&gt;https://themes.gohugo.io/tags/portfolio/&lt;/em&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E9%9D%99%E6%80%81%E7%BD%91%E7%AB%99/2019-08-08-build-hugo-blogs/</link>
      <pubDate>Thu, 08 Aug 2019 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E9%9D%99%E6%80%81%E7%BD%91%E7%AB%99/2019-08-08-build-hugo-blogs/</guid>
      
    </item>
    
    <item>
      <title>FlexSlider 和 RaxusSlider 插件相关参数</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2019-08-07&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2019-08-07T00:00:00&#39;&gt;2019-08-07&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2020-03-04&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2020-03-04T14:00:17&#39;&gt;2020-03-04&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id=&#34;flexslider&#34;&gt;FlexSlider&lt;a class=&#34;headerlink&#34; href=&#34;#flexslider&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;链接：&lt;a href=&#34;http://flexslider.woothemes.com/&#34;&gt;http://flexslider.woothemes.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;**FlexSlider **是一个非常出色的 jQuery 滑动切换插件，它支持所有主流浏览器，并有淡入淡出效果。适合所有初级和高级网页设计师使用。关键的一点是该工具还是开源的。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nx&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;window&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;).&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;load&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;.flexslider&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;).&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;flexslider&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;({&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;animation&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;fade&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;//String: Select your animation type, &amp;quot;fade&amp;quot; or &amp;quot;slide&amp;quot;图片变换方式：淡入淡出或者滑动&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;slideDirection&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;horizontal&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;//String: Select the sliding direction, &amp;quot;horizontal&amp;quot; or &amp;quot;vertical&amp;quot;图片设置为滑动式时的滑动方向：左右或者上下&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;slideshow&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;//Boolean: Animate slider automatically 载入页面时，是否自动播放&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;slideshowSpeed&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;7000&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;//Integer: Set the speed of the slideshow cycling, in milliseconds 自动播放速度毫秒&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;animationDuration&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;600&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;//Integer: Set the speed of animations, in milliseconds动画淡入淡出效果延时&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;directionNav&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;//Boolean: Create navigation for previous/next navigation? (true/false)是否显示左右控制按钮&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;controlNav&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;//Boolean: Create navigation for paging control of each clide? Note: Leave true for manualControls usage是否显示控制菜单&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;keyboardNav&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;//Boolean: Allow slider navigating via keyboard left/right keys键盘左右方向键控制图片滑动&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;mousewheel&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;//Boolean: Allow slider navigating via mousewheel鼠标滚轮控制制图片滑动&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;prevText&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;Previous&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;//String: Set the text for the &amp;quot;previous&amp;quot; directionNav item&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;nextText&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;Next&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;//String: Set the text for the &amp;quot;next&amp;quot; directionNav item&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;pausePlay&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;//Boolean: Create pause/play dynamic element&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;pauseText&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;Pause&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;//String: Set the text for the &amp;quot;pause&amp;quot; pausePlay item&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;playText&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;Play&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;//String: Set the text for the &amp;quot;play&amp;quot; pausePlay item&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;randomize&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;//Boolean: Randomize slide order 是否随机幻灯片&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;slideToStart&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;//Integer: The slide that the slider should start on. Array notation (0 = first slide)初始化第一次显示图片位置&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;animationLoop&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;//Boolean: Should the animation loop? If false, directionNav will received &amp;quot;disable&amp;quot; classes at either end 是否循环滚动&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;pauseOnAction&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;//Boolean: Pause the slideshow when interacting with control elements, highly recommended.&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;pauseOnHover&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;//Boolean: Pause the slideshow when hovering over slider, then resume when no longer hovering&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;controlsContainer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;//Selector: Declare which container the navigation elements should be appended too. Default container is the flexSlider element. Example use would be &amp;quot;.flexslider-container&amp;quot;, &amp;quot;#container&amp;quot;, etc. If the given element is not found, the default action will be taken.&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;manualControls&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;//Selector: Declare custom control navigation. Example would be &amp;quot;.flex-control-nav li&amp;quot; or &amp;quot;#tabs-nav li img&amp;quot;, etc. The number of elements in your controlNav should match the number of slides/tabs.自定义控制导航&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;manualControlEvent&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;//String:自定义导航控制触发事件:默认是click,可以设定hover&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;start&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{},&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;//Callback: function(slider) - Fires when the slider loads the first slide&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;before&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{},&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;//Callback: function(slider) - Fires asynchronously with each slider animation&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;after&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{},&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;//Callback: function(slider) - Fires after each slider animation completes&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;end&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{},&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;//Callback: function(slider) - Fires when the slider reaches the last slide (asynchronous)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;FAQ01&lt;/strong&gt;：&lt;a href=&#34;http://cn.voidcc.com/question/p-pumryoaf-hm.html&#34;&gt;如何使用 flexslider 设置多个滑块？&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;raxus-slider&#34;&gt;Raxus Slider&lt;a class=&#34;headerlink&#34; href=&#34;#raxus-slider&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;链接：&lt;a href=&#34;https://codecanyon.net/item/raxus-slider-easytouse-advanced-html5-slider/7008343&#34;&gt;https://codecanyon.net/item/raxus-slider-easytouse-advanced-html5-slider/7008343&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;相比 FlexSlider，也有人会选择使用  Raxus Slider，从代码简洁性上而言，后者能用更少的代码实现同样的效果；不同的是，FlexSlider 是开源免费的，而  Raxus Slider 是付费的。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FlZgZ8YL5Q8BHfoWv8m1HUoUy8de.png&#34; /&gt;&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E9%9D%99%E6%80%81%E7%BD%91%E7%AB%99/2019-08-07-flex-slider-and-raxus-slider/</link>
      <pubDate>Wed, 07 Aug 2019 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E9%9D%99%E6%80%81%E7%BD%91%E7%AB%99/2019-08-07-flex-slider-and-raxus-slider/</guid>
      
    </item>
    
    <item>
      <title>Bioconductor org.Xx.eg.db 系列包</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2019-08-05&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2019-08-05T00:00:00&#39;&gt;2019-08-05&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-11-17&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-11-17T09:19:40&#39;&gt;2021-11-17&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;在 bioconductor 的官网里面可以查找到 &amp;ldquo;&lt;strong&gt;OrgDb&lt;/strong&gt;&amp;rdquo; 的包大约有 20 个，基本上跨越了我们生物信息分析中最常用的物种啦！&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;Bioconductor-BiocViews.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FqHhM0AsWb5-p7OdLHYa0CH6i7c2.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;完整链接：&lt;a href=&#34;http://bioconductor.org/packages/release/BiocViews.html#___OrgDb&#34;&gt;&lt;code&gt;http://bioconductor.org/packages/release/BiocViews.html#___OrgDb&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;R 安装示例：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;BiocManager&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;install&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;org.Hs.eg.db&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;org.Mm.eg.db&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;org.Mmu.eg.db&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;org.Pf.plasmo.db&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;org.Pt.eg.db&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;org.Rn.eg.db&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;org.Sc.sgd.db&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;org.Ss.eg.db&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;org.Xl.eg.db&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;org.Gg.eg.db&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;org.EcSakai.eg.db&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;org.EcK12.eg.db&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;org.Dr.eg.db&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;org.Dm.eg.db&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;org.Cf.eg.db&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;org.Ce.eg.db&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;org.Bt.eg.db&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;org.At.tair.db&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;org.Ag.eg.db&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;人类：&lt;a href=&#34;http://www.bioconductor.org/packages/release/data/annotation/html/org.Hs.eg.db.html&#34;&gt;org.Hs.eg.db&lt;/a&gt;，Homo_sapiens&lt;/li&gt;
&lt;li&gt;小鼠：&lt;a href=&#34;http://www.bioconductor.org/packages/release/data/annotation/html/org.Mm.eg.db.html&#34;&gt;Bioconductor - org.Mm.eg.db&lt;/a&gt;，Mus_musculus&lt;/li&gt;
&lt;li&gt;大鼠：&lt;a href=&#34;http://bioconductor.org/packages/release/data/annotation/html/org.Rn.eg.db.html&#34;&gt;org.Rn.eg.db&lt;/a&gt;，Rat&lt;/li&gt;
&lt;li&gt;酵母：&lt;a href=&#34;http://bioconductor.org/packages/release/data/annotation/html/org.Sc.sgd.db.html&#34;&gt;org.Sc.sgd.db&lt;/a&gt;，Yeast&lt;/li&gt;
&lt;li&gt;飞行类：&lt;a href=&#34;http://bioconductor.org/packages/release/data/annotation/html/org.Dm.eg.db.html&#34;&gt;org.Dm.eg.db&lt;/a&gt;，Fly&lt;/li&gt;
&lt;li&gt;拟南芥：&lt;a href=&#34;http://www.bioconductor.org/packages/release/data/annotation/html/org.At.tair.db.html&#34;&gt;org.At.tair.db&lt;/a&gt; , Arabidopsis（Arabidopsis_thaliana）&lt;/li&gt;
&lt;li&gt;斑马鱼：&lt;a href=&#34;http://www.bioconductor.org/packages/release/data/annotation/html/org.Dr.eg.db.html&#34;&gt;org.Dr.eg.db&lt;/a&gt;，Zebrafish（Danio_rerio）&lt;/li&gt;
&lt;li&gt;蠕虫：&lt;a href=&#34;http://bioconductor.org/packages/release/data/annotation/html/org.Ce.eg.db.html&#34;&gt;org.Ce.eg.db&lt;/a&gt;，Worm&lt;/li&gt;
&lt;li&gt;牛：&lt;a href=&#34;http://bioconductor.org/packages/release/data/annotation/html/org.Bt.eg.db.html&#34;&gt;org.Bt.eg.db&lt;/a&gt;，Bovine&lt;/li&gt;
&lt;li&gt;鸡：&lt;a href=&#34;http://bioconductor.org/packages/release/data/annotation/html/org.Gg.eg.db.html&#34;&gt;org.Gg.eg.db&lt;/a&gt;，Chicken&lt;/li&gt;
&lt;li&gt;犬类：&lt;a href=&#34;http://bioconductor.org/packages/release/data/annotation/html/org.Cf.eg.db.html&#34;&gt;org.Cf.eg.db&lt;/a&gt;，Canine&lt;/li&gt;
&lt;li&gt;猪：&lt;a href=&#34;http://bioconductor.org/packages/release/data/annotation/html/org.Ss.eg.db.html&#34;&gt;org.Ss.eg.db&lt;/a&gt;，Pig&lt;/li&gt;
&lt;li&gt;恒河猴：&lt;a href=&#34;http://bioconductor.org/packages/release/data/annotation/html/org.Mmu.eg.db.html&#34;&gt;org.Mmu.eg.db&lt;/a&gt;，Rhesus&lt;/li&gt;
&lt;li&gt;大肠杆菌 K12 株：&lt;a href=&#34;http://bioconductor.org/packages/release/data/annotation/html/org.EcK12.eg.db.html&#34;&gt;org.EcK12.eg.db&lt;/a&gt;，E coli strain K12&lt;/li&gt;
&lt;li&gt;非洲爪蟾：&lt;a href=&#34;http://bioconductor.org/packages/release/data/annotation/html/org.Xl.eg.db.html&#34;&gt;org.Xl.eg.db&lt;/a&gt;，Xenopus&lt;/li&gt;
&lt;li&gt;按蚊：&lt;a href=&#34;http://bioconductor.org/packages/release/data/annotation/html/org.Ag.eg.db.html&#34;&gt;org.Ag.eg.db&lt;/a&gt;，Anopheles&lt;/li&gt;
&lt;li&gt;黑猩猩：&lt;a href=&#34;http://bioconductor.org/packages/release/data/annotation/html/org.Pt.eg.db.html&#34;&gt;org.Pt.eg.db&lt;/a&gt;，Chimp&lt;/li&gt;
&lt;li&gt;疟原虫：&lt;a href=&#34;http://bioconductor.org/packages/release/data/annotation/html/org.Pf.plasmo.db.html&#34;&gt;org.Pf.plasmo.db&lt;/a&gt;，Malaria&lt;/li&gt;
&lt;li&gt;酒井大肠杆菌：&lt;a href=&#34;http://bioconductor.org/packages/release/data/annotation/html/org.EcSakai.eg.db.html&#34;&gt;org.EcSakai.eg.db&lt;/a&gt;，E coli strain Sakai&lt;/li&gt;
&lt;li&gt;粘球菌 xanthus DK 1622：&lt;a href=&#34;http://bioconductor.org/packages/release/data/annotation/html/org.Mxanthus.db.html&#34;&gt;org.Mxanthus.db&lt;/a&gt;，Myxococcus xanthus DK 1622&lt;/li&gt;
&lt;/ol&gt;</description>
      <link>https://shenwy.com/yuque/%E7%94%9F%E7%89%A9%E4%BF%A1%E6%81%AF/%E8%BD%AF%E4%BB%B6/2019-08-05-bioconductor-orgdb/</link>
      <pubDate>Mon, 05 Aug 2019 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E7%94%9F%E7%89%A9%E4%BF%A1%E6%81%AF/%E8%BD%AF%E4%BB%B6/2019-08-05-bioconductor-orgdb/</guid>
      
    </item>
    
    <item>
      <title>Fedora Redhat Centos 有什么区别和关系？</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2019-07-25&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2019-07-25T00:00:00&#39;&gt;2019-07-25&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-06-25&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-06-25T11:04:14&#39;&gt;2021-06-25&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;这里对 Redhat/CentOS/Fedora 之间以及与其他 Linux 发行版关系做一个基本的介绍。给新手选择一个 Linux 发行版提供指导和帮助。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fu2Zm1XYDoC03zWbT9yI_r1MEDm2.png&#34; /&gt;
&lt;strong&gt;Fedora&lt;/strong&gt;
Fedora 是基于 Linux 的集最新自由开源软件于一体的操作系统。Fedora &lt;strong&gt;始终允许任何人自由使用，修改和发布。&lt;/strong&gt;它由来自世界各地的人们在 Fedora 项目社区下共同合作而成。Fedora 项目对外开放，欢迎任何人加入。Fedora 项目就在您眼前，它&lt;strong&gt;引领着自由、开源软件以及内容的前进。&lt;/strong&gt;  特点是常常引入创新性的技术，被视为&amp;rdquo;新技术的试验场&amp;rdquo;。版本升级很快（约 6 个月），每个版本的支持较短，约为 13 个月。Red Hat 公司为 Fedora Project 提供赞助。
最新正式版本为 2013-12-17 发布的 Fedora 20，代号是 Heisenbug。
目前支持版本：19 &amp;amp; 20
官方网站：&lt;a href=&#34;http://fedoraproject.org/&#34;&gt;http://fedoraproject.org/&lt;/a&gt;
中文论坛：&lt;a href=&#34;http://bbs.fedora-zh.org/&#34;&gt;http://bbs.fedora-zh.org/&lt;/a&gt;
中文邮件列表：&lt;a href=&#34;https://admin.fedoraproject.org/mailman/listinfo/chinese&#34;&gt;fedora-chinese&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RHEL/Red Hat Enterprise Linux&lt;/strong&gt;
Red Hat Enterprise Linux 是 Red Hat 公司定位于企业级应用的&lt;strong&gt;商业性质&lt;/strong&gt;的 Linux 发行版。提供付费的技术支持和更新支持。RHEL4 细分为 AS、ES 和 W S 和 Desktop 版本。RHEL5 开始产品分成了 6 类（见&lt;a href=&#34;http://en.wikipedia.org/wiki/Red_Hat_Enterprise_Linux&#34;&gt;维基&lt;/a&gt;）。红帽公司对企业版 LINUX 的每个版本提供 7 年的支持。
最新正式版本为 2013-11-22 发布的 RHEL 6.5。
RHEL 5 系列也在支持。目前最新正式版本为 RHEL 5.10。
RHEL 4 系列也仍支持，目前最新版本为 4.9。
官方网站：&lt;a href=&#34;http://www.redhat.com/&#34;&gt;http://www.redhat.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;CentOS/Community ENTerprise Operating System&lt;/strong&gt;
CENTOS 是一个服务器级别的 Linux 发行版。由社区重新编译 Red Hat 公开的 SRPM，去除了 Red Hat 的商标，更换 LOGO 得到。
最新正式版本为 2013-12-01 发布的 CentOS 6.5，
版本 5 系列最新为 CentOS 5.10。
官方网站：&lt;a href=&#34;http://www.centos.org/&#34;&gt;http://www.centos.org/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;以上三者均采用了 RPM 包管理机制，使用 yum 解决软件包依赖，这方面和 Debian/Ubuntu 的 deb/apt 不同。三者默认的桌面环境均为 GNOME。与 Mandriva 默认 KDE 不同。&lt;/p&gt;
&lt;p&gt;三者差别不大，相比而言，Fedora 最适合新手做桌面使用，CentOS 适合个人做服务器应用，RHEL 适合企业应用。&lt;/p&gt;
&lt;p&gt;三者之间有一定的依赖关系。RHEL 可以视为 Fedora 的派生版，CentOS 本身基于 RHEL。另外还有一些 Linux 发行版是基于以上的发行版制作的，例如 Oracle Linux、Scientific Linux 是基于 RHEL 的。&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%85%8D%E7%BD%AE%E4%BD%BF%E7%94%A8/2019-07-25-fedora-redhat-centos/</link>
      <pubDate>Thu, 25 Jul 2019 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%85%8D%E7%BD%AE%E4%BD%BF%E7%94%A8/2019-07-25-fedora-redhat-centos/</guid>
      
    </item>
    
    <item>
      <title>Linux 下的动态库、静态库与环境变量</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2019-07-19&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2019-07-19T00:00:00&#39;&gt;2019-07-19&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-06-25&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-06-25T11:03:38&#39;&gt;2021-06-25&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;最近这几天在处理集群软件的过程中，遇到各种各样的库和环境变量的问题，被虐的不清！趁此机会，整理了一下 Linux 下静态库、动态库（共享库）和环境变量的一些知识，与大家共享一下。&lt;/p&gt;
&lt;h1 id=&#34;库的种类&#34;&gt;库的种类&lt;a class=&#34;headerlink&#34; href=&#34;#库的种类&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Linux 下的库有两种：&lt;strong&gt;静态库&lt;/strong&gt;和&lt;strong&gt;动态库&lt;/strong&gt;（共享库）。&lt;/p&gt;
&lt;p&gt;静态库的代码在&lt;strong&gt;编译过程中&lt;/strong&gt;已经被载入可执行程序，因此生成的可执行程序体积较大。静态用 &lt;code&gt;.a&lt;/code&gt;  为后缀， 例如： &lt;code&gt;libhello.a&lt;/code&gt; 。&lt;/p&gt;
&lt;p&gt;动态库（共享库）的代码是在可执行&lt;strong&gt;程序运行时&lt;/strong&gt;才载入内存的，在编译过程中仅简单的引用，因此生成的可执行程序代码体积较小。动态库通常用 &lt;code&gt;.so&lt;/code&gt;  为后缀， 例如： &lt;code&gt;libhello.so&lt;/code&gt; 。&lt;/p&gt;
&lt;p&gt;为了在同一系统中使用不同版本的库，可以在库文件名后加上版本号为后缀,例如： &lt;code&gt;libhello.so.1.0&lt;/code&gt; ，由于程序连接默认以 &lt;code&gt;.so&lt;/code&gt;  为文件后缀名。所以为了使用这些库，通常使用建立符号连接的方式。&lt;/p&gt;
&lt;h1 id=&#34;库的环境变量&#34;&gt;库的环境变量&lt;a class=&#34;headerlink&#34; href=&#34;#库的环境变量&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;LIBRARY_PATH&lt;/strong&gt;
环境变量：指定程序静态链接库文件搜索路径。
&lt;strong&gt;LD_LIBRARY_PATH&lt;/strong&gt;
环境变量：指定程序动态链接库文件搜索路径。&lt;/p&gt;
&lt;h1 id=&#34;库的搜索顺序&#34;&gt;库的搜索顺序&lt;a class=&#34;headerlink&#34; href=&#34;#库的搜索顺序&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;动态库链接时搜索路径的顺序：&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;编译目标代码时指定的动态库搜索路径；&lt;/li&gt;
&lt;li&gt;环境变量&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;LD_LIBRARY_PATH&lt;/strong&gt; 指定动态库搜索路径，它指定程序动态链接库文件搜索路径；
3. 配置文件
&lt;strong&gt;/etc/ld.so.conf&lt;/strong&gt; 中指定的动态库搜索路径；
4. 默认的动态库搜索路径
&lt;strong&gt;/lib&lt;/strong&gt;；
5. 默认的动态库搜索路径
&lt;strong&gt;/usr/lib&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;静态库链接时搜索路径的顺序：&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;ld 会去找 &lt;code&gt;gcc&lt;/code&gt; / &lt;code&gt;g++&lt;/code&gt;  命令中的参数 &lt;code&gt;-L&lt;/code&gt; ；&lt;/li&gt;
&lt;li&gt;再找 gcc 的环境变量 &lt;strong&gt;LIBRARY_PATH&lt;/strong&gt;，它指定程序静态链接库文件搜索路径；&lt;/li&gt;
&lt;li&gt;再找默认库目录 &lt;code&gt;/lib&lt;/code&gt; ， &lt;code&gt;/usr/lib&lt;/code&gt; ， &lt;code&gt;/usr/local/lib&lt;/code&gt; ，这是当初 compile gcc 时写在程序内的。&lt;/li&gt;
&lt;/ol&gt;
&lt;h1 id=&#34;环境变量文件加载顺序&#34;&gt;环境变量文件加载顺序&lt;a class=&#34;headerlink&#34; href=&#34;#环境变量文件加载顺序&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;正常登录配置文件顺序加载过程，所谓正常登录指用户通过输入用户名和密码登录的状态。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FptKcws_nVYWLZzaExTtEwHh2ErM.png&#34; /&gt;
在 CentOS 7，我们测试一下：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# /etc/profile&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sudo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sed&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-i&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;1 iecho &amp;quot;/etc/profile goes start&amp;quot;\n&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/etc/profile&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;head&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-n&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/etc/profile
&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;/etc/profile goes start&amp;quot;&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# /etc/bashrc&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sudo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sed&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-i&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;1 iecho &amp;quot;/etc/bashrc goes start&amp;quot;\n&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/etc/bashrc&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;head&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-n&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/etc/bashrc
&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;/etc/bashrc goes start&amp;quot;&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# .bash_profile&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sed&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-i&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;1 iecho &amp;quot;~/.bash_profile goes start&amp;quot;\n&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~/.bash_profile&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;head&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-n&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~/.bash_profile
&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;~/.bash_profile goes start&amp;quot;&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# .bashrc&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sed&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-i&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;1 iecho &amp;quot;~/.bashrc goes start&amp;quot;\n&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~/.bashrc&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;head&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-n&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~/.bashrc
&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;~/.bashrc goes start&amp;quot;&lt;/span&gt;

$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sudo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;echo &amp;#39;/etc/profile.d/test.sh goes&amp;#39;&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;gt;/etc/profile.d/test.sh&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;cat&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/etc/profile.d/test.sh
&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;/etc/profile.d/test.sh goes&amp;#39;&lt;/span&gt;

$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sudo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sed&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-i&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;1 iecho &amp;quot;/etc/profile goes start&amp;quot;\n&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/etc/profile&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;head&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-n&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/etc/profile
&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;/etc/profile goes start&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;重新登录终端，可以看到各个环境变量文件的启动顺序：
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FjfxnRc511xnemv-cNNPqrgYnswQ.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;当我们不正常启动（su 命令切换用户），环境变量文件加载顺序如下：
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FrboYfll_7NrzHqTK7q0NHc1Ul0Q.png&#34; /&gt;
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fr52DR5Y6x87q6dltzXuIzQQf09-.png&#34; /&gt;&lt;/p&gt;
&lt;h1 id=&#34;常用环境变量&#34;&gt;常用环境变量&lt;a class=&#34;headerlink&#34; href=&#34;#常用环境变量&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;我们可以使用 &lt;code&gt;env&lt;/code&gt;  命令查看当前用户的所有环境变量设置：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;env
&lt;span class=&#34;nv&#34;&gt;MANPATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/software/texlive/2018/texmf-dist/doc/man:/usr/local/auto-devops/ansible/docs/man:
&lt;span class=&#34;nv&#34;&gt;XDG_SESSION_ID&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;61&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;HOSTNAME&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;ecs-steven
&lt;span class=&#34;nv&#34;&gt;TERM&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;xterm
&lt;span class=&#34;nv&#34;&gt;SHELL&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/bin/bash
&lt;span class=&#34;nv&#34;&gt;HISTSIZE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3000&lt;/span&gt;
......
&lt;span class=&#34;nv&#34;&gt;LESSOPEN&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=||&lt;/span&gt;/usr/bin/lesspipe.sh&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;%s
&lt;span class=&#34;nv&#34;&gt;INFOPATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/software/texlive/2018/texmf-dist/doc/info:
&lt;span class=&#34;nv&#34;&gt;XDG_RUNTIME_DIR&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/run/user/1000
&lt;span class=&#34;nv&#34;&gt;DISPLAY&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;localhost:16.0
&lt;span class=&#34;nv&#34;&gt;HISTTIMEFORMAT&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;%F&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;%T
&lt;span class=&#34;nv&#34;&gt;_&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/bin/env
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h1 id=&#34;用户环境变量常用设置方法&#34;&gt;&lt;strong&gt;用户环境变量常用设置方法&lt;/strong&gt;&lt;a class=&#34;headerlink&#34; href=&#34;#用户环境变量常用设置方法&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id=&#34;系统级别设置&#34;&gt;系统级别设置&lt;a class=&#34;headerlink&#34; href=&#34;#系统级别设置&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;/etc/profile：&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;全局的系统环境变量设置。适用于多个 shell，比如 bash, sh, zsh 之类。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;/etc/bashrc：&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;bash shell 全局环境变量。&lt;/p&gt;
&lt;h2 id=&#34;用户级别设置&#34;&gt;用户级别设置&lt;a class=&#34;headerlink&#34; href=&#34;#用户级别设置&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;\~/.bashrc：&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;包含专用于当前用户 bash
shell 的 bash 信息，当登录时以及每次打开新的 shell
时，该文件被读取。每开一个 shell，这个文件会读取一次。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;\~/.bash_profile：&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;每个用户都可使用该文件输入专用于自己使用的 shell 信息，当用户使用 login
shell 模式登陆时，该文件仅仅执行一次。&lt;/p&gt;
&lt;h2 id=&#34;用户临时当前-shell-对话框环境变量设置&#34;&gt;&lt;strong&gt;用户临时（当前 shell  对话框）环境变量设置&lt;/strong&gt;&lt;a class=&#34;headerlink&#34; href=&#34;#用户临时当前-shell-对话框环境变量设置&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;export
命令：用于/bin/bash shell 类型&lt;/p&gt;
&lt;h2 id=&#34;用户级别-bashrc-示例&#34;&gt;用户级别 .bashrc 示例&lt;a class=&#34;headerlink&#34; href=&#34;#用户级别-bashrc-示例&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# User Specific Alias&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;alias&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;ll&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;ls -lht&amp;#39;&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;alias&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;le&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;less -S&amp;#39;&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# Custom History setting&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;HISTFILESIZE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3000000&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;HISTSIZE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3000&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;HISTTIMEFORMAT&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;%F %T &amp;#39;&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;HISTCONTROL&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;ignoredups
&lt;span class=&#34;nv&#34;&gt;PROMPT_COMMAND&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;history -a“&lt;/span&gt;

&lt;span class=&#34;s2&#34;&gt;# Login Style&lt;/span&gt;
&lt;span class=&#34;s2&#34;&gt;PS1=&amp;#39;\033[35;1m\u@\h \[\e[m\]\t \[\033[36;1m\]&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;pwd&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; \n&lt;/span&gt;$&lt;span class=&#34;s2&#34;&gt; \[\e[m\]&amp;#39;&lt;/span&gt;
&lt;span class=&#34;s2&#34;&gt;clear;&lt;/span&gt;

&lt;span class=&#34;s2&#34;&gt;# Shortcut Commands&lt;/span&gt;
&lt;span class=&#34;s2&#34;&gt;bcl_fq=&amp;#39;/Bioinfo/Project/BCL_fastq‘&lt;/span&gt;

&lt;span class=&#34;s2&#34;&gt;# Custom Path&lt;/span&gt;
&lt;span class=&#34;s2&#34;&gt;ANACONDA2_PATH=&amp;#39;/home/shenweiyan/software/Anaconda2/bin&amp;#39;&lt;/span&gt;
&lt;span class=&#34;s2&#34;&gt;PERL_PATH=&amp;#39;/home/shenweiyan/software/Perl-5.26/bin‘&lt;/span&gt;
&lt;span class=&#34;s2&#34;&gt;export PATH=&amp;quot;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$ANACONDA2_PATH&lt;/span&gt;:&lt;span class=&#34;nv&#34;&gt;$ANACONDA3_PATH&lt;/span&gt;:&lt;span class=&#34;nv&#34;&gt;$hdf5_PATH&lt;/span&gt;:&lt;span class=&#34;nv&#34;&gt;$PERL_PATH&lt;/span&gt;:&lt;span class=&#34;nv&#34;&gt;$PATH&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;

&lt;span class=&#34;s2&#34;&gt;export LD_LIBRARY_PATH=&amp;quot;&lt;/span&gt;……:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$LD_LIBRARY_PATH&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;
&lt;span class=&#34;s2&#34;&gt;export PYTHONPATH=&amp;quot;&lt;/span&gt;……:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PYTHONPATH&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%85%8D%E7%BD%AE%E4%BD%BF%E7%94%A8/2019-07-19-linux-lib-env/</link>
      <pubDate>Fri, 19 Jul 2019 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%85%8D%E7%BD%AE%E4%BD%BF%E7%94%A8/2019-07-19-linux-lib-env/</guid>
      
    </item>
    
    <item>
      <title>Linux 磁盘管理之 LVM 原理与操作</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2019-07-19&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2019-07-19T00:00:00&#39;&gt;2019-07-19&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2023-04-28&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2023-04-28T11:14:32&#39;&gt;2023-04-28&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;LVM （ &lt;strong&gt;L&lt;/strong&gt;ogical &lt;strong&gt;V&lt;/strong&gt; olume &lt;strong&gt;M&lt;/strong&gt;anager,  逻辑卷管理器）  是  Linux  环境下对硬盘分区进行管理的一种机制，开创这项技术的初衷是为了解决传统硬盘分区创建后不易更改其大小的弱点。对于传统硬盘分区进行强制扩容和缩小技术理论上虽然是可行的，但却有可能造成数据的丢失，LVM  逻辑卷管理器技术能够将多块硬盘进行卷组合并，让用户不必关心设备底层的架构和布局，拿来即用。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Frz-TAZRHf6dF6dw2pwpnQDdTBkY.jpeg&#34; /&gt;&lt;/p&gt;
&lt;p&gt;LVM  逻辑卷管理器是在磁盘分区和文件系统之间添加的逻辑层，它提供了一个抽象的卷组，可以使得多块硬盘进行卷组合并，让用户不必关心物理硬盘设备的底层结构，从而实现对分区的灵活动态调整。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;LVM  逻辑卷管理器的技术结构如图 2  所示，刘遄老师来举个吃货的例子帮助同学们理解吧，比如家里想吃馒头但面粉不够了，妈妈分别从隔壁老王家、老李家、老张家借来一些面粉，蒸出馒头后大家一起来吃，首先咱们需要将这些面粉（&lt;strong&gt;物理卷  PV&lt;/strong&gt;，Physical Volume）合并成一个大面团（&lt;strong&gt;卷组  VG&lt;/strong&gt;，Volume Group），然后把这一大团面再分割成一个个小馒头（&lt;strong&gt;逻辑卷  LV&lt;/strong&gt;，Logical Volume），每个小馒头的重量必须是每勺面粉（&lt;strong&gt;基本单元  PE&lt;/strong&gt;，Physical Extent）的倍数。物理卷是处于逻辑卷管理器中最底层的资源，可以理解成是物理硬盘、硬盘分区或者 RAID 磁盘阵列组都可以，而卷组是建立在物理卷之上的，一个卷组中可以包含多个物理卷，当然在卷组创建之后也可以继续向其中添加新的物理卷，而逻辑卷是建立于卷组之上的，将卷组中空闲的资源建立出新的逻辑卷，并且逻辑卷建立后可以动态的扩展或缩小空间，这也就是  LVM  逻辑卷管理器的核心理念。（&lt;a href=&#34;http://www.linuxprobe.com/chapter-07.html&#34;&gt;第 7 章   使用 RAID 与 LVM 磁盘阵列技术&lt;/a&gt;）&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FvR0YydWrGOCat-HuBQQ21vHyogG.png&#34; /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h5 id=&#34;_1&#34;&gt;&lt;a class=&#34;headerlink&#34; href=&#34;#_1&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h5&gt;
&lt;h2 id=&#34;常用命令&#34;&gt;常用命令&lt;a class=&#34;headerlink&#34; href=&#34;#常用命令&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;部署  LVM  逻辑卷管理器需要依次对对物理卷、卷组和逻辑卷的逐个配置，常见的命令分别包括有：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;功能/命令&lt;/th&gt;
&lt;th&gt;物理卷管理&lt;/th&gt;
&lt;th&gt;卷组管理&lt;/th&gt;
&lt;th&gt;逻辑卷管理&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;扫描&lt;/td&gt;
&lt;td&gt;pvscan&lt;/td&gt;
&lt;td&gt;vgscan&lt;/td&gt;
&lt;td&gt;lvscan&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;建立&lt;/td&gt;
&lt;td&gt;pvcreate&lt;/td&gt;
&lt;td&gt;vgcreate&lt;/td&gt;
&lt;td&gt;lvcreate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;显示&lt;/td&gt;
&lt;td&gt;pvdisplay&lt;/td&gt;
&lt;td&gt;vgdisplay&lt;/td&gt;
&lt;td&gt;lvdisplay&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;删除&lt;/td&gt;
&lt;td&gt;pvremove&lt;/td&gt;
&lt;td&gt;vgremove&lt;/td&gt;
&lt;td&gt;lvremove&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;缩小&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;vgreduce&lt;/td&gt;
&lt;td&gt;lvreduce&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;缩小&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;vgreduce&lt;/td&gt;
&lt;td&gt;lvreduce&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;实战展示&#34;&gt;实战展示&lt;a class=&#34;headerlink&#34; href=&#34;#实战展示&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;阿里云  ECS  扩充  4T  磁盘，并挂载。&lt;/p&gt;
&lt;h3 id=&#34;物理硬盘&#34;&gt;物理硬盘&lt;a class=&#34;headerlink&#34; href=&#34;#物理硬盘&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;新增两个物理硬盘  vdb（2199.0 GB），vdc（2199.0 GB）。  为接下来   做 LVM  做准备。&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@iZ88qg9l425Z&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# fdisk -l&lt;/span&gt;

Disk&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/dev/vda:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;42&lt;/span&gt;.9&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;GB,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;42949672960&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bytes
&lt;span class=&#34;m&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;heads,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;63&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sectors/track,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;5221&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;cylinders
&lt;span class=&#34;nv&#34;&gt;Units&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;cylinders&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;16065&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;512&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;8225280&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bytes
Sector&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;size&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;logical/physical&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;512&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bytes&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;512&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bytes
I/O&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;size&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;minimum/optimal&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;512&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bytes&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;512&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bytes
Disk&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;identifier:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;0x00078f9c

&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;Device&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Boot&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;Start&lt;span class=&#34;w&#34;&gt;         &lt;/span&gt;End&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;Blocks&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;Id&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;System
/dev/vda1&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;*&lt;span class=&#34;w&#34;&gt;           &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;5222&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;41940992&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;83&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Linux

Disk&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/dev/vdb:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2199&lt;/span&gt;.0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;GB,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2199023255552&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bytes
&lt;span class=&#34;m&#34;&gt;16&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;heads,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;63&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sectors/track,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4260880&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;cylinders
&lt;span class=&#34;nv&#34;&gt;Units&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;cylinders&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1008&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;512&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;516096&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bytes
Sector&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;size&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;logical/physical&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;512&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bytes&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;512&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bytes
I/O&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;size&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;minimum/optimal&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;512&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bytes&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;512&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bytes
Disk&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;identifier:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;0x00000000


Disk&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/dev/vdc:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2199&lt;/span&gt;.0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;GB,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2199023255552&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bytes
&lt;span class=&#34;m&#34;&gt;16&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;heads,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;63&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sectors/track,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4260880&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;cylinders
&lt;span class=&#34;nv&#34;&gt;Units&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;cylinders&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1008&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;512&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;516096&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bytes
Sector&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;size&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;logical/physical&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;512&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bytes&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;512&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bytes
I/O&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;size&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;minimum/optimal&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;512&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bytes&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;512&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bytes
Disk&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;identifier:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;0x00000000
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;硬盘分区&#34;&gt;硬盘分区&lt;a class=&#34;headerlink&#34; href=&#34;#硬盘分区&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;对添加的物理硬盘进行分区，这里先对 /dev/vdc 进行处理，完成后对 /dev/vdb 进行同样的处理。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@iZ88qg9l425Z&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# fdisk /dev/vdc&lt;/span&gt;
Device&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;contains&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;neither&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;a&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;valid&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;DOS&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;partition&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;table,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;nor&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Sun,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;SGI&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;or&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;OSF&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;disklabel
Building&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;a&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;new&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;DOS&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;disklabel&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;disk&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;identifier&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;0x4613ad5e.
Changes&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;will&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;remain&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;memory&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;only,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;until&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;you&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;decide&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;write&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;them.
After&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;that,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;course,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;previous&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;content&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;won&lt;span class=&#34;s1&#34;&gt;&amp;#39;t be recoverable.&lt;/span&gt;

&lt;span class=&#34;s1&#34;&gt;Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)&lt;/span&gt;

&lt;span class=&#34;s1&#34;&gt;WARNING: The size of this disk is 2.2 TB (2199023255552 bytes).&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;DOS partition table format can not be used on drives for volumes&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;larger than (2199023255040 bytes) for 512-byte sectors. Use parted(1) and GUID&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;partition table format (GPT).&lt;/span&gt;


&lt;span class=&#34;s1&#34;&gt;WARNING: DOS-compatible mode is deprecated. It&amp;#39;&lt;/span&gt;s&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;strongly&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;recommended&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to
&lt;span class=&#34;w&#34;&gt;         &lt;/span&gt;switch&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;off&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mode&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;command&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;c&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;and&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;change&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;display&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;units&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to
&lt;span class=&#34;w&#34;&gt;         &lt;/span&gt;sectors&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;command&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;u&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;.

Command&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;m&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;help&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;p

Disk&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/dev/vdc:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2199&lt;/span&gt;.0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;GB,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2199023255552&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bytes
&lt;span class=&#34;m&#34;&gt;16&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;heads,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;63&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sectors/track,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4260880&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;cylinders
&lt;span class=&#34;nv&#34;&gt;Units&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;cylinders&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1008&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;512&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;516096&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bytes
Sector&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;size&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;logical/physical&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;512&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bytes&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;512&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bytes
I/O&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;size&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;minimum/optimal&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;512&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bytes&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;512&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bytes
Disk&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;identifier:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;0x4613ad5e

&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;Device&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Boot&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;Start&lt;span class=&#34;w&#34;&gt;         &lt;/span&gt;End&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;Blocks&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;Id&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;System

Command&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;m&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;help&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;n&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 创建新分区&lt;/span&gt;
Command&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;action
&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;e&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;extended&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# e 为逻辑分区&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;p&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;primary&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;partition&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;-4&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# p 为主分区&lt;/span&gt;
Select&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;default&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;p&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;p
Partition&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;number&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;-4&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 由于是新盘我们输入1来分第一个主分区，共可以分4个主分区&lt;/span&gt;
First&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sector&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;-4260880,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;default&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;:&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 选择该分区的起始磁盘数，如无特殊需求强烈建议选择默认，也就是1来分区（可直接按回车）&lt;/span&gt;
Using&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;default&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;value&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
Last&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;cylinder,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;+cylinders&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;or&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;+size&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;K,M,G&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;-4260880,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;default&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4260880&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;:&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 定义该分区的大小，如果按默认（按回车）即是使用全部可用存储额，如分一个 1G 的空间，输入 +1024m&lt;/span&gt;
Using&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;default&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;value&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4260880&lt;/span&gt;

Command&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;m&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;help&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;t&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 改变分区标识符&lt;/span&gt;
Selected&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;partition&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
Hex&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;code&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;L&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;list&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;codes&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;8e
Changed&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;system&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;partition&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;8e&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;Linux&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;LVM&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;

Command&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;m&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;help&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;p

Disk&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/dev/vdc:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2199&lt;/span&gt;.0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;GB,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2199023255552&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bytes
&lt;span class=&#34;m&#34;&gt;16&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;heads,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;63&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sectors/track,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4260880&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;cylinders
&lt;span class=&#34;nv&#34;&gt;Units&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;cylinders&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1008&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;512&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;516096&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bytes
Sector&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;size&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;logical/physical&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;512&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bytes&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;512&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bytes
I/O&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;size&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;minimum/optimal&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;512&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bytes&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;512&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bytes
Disk&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;identifier:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;0x4613ad5e

&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;Device&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Boot&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;Start&lt;span class=&#34;w&#34;&gt;         &lt;/span&gt;End&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;Blocks&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;Id&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;System
/dev/vdc1&lt;span class=&#34;w&#34;&gt;               &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4260880&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2147483488&lt;/span&gt;+&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;8e&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Linux&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;LVM

Command&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;m&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;help&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;w&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 写入分区&lt;/span&gt;
The&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;partition&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;table&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;has&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;been&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;altered!

Calling&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ioctl&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;re-read&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;partition&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;table.
Syncing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;disks.
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@iZ88qg9l425Z&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;#&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;创建-pv&#34;&gt;创建 PV&lt;a class=&#34;headerlink&#34; href=&#34;#创建-pv&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;在新建的分区上创建 PV 物理卷，这里先对 /dev/vdc 进行处理，完成后需要对 /dev/vdb 进行同样的处理。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@iZ88qg9l425Z&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# pvcreate /dev/vdc1&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Physical&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;volume&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;/dev/vdc1&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;successfully&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;created
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@iZ88qg9l425Z&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# pvs&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;PV&lt;span class=&#34;w&#34;&gt;         &lt;/span&gt;VG&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;Fmt&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Attr&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;PSize&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;PFree
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;/dev/vdc1&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;lvm2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;a--&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;.00t&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;.00t
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@iZ88qg9l425Z&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# pvdisplay&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;/dev/vdc1&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;is&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;a&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;new&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;physical&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;volume&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;2.00 TiB&amp;quot;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;---&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;NEW&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Physical&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;volume&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;---
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;PV&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Name&lt;span class=&#34;w&#34;&gt;               &lt;/span&gt;/dev/vdc1
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;VG&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Name
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;PV&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Size&lt;span class=&#34;w&#34;&gt;               &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;.00&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;TiB
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Allocatable&lt;span class=&#34;w&#34;&gt;           &lt;/span&gt;NO
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;PE&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Size&lt;span class=&#34;w&#34;&gt;               &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Total&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;PE&lt;span class=&#34;w&#34;&gt;              &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Free&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;PE&lt;span class=&#34;w&#34;&gt;               &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Allocated&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;PE&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;PV&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;UUID&lt;span class=&#34;w&#34;&gt;               &lt;/span&gt;83IQY3-Z7O0-kicK-xIbJ-ZmUW-AlOF-ENUAp6

&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@iZ88qg9l425Z&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# fdisk -l&lt;/span&gt;

Disk&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/dev/vda:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;42&lt;/span&gt;.9&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;GB,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;42949672960&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bytes
&lt;span class=&#34;m&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;heads,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;63&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sectors/track,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;5221&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;cylinders
&lt;span class=&#34;nv&#34;&gt;Units&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;cylinders&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;16065&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;512&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;8225280&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bytes
Sector&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;size&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;logical/physical&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;512&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bytes&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;512&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bytes
I/O&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;size&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;minimum/optimal&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;512&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bytes&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;512&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bytes
Disk&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;identifier:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;0x00078f9c

&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;Device&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Boot&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;Start&lt;span class=&#34;w&#34;&gt;         &lt;/span&gt;End&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;Blocks&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;Id&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;System
/dev/vda1&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;*&lt;span class=&#34;w&#34;&gt;           &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;5222&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;41940992&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;83&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Linux

Disk&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/dev/vdb:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2199&lt;/span&gt;.0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;GB,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2199023255552&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bytes
&lt;span class=&#34;m&#34;&gt;16&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;heads,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;63&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sectors/track,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4260880&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;cylinders
&lt;span class=&#34;nv&#34;&gt;Units&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;cylinders&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1008&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;512&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;516096&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bytes
Sector&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;size&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;logical/physical&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;512&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bytes&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;512&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bytes
I/O&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;size&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;minimum/optimal&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;512&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bytes&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;512&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bytes
Disk&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;identifier:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;0x00000000


Disk&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/dev/vdc:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2199&lt;/span&gt;.0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;GB,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2199023255552&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bytes
&lt;span class=&#34;m&#34;&gt;16&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;heads,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;63&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sectors/track,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4260880&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;cylinders
&lt;span class=&#34;nv&#34;&gt;Units&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;cylinders&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1008&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;512&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;516096&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bytes
Sector&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;size&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;logical/physical&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;512&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bytes&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;512&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bytes
I/O&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;size&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;minimum/optimal&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;512&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bytes&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;512&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bytes
Disk&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;identifier:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;0x4613ad5e

&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;Device&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Boot&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;Start&lt;span class=&#34;w&#34;&gt;         &lt;/span&gt;End&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;Blocks&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;Id&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;System
/dev/vdc1&lt;span class=&#34;w&#34;&gt;               &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4260880&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2147483488&lt;/span&gt;+&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;8e&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Linux&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;LVM
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;对 /dev/vdc、/dev/vdb 进行同样的操作（硬盘分区、创建 PV）后查看已有的物理卷。&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@iZ88qg9l425Z&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# pvdisplay&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;/dev/vdb1&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;is&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;a&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;new&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;physical&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;volume&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;2.00 TiB&amp;quot;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;---&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;NEW&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Physical&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;volume&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;---
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;PV&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Name&lt;span class=&#34;w&#34;&gt;               &lt;/span&gt;/dev/vdb1
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;VG&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Name
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;PV&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Size&lt;span class=&#34;w&#34;&gt;               &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;.00&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;TiB
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Allocatable&lt;span class=&#34;w&#34;&gt;           &lt;/span&gt;NO
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;PE&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Size&lt;span class=&#34;w&#34;&gt;               &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Total&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;PE&lt;span class=&#34;w&#34;&gt;              &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Free&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;PE&lt;span class=&#34;w&#34;&gt;               &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Allocated&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;PE&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;PV&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;UUID&lt;span class=&#34;w&#34;&gt;               &lt;/span&gt;YMNnk1-sdi5-zyhj-coI5-hwBJ-Kofw-2BLE58

&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;/dev/vdc1&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;is&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;a&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;new&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;physical&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;volume&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;2.00 TiB&amp;quot;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;---&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;NEW&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Physical&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;volume&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;---
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;PV&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Name&lt;span class=&#34;w&#34;&gt;               &lt;/span&gt;/dev/vdc1
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;VG&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Name
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;PV&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Size&lt;span class=&#34;w&#34;&gt;               &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;.00&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;TiB
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Allocatable&lt;span class=&#34;w&#34;&gt;           &lt;/span&gt;NO
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;PE&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Size&lt;span class=&#34;w&#34;&gt;               &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Total&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;PE&lt;span class=&#34;w&#34;&gt;              &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Free&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;PE&lt;span class=&#34;w&#34;&gt;               &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Allocated&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;PE&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;PV&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;UUID&lt;span class=&#34;w&#34;&gt;               &lt;/span&gt;83IQY3-Z7O0-kicK-xIbJ-ZmUW-AlOF-ENUAp6
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;把-pv-加入到-vg&#34;&gt;把 PV 加入到 VG&lt;a class=&#34;headerlink&#34; href=&#34;#把-pv-加入到-vg&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;将所有的新建的 PV 加入名为 vgdate 的卷组 (Volume Group) 中。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@iZ88qg9l425Z&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# vgcreate vgdata /dev/vdb1 /dev/vdc1&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Volume&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;group&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;vgdata&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;successfully&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;created
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@iZ88qg9l425Z&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# vgs&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;VG&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;#PV #LV #SN Attr   VSize VFree&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;vgdata&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;wz--n-&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4&lt;/span&gt;.00t&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4&lt;/span&gt;.00t
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@iZ88qg9l425Z&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# vgdisplay&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;---&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Volume&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;group&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;---
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;VG&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Name&lt;span class=&#34;w&#34;&gt;               &lt;/span&gt;vgdata
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;System&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ID
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Format&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;lvm2
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Metadata&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Areas&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Metadata&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Sequence&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;No&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;VG&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Access&lt;span class=&#34;w&#34;&gt;             &lt;/span&gt;read/write
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;VG&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Status&lt;span class=&#34;w&#34;&gt;             &lt;/span&gt;resizable
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;MAX&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;LV&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Cur&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;LV&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Open&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;LV&lt;span class=&#34;w&#34;&gt;               &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Max&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;PV&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Cur&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;PV&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Act&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;PV&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;VG&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Size&lt;span class=&#34;w&#34;&gt;               &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4&lt;/span&gt;.00&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;TiB
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;PE&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Size&lt;span class=&#34;w&#34;&gt;               &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4&lt;/span&gt;.00&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;MiB
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Total&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;PE&lt;span class=&#34;w&#34;&gt;              &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1048574&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Alloc&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;PE&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Size&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Free&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;PE&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Size&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1048574&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4&lt;/span&gt;.00&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;TiB
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;VG&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;UUID&lt;span class=&#34;w&#34;&gt;               &lt;/span&gt;QafGYd-s0HW-6Wrx-pr6v-1fnR-mvpB-zrZ0md
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;创建-lv-逻辑卷&#34;&gt;创建 LV 逻辑卷&lt;a class=&#34;headerlink&#34; href=&#34;#创建-lv-逻辑卷&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;创建名为 lvdata 的 LV 逻辑卷。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@iZ88qg9l425Z&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# lvcreate -l 1048574 -n lvdata vgdata&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Logical&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;volume&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;lvdata&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;created
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;格式化并挂载&#34;&gt;格式化并挂载&lt;a class=&#34;headerlink&#34; href=&#34;#格式化并挂载&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;对 LV 逻辑卷进行格式化，然后挂载。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@iZ88qg9l425Z&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# mkfs.ext4 -c /dev/vgdata/lvdata   # 对分区使用 ext4 格式化，-c 参数要先检测磁盘坏道&lt;/span&gt;
mke2fs&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.41.12&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;17&lt;/span&gt;-May-2010&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
Filesystem&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;label&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;
OS&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;type:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Linux
Block&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4096&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
Fragment&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4096&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;Stride&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;blocks,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Stripe&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;blocks
&lt;span class=&#34;m&#34;&gt;268435456&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;inodes,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1073739776&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;blocks
&lt;span class=&#34;m&#34;&gt;53686988&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;blocks&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;5&lt;/span&gt;.00%&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;reserved&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;super&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;user
First&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;data&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;block&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;
Maximum&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;filesystem&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;blocks&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4294967296&lt;/span&gt;
&lt;span class=&#34;m&#34;&gt;32768&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;block&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;groups
&lt;span class=&#34;m&#34;&gt;32768&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;blocks&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;per&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;group,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;32768&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;fragments&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;per&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;group
&lt;span class=&#34;m&#34;&gt;8192&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;inodes&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;per&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;group
Superblock&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;backups&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;stored&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;on&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;blocks:
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;32768&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;98304&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;163840&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;229376&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;294912&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;819200&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;884736&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1605632&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2654208&lt;/span&gt;,
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4096000&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;7962624&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;11239424&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;20480000&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;23887872&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;71663616&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;78675968&lt;/span&gt;,
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;102400000&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;214990848&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;512000000&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;550731776&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;644972544&lt;/span&gt;

Writing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;inode&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tables:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;
Creating&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;journal&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;32768&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;blocks&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;
Writing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;superblocks&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;and&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;filesystem&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;accounting&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;information:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;

This&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;filesystem&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;will&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;be&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;automatically&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;checked&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;every&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;32&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mounts&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;or
&lt;span class=&#34;m&#34;&gt;180&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;days,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;whichever&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;comes&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;first.&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Use&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tune2fs&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-c&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;or&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-i&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;override.
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@iZ88qg9l425Z&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# mkdir /disk1&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@iZ88qg9l425Z&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# mount /dev/vgdata/lvdata /disk1/&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@iZ88qg9l425Z&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# df -Th&lt;/span&gt;
Filesystem&lt;span class=&#34;w&#34;&gt;           &lt;/span&gt;Type&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;Size&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Used&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Avail&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Use%&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Mounted&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;on
/dev/vda1&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;ext4&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;40G&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;.6G&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;34G&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;10&lt;/span&gt;%&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/
tmpfs&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;tmpfs&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;.9G&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;.9G&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;%&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/dev/shm
/dev/mapper/vgdata-lvdata
&lt;span class=&#34;w&#34;&gt;                     &lt;/span&gt;ext4&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4&lt;/span&gt;.0T&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;195M&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;.8T&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;%&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/disk1
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@iZ88qg9l425Z&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;#&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;参考资料&#34;&gt;参考资料&lt;a class=&#34;headerlink&#34; href=&#34;#参考资料&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;《&lt;a href=&#34;https://linux.cn/article-3218-1.html&#34;&gt;Linux LVM 简明教程》&lt;/a&gt;- Linux 中国 · 开源社区&lt;/li&gt;
&lt;li&gt;凌激冰 -《&lt;a href=&#34;https://blog.51cto.com/dreamfire/1084729&#34;&gt;Linux LVM 逻辑卷配置过程详解（创建，增加，减少，删除，卸载）&lt;/a&gt;》- 51CTO&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.zhihu.com/people/4k8k&#34;&gt;字诀跳动&lt;/a&gt; - 《&lt;a href=&#34;https://zhuanlan.zhihu.com/p/296777898&#34;&gt;一篇看懂！Linux 磁盘的管理（分区、格式化、挂载），LVM 逻辑卷，RAID 磁盘阵列&lt;/a&gt;》 - 知乎&lt;/li&gt;
&lt;/ul&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%85%8D%E7%BD%AE%E4%BD%BF%E7%94%A8/2019-07-19-linux-lvm/</link>
      <pubDate>Fri, 19 Jul 2019 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%85%8D%E7%BD%AE%E4%BD%BF%E7%94%A8/2019-07-19-linux-lvm/</guid>
      
    </item>
    
    <item>
      <title>Linux 下的进程管理</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2019-07-19&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2019-07-19T00:00:00&#39;&gt;2019-07-19&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-06-25&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-06-25T11:04:02&#39;&gt;2021-06-25&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;找出 username 用户所有进程包括子进程并全部 kill 掉：&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;ps&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-ef&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;grep&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;^username&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;cut&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-c&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;10&lt;/span&gt;-15&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;xargs&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;kill&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-9
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;找出所有与  username 相关的进程，然后 grep -v 过滤掉 PID 只剩下进程信息，然后逐行 kill 掉，如下：&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;ps&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-u&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;username&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;grep&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-v&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;PID&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;cut&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-c&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;-5&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;xargs&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;kill&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-9

&lt;span class=&#34;c1&#34;&gt;# 或者&lt;/span&gt;
ps&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-u&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;username&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;grep&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-v&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;PID&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;awk&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;{print$1}&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;xargs&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;kill&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-9
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;上面的命令也可以在 Linux 上运行，不过在 Linux 下可以用更简单的 killall，Solaris 上没有 killall：&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;killall&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-u&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;username&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;#杀掉某个用户在本地的所有进程&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%85%8D%E7%BD%AE%E4%BD%BF%E7%94%A8/2019-07-19-ucig1a/</link>
      <pubDate>Fri, 19 Jul 2019 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%85%8D%E7%BD%AE%E4%BD%BF%E7%94%A8/2019-07-19-ucig1a/</guid>
      
    </item>
    
    <item>
      <title>发现了阿里云 APP 的一个小 BUG</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2019-07-17&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2019-07-17T00:00:00&#39;&gt;2019-07-17&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-06-25&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-06-25T10:48:40&#39;&gt;2021-06-25&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;前几天在华为手机上使用阿里云 APP，从 oss bucket 中下载了一张图片，想要通过微信把它发给一个朋友时，发现在打开微信选择照片时却无法找到新下载的图片。同样在打开的 Android 系统相册中也完全找不到这个照片，虽然这个图片确确实实已经下载到了手机上。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;手机系统：EMUI 8.0.0&lt;/li&gt;
&lt;li&gt;阿里云 APP：V4.11.0&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;后来谷歌了一下，最后找出问题所在：
Android 只会在每次启动的时候扫描系统相册，并将扫描到的信息存储在数据库（MediaStore）。然后系统相册将直接调用数据库中的数据，所以当新的图片存到相册后，并没有将数据写入到数据库，所以在微信扫描里面自然就找不到这张图片了，所以解决的办法就是更新这个数据库。&lt;/p&gt;
&lt;p&gt;为了验证问题，我在手机的文件管理中找到了这张图片所在的目录，进去重新刷新该文件夹，然后打开系统相册，果然就可以看到这张下载的图片了。&lt;/p&gt;
&lt;p&gt;后来，向阿里云反馈也的确证实了该问题：
&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FnfRQ6bjCk6drR_BULl4yyzFX0fK.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;虽然本人对 Android 开发完全不懂， 但也想了解一下，在 Android 手机中下载图片怎么样才能实时刷新系统相册呢？&lt;/p&gt;
&lt;p&gt;首先，是在 Adnroid 中保存图片。这里面会涉及到是否能指定路径保存和名称，方法可能有如下两种：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;一，自己写方法。&lt;/li&gt;
&lt;li&gt;二，调用系统提供的插入图库的方法保存图片。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;其次，是更新系统图库。这里有三种策略：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;重新扫描整个存储空间，将数据库更新。扫描整个 sd 卡的广播，如果 sd 卡里面东西多会扫描很久，用户体验差。&lt;/li&gt;
&lt;li&gt;将新的数据加到数据库。样操作对数据的安全性要求很高。&lt;/li&gt;
&lt;li&gt;直接扫描新添加的文件（或者是该文件所在的文件夹）。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;关于在代码层面刷新系统 Media，网络上面主要几种方法：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;通过操作 MediaStore 类。&lt;/li&gt;
&lt;li&gt;发送广播更新 MediaStore。&lt;/li&gt;
&lt;li&gt;通过操作 MediaScannerConnection 类。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;当然或许会有更多的解决方法，小编作为一个 Adnroid 的小白，就不在这里啰嗦了。&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/Windows/2019-07-17-bugs-of-aliyun-app/</link>
      <pubDate>Wed, 17 Jul 2019 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/Windows/2019-07-17-bugs-of-aliyun-app/</guid>
      
    </item>
    
    <item>
      <title>Google Code Prettify 代码高亮使用教程</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2019-07-17&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2019-07-17T00:00:00&#39;&gt;2019-07-17&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-06-25&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-06-25T10:53:27&#39;&gt;2021-06-25&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Google Code Prettify 是 Google 的一款代码高亮插件，它由 js 代码和 css 代码构成，用来高亮显示 HTML 页面中的源代码。&lt;/p&gt;
&lt;p&gt;Google Code Prettify 支持的语言数量比较多、比较全，支持自动识别代码语言，不需要手动指定，渲染效果也不错。最重要的是，非常轻巧，加载速度远比 SyntaxHighlighter 快得多，而且可以直接使用 Markdown 的语法写代码。&lt;/p&gt;
&lt;p&gt;GitHub 地址：&lt;a href=&#34;https://github.com/google/code-prettify&#34;&gt;https://github.com/google/code-prettify&lt;/a&gt;&lt;/p&gt;
&lt;h1 id=&#34;1主题&#34;&gt;&lt;strong&gt;1、主题&lt;/strong&gt;&lt;a class=&#34;headerlink&#34; href=&#34;#1主题&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;google-code-prettify 提供了 5 个 css 主题可供选择，而且支持自定义 style。相关的 demo 及 style 文件参见：&lt;a href=&#34;https://rawgit.com/google/code-prettify/master/styles/index.html&#34;&gt;https://rawgit.com/google/code-prettify/master/styles/index.html&lt;/a&gt;。&lt;/p&gt;
&lt;h1 id=&#34;2文件&#34;&gt;&lt;strong&gt;2、文件&lt;/strong&gt;&lt;a class=&#34;headerlink&#34; href=&#34;#2文件&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;google-code-prettify 需要两个文件，prettify.js 和 prettify.css，去官网下载。把这两个放到 head 模板中，如下：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;link&lt;/span&gt;
  &lt;span class=&#34;na&#34;&gt;href&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;http://alfred-sun.github.io/assets/google-code-prettify/prettify.css&amp;quot;&lt;/span&gt;
  &lt;span class=&#34;na&#34;&gt;rel&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;stylesheet&amp;quot;&lt;/span&gt;
  &lt;span class=&#34;na&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;text/css&amp;quot;&lt;/span&gt;
  &lt;span class=&#34;na&#34;&gt;media&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;all&amp;quot;&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;script&lt;/span&gt;
  &lt;span class=&#34;na&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt;
  &lt;span class=&#34;na&#34;&gt;src&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;http://alfred-sun.github.io/assets/google-code-prettify/prettify.js&amp;quot;&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;script&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h1 id=&#34;3使用&#34;&gt;&lt;strong&gt;3、使用&lt;/strong&gt;&lt;a class=&#34;headerlink&#34; href=&#34;#3使用&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;考虑到加载速度，最好 js 写到文档末尾，body 闭合标签之前，css 写到头部之后，还需要在合适位置（如：$(document).ready）添加如下代码，用于识别并高亮代码块，这个需要使用 jQuery：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nx&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;window&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;prettyPrint&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;prettyPrint&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;到这里，我们就可以使用 &lt;code&gt;&amp;lt;pre&amp;gt;&amp;lt;/pre&amp;gt;&lt;/code&gt; 标签进行高亮了。&lt;/p&gt;
&lt;h2 id=&#34;31-基本用法&#34;&gt;3.1. 基本用法&lt;a class=&#34;headerlink&#34; href=&#34;#31-基本用法&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Google 的高亮插件使用比较方便，只需要在  &lt;code&gt;&amp;lt;pre&amp;gt;&lt;/code&gt;  的标签上加入 &lt;code&gt;prettyprint&lt;/code&gt;  即可。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;pre&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;prettyPrint&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
    // code here
&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;pre&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;32-行号设置&#34;&gt;3.2. 行号设置&lt;a class=&#34;headerlink&#34; href=&#34;#32-行号设置&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;google-code-prettify 默认每五行显示一次行号，如果想要显示所有的行号，我们只需要在 google-code-prettify 对应主题的 css 文件中找到下面一样把它注释掉即可：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8 { list-style-type: none }
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fk8fPWIL8yWxeBJCxFjzJ001cJ2h.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;33-markdown&#34;&gt;3.3. Markdown&lt;a class=&#34;headerlink&#34; href=&#34;#33-markdown&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;如果用 Markdown 来生成 HTML 的话，需事先给相关的标签追加必要的 class；Markdown 产生的代码块必然含义 &lt;code&gt;&amp;lt;pre&amp;gt;&lt;/code&gt;  元素，那么可以用 jQuery 在 Prettyprinter 运行前处理下 HTML 样式：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nx&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;pre&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;).&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;addClass&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;prettyprint linenums&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;).&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;attr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;style&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;overflow:auto&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;这样就没有问题了，可以直接用 markdown 的前置 4 空格来写代码了。其中 &lt;code&gt;addClass(&#39;prettyprint linenums&#39;)&lt;/code&gt;  的 linenums 是添加行号的意思。默认只显示第 5、10、15&amp;hellip; 行，可以在 css 文件中 li 的格式添加 &lt;code&gt;list-style-type: decimal;&lt;/code&gt; ，以显示全部行号。&lt;/p&gt;
&lt;h2 id=&#34;34-bootstrap-代码框滚动&#34;&gt;3.4. Bootstrap 代码框滚动&lt;a class=&#34;headerlink&#34; href=&#34;#34-bootstrap-代码框滚动&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;如果博客中有用 Bootstrap，其中对 pre 有如下几句：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nt&#34;&gt;white-space&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;pre&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;nt&#34;&gt;white-space&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;pre-wrap&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;nt&#34;&gt;word-break&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;break-all&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;nt&#34;&gt;word-wrap&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;break-word&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;这会使得 pre 中的代码自动换行，而不是溢出形成滚动条。如果不希望如此，可以注释掉。看个人喜好。&lt;/p&gt;
&lt;p&gt;如果是滚动条，默认的滚动太难看而且还有个 Bug（stripe 的高亮背景色无法固定，随着滚动条位置改变而改变，可以考虑去掉 stripe，或者禁用横向滚动条），可以修改一下样式，看一下：&lt;a href=&#34;http://ju.outofmemory.cn/entry/149458&#34;&gt;CSS 自定义浏览器滚动条样式&lt;/a&gt;。&lt;/p&gt;
&lt;h1 id=&#34;4leanote-博客&#34;&gt;&lt;strong&gt;4、Leanote 博客&lt;/strong&gt;&lt;a class=&#34;headerlink&#34; href=&#34;#4leanote-博客&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;这里主要讲一下如何在 leanote 博客中使用 Google Code Prettify，并实现代码框左右滚动的效果。&lt;/p&gt;
&lt;h2 id=&#34;41-bootstrap-文件&#34;&gt;4.1. bootstrap 文件&lt;a class=&#34;headerlink&#34; href=&#34;#41-bootstrap-文件&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;由于 leanote 应用了 bootstrap 的样式，其内置的 pre 代码会自动换行，而不是溢出形成滚动条，因此我们需要自定义样式（以下为完整 customHilight.css 文件内容）：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;/*自定义 ol 列表数字距离*/
code.prettyprint ol.linenums, pre.prettyprint ol.linenums{
    padding: 0 0 0 25px !important;
}

/*代码框左右滚动*/
pre.prettyprint {
    white-space: pre !important;
    word-wrap: break-word !important;
    overflow:auto !important;
}
pre{
    word-break: unset !important;
    word-wrap:unset !important;
    white-space:unset !important;
}
pre code{
    white-space:unset !important;
}
code.prettyprint .linenums, pre.prettyprint .linenums{
    white-space: pre;
    word-wrap: break-word;
    overflow:auto;
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;最后，清空浏览器缓存，就可以看到 &lt;a href=&#34;http://blog.leanote.com/shenweiyan&#34;&gt;leanote 博客&lt;/a&gt;代码框左右滚动的效果。&lt;/p&gt;
&lt;h1 id=&#34;5-参考资料&#34;&gt;5. 参考资料&lt;a class=&#34;headerlink&#34; href=&#34;#5-参考资料&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://ju.outofmemory.cn/entry/149451&#34;&gt;Jekyll 中用 Google Code Prettify&lt;/a&gt;，Vermillion Phoinix by Alfred Sun，2014-12-15&lt;/li&gt;
&lt;/ul&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E5%89%8D%E7%AB%AF/2019-07-17-google-code-prettify/</link>
      <pubDate>Wed, 17 Jul 2019 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E5%89%8D%E7%AB%AF/2019-07-17-google-code-prettify/</guid>
      
    </item>
    
    <item>
      <title>Jupyter Notebook 教程(一)：本地安装与使用</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2019-07-17&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2019-07-17T00:00:00&#39;&gt;2019-07-17&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-06-30&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-06-30T09:37:44&#39;&gt;2021-06-30&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;iPython Notebook 是一个基于浏览器的 python 数据分析工具，使用起来非常方便，具有极强的交互方式和富文本的展示效果。Jupyter 是它的升级版，它的安装也非常方便，一般 Anaconda 安装包中会自带。安装好以后直接输入 jupyter notebook 便可以在浏览器中使用。&lt;/p&gt;
&lt;p&gt;关于为什么使用 jupyter 进行分析，而不是用 python 脚本或仅仅利用 excel，这里列举知乎中的两点回答：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;1、基于过程&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;数据分析和传统的 MVC 软件开发的最大区别在于，数据分析存在一个 data flow, 我们是在不断的做计算，并且画图。这里存在一个大致的 &amp;ldquo;顺序&amp;rdquo;，比如：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;先对数据进行处理，去掉有问题的数据 (Data Wrangling)&lt;/li&gt;
&lt;li&gt;从各个角度看一个这个数据各个维度的分布情况 (Data Exploration)&lt;/li&gt;
&lt;li&gt;根据自己的想法、要求，做具体的分析，计算&lt;/li&gt;
&lt;li&gt;对计算结果做进一部分的分析&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;这有点类似做应用题。而这是传统的 IDE (e.g. PyCharm) 没有办法做到的。假如全部都写脚本+输出，那么你 &lt;strong&gt;每张图可能都要保存下来，然后再单独点进去看&lt;/strong&gt;，很麻烦。而 Notebook 做这个要更方便，结果直接产生在 Cell 下面。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FqtURTj4UvTyPmTTkMAS-SLDNTJc.jpeg&#34; /&gt;&lt;/p&gt;
&lt;p&gt;反言之，如果你不需要这种频繁的计算-画图的话，那么 notebook 可能还真没什么大不了.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2、Hackable&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;和第一点对应，Notebook 的是计算+文档的混合体，而本身又是 web-based，因此非常好 hack, 比如我的 notebook 因为非常长，所以就加了个侧边栏目录：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Flsdnj1w2kd21uCCBSTtsQwXPWcK.jpeg&#34; /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;再比如，在分析电影数据的时候，我觉得用 card 来展示更方便一点，所以可以这样显示数据：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fk6z9MvQflcnWFXW8s4dNm76zU3m.jpeg&#34; /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id=&#34;安装&#34;&gt;安装&lt;a class=&#34;headerlink&#34; href=&#34;#安装&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;正常情况下，Anaconda 安装包中已经自带了 jupyter、jupyter-notebook。对于 Miniconda，或者其他只安装了 python 的机器，需要借助 pip 安装：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;pip&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ipython
pip&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;jypyter
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;或者使用 conda 命令安装：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;jupyter
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;更多安装说明，请参考 &lt;a href=&#34;http://jupyter.org/install.html&#34;&gt;官网&lt;/a&gt;。&lt;/p&gt;
&lt;h1 id=&#34;启动&#34;&gt;启动&lt;a class=&#34;headerlink&#34; href=&#34;#启动&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;接下来，我们只需要在命令行输入 jupyter notebook 或者 jupyter-notebook 即可。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;指定 ip 及端口启动 jupyter notebook&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;jupyter&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;notebook&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--ip&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;.0.0.0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--port&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;8080&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;启动 jupyter notebook 时不启动浏览器&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;jupyter&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;notebook&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--no-browser
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;启动 jupyter notebook&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;jupyter-notebook
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;I&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;10&lt;/span&gt;:47:32.588&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;NotebookApp&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;JupyterLab&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;alpha&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;preview&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;extension&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;loaded&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/Bio/home/shenweiyan/software/Python/Anaconda2.5/lib/python2.7/site-packages/jupyterlab
JupyterLab&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;v0.27.0
Known&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;labextensions:
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;I&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;10&lt;/span&gt;:47:32.626&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;NotebookApp&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Running&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;core&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;application&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;no&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;additional&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;extensions&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;or&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;settings
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;I&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;10&lt;/span&gt;:47:32.644&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;NotebookApp&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Serving&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;notebooks&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;local&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;directory:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/Bio/home/bi.shenwy/pythonTrain
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;I&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;10&lt;/span&gt;:47:32.644&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;NotebookApp&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;active&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;kernels
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;I&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;10&lt;/span&gt;:47:32.644&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;NotebookApp&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;The&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Jupyter&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Notebook&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;is&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;running&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;at:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;http://localhost:8888/?token&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;120a457da88d214270e...22a376d3d4
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;I&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;10&lt;/span&gt;:47:32.644&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;NotebookApp&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Use&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Control-C&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;stop&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;this&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;server&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;and&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;shut&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;down&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;all&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;kernels&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;twice&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;skip&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;confirmation&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;.
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;C&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;10&lt;/span&gt;:47:32.651&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;NotebookApp&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;

&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;Copy/paste&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;this&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;URL&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;into&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;your&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;browser&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;when&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;you&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;connect&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;first&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;time,
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;login&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;a&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;token:
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;http://localhost:8888/?token&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;120a457da88d214270e...22a376d3d4
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;这时候，jupyter 会自动生成一个用于登陆 jupyter Notebook 的 token，我们在浏览器打开这个 token 链接即可进入登陆后的 Jupyter Notebook：
&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FjLdbfzpjjE-jrDy-xh-eEh1d74k.png&#34; /&gt;&lt;/p&gt;
&lt;h1 id=&#34;使用&#34;&gt;使用&lt;a class=&#34;headerlink&#34; href=&#34;#使用&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;在 Jupyter Notebook web 页面，我们可以点击 &amp;ldquo;New&amp;rdquo; → &amp;ldquo;Python2&amp;rdquo; 创建 python2 笔记。
&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FjLdbfzpjjE-jrDy-xh-eEh1d74k.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;我们可以在创建好的笔记中使用 markdown 语法进行编辑，也可以交互执行 python 代码。
&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FguaClDlBgOp0-om0nxmKehCWUJk.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;想要退出笔记，点击右上角 &amp;ldquo;Logout&amp;rdquo; 可退出；通过输入上面的 token 可重新登陆。或者我们可以通过 &lt;code&gt;jupyter notebook password&lt;/code&gt; 命令设置密码进行登陆（如果忘记密码也可以通过该命令进行重置）。默认 jupyter notebook passwd 保存在 \~/.jupyter/jupyter_notebook_config.json。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$ cat ~/.jupyter/jupyter_notebook_config.json
{
  &amp;quot;NotebookApp&amp;quot;: {
    &amp;quot;password&amp;quot;: &amp;quot;sha1:1a611a30d93a:5ab8b4be55d5e.....b8c7a8sa&amp;quot;
  }
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h1 id=&#34;_1&#34;&gt;&lt;a class=&#34;headerlink&#34; href=&#34;#_1&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;以上就是本地 Jupyter Notebook 安装与使用的一些简单介绍，下一篇我们介绍一下 Jupyter Notebook 远程服务安装和配置。&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E8%99%9A%E6%8B%9F%E7%8E%AF%E5%A2%83/2019-07-17-jupyter-notebook-toturial-1/</link>
      <pubDate>Wed, 17 Jul 2019 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E8%99%9A%E6%8B%9F%E7%8E%AF%E5%A2%83/2019-07-17-jupyter-notebook-toturial-1/</guid>
      
    </item>
    
    <item>
      <title>Jupyter Notebook 教程(二)：服务器搭建</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2019-07-17&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2019-07-17T00:00:00&#39;&gt;2019-07-17&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-06-30&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-06-30T09:37:53&#39;&gt;2021-06-30&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;今天我们介绍一下 Python3+Nginx+SSL 下的 Jupyter Notebook 服务部署，也就是 Jupyter 服务器的搭建与配置。&lt;/p&gt;
&lt;p&gt;网上搜了一下 jupyter 服务器的搭建，官方给出了很好的多用户服务端 jupyterhub，但我的需求就是在 VPS 搭建好一个 jupyter 服务网页，完全自己用，所以搭建 jupyterhub 有些浪费资源，转而去寻找简单的 jupyter 服务搭建方案，别说，官网也写好文档给我们用了，但文档是用英文写的，看的不舒服，这里把要点写出来，供参考。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://jupyter-notebook.readthedocs.io/en/latest/public_server.html&#34;&gt;英文文档地址在此&lt;/a&gt;，英文好的小伙伴可以直接去实施。&lt;/p&gt;
&lt;h2 id=&#34;1-安装&#34;&gt;1. 安装&lt;a class=&#34;headerlink&#34; href=&#34;#1-安装&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Jupyter Notebook 的安装参考《&lt;a href=&#34;https://www.yuque.com/shenweiyan/cookbook/jupyter-notebook-toturial-1&#34;&gt;数据科学工具 Jupyter Notebook 教程(一)&lt;/a&gt;》。&lt;/p&gt;
&lt;h2 id=&#34;2-配置&#34;&gt;2. 配置&lt;a class=&#34;headerlink&#34; href=&#34;#2-配置&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;下面的命令会在 &lt;code&gt;~/.jupyter&lt;/code&gt; 自动创建一个配置文件 ** jupyter_notebook_config.py**。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;jupyter&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;notebook&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--generate-config
Writing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;default&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;config&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/home/shenweiyan/.jupyter/jupyter_notebook_config.py
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;可以配置的项目有很多，有时间的话，可以仔细阅读配置文件中的注释，写的很清楚。&lt;/p&gt;
&lt;p&gt;这里要强调的是创建密码的方法，总不想让自己的 jupyter 服务器被其他人使用吧。执行下面语句：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;python&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-c&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;import IPython;print(IPython.lib.passwd())&amp;quot;&lt;/span&gt;
Enter&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;password:
Verify&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;password:
sha1:bda74221176f:ae266f5xxxxxxxxxxxxxxxxxxxxxxxx1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;然后将得到的 sha1 复制到配置文件 jupyter_notebook_config.py 中的相应位置：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;c.NotebookApp.password&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;sha1:bda74221176f:ae266f5xxxxxxxxxxxxxxxxxxxxxxxx1&amp;#39;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;配置文件中，还有几处要修改：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;c.NotebookApp.ip&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;127.0.0.1&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# ip 为 localhost 会引发 OSError: [Errno 99] Cannot assign requested address&lt;/span&gt;
c.NotebookApp.allow_origin&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;*&amp;#39;&lt;/span&gt;
c.NotebookApp.open_browser&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;False
c.NotebookApp.port&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;8888&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;如此这般之后，配置完成咯！&lt;/p&gt;
&lt;h2 id=&#34;3-运行&#34;&gt;3. 运行&lt;a class=&#34;headerlink&#34; href=&#34;#3-运行&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;执行命令，就可以看到 jupyter notebook 执行的日志信息：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;jupyter&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;notebook
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;I&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;14&lt;/span&gt;:57:17.197&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;NotebookApp&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;JupyterLab&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;beta&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;preview&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;extension&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;loaded&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/local/software/anaconda3/lib/python3.6/site-packages/jupyterlab
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;I&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;14&lt;/span&gt;:57:17.197&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;NotebookApp&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;JupyterLab&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;application&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;directory&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;is&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/local/software/anaconda3/share/jupyter/lab
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;I&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;14&lt;/span&gt;:57:17.203&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;NotebookApp&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Serving&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;notebooks&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;local&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;directory:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/data/JupyterNotebook
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;I&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;14&lt;/span&gt;:57:17.203&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;NotebookApp&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;active&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;kernels
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;I&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;14&lt;/span&gt;:57:17.203&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;NotebookApp&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;The&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Jupyter&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Notebook&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;is&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;running&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;at:
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;I&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;14&lt;/span&gt;:57:17.203&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;NotebookApp&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;http://127.0.0.1:8888/
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;I&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;14&lt;/span&gt;:57:17.203&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;NotebookApp&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Use&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Control-C&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;stop&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;this&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;server&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;and&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;shut&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;down&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;all&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;kernels&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;twice&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;skip&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;confirmation&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;这是尚不能打开网页，因为是配置在 127.0.0.1 上的，只有本机可以访问。如果想要通过 ip 预览一下 Jupyter Notebook，可以考虑使用 &lt;code&gt;--ip&lt;/code&gt;  和 &lt;code&gt;--port&lt;/code&gt;  启动：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;jupyter&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;notebook&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--ip&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;.0.0.0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--port&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;9000&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;I&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;16&lt;/span&gt;:12:57.449&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;NotebookApp&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Serving&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;notebooks&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;local&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;directory:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/apps/jupyter
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;I&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;16&lt;/span&gt;:12:57.449&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;NotebookApp&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;The&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Jupyter&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Notebook&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;is&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;running&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;at:
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;I&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;16&lt;/span&gt;:12:57.449&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;NotebookApp&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;http://ecs-steven:9000/
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;I&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;16&lt;/span&gt;:12:57.449&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;NotebookApp&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Use&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Control-C&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;stop&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;this&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;server&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;and&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;shut&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;down&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;all&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;kernels&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;twice&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;skip&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;confirmation&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;如果在启动过程中出现：OSError: [Errno 99] Cannot assign requested address，请参考下面的方法解决。
&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FqT8n9qwwYgNtlidpEI2XMzHH7rf.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;**解决：**运行 Jupyter 时增加 &lt;code&gt;--ip=0.0.0.0&lt;/code&gt;  参数。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;jupyter notebook --ip=0.0.0.0 --no-browser --allow-root
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;4-域名解析&#34;&gt;4. 域名解析&lt;a class=&#34;headerlink&#34; href=&#34;#4-域名解析&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;配置 nginx 前需要把你已经申请的域名跟 Jupyter Notebook 的服务器 ip 进行绑定解析。打开阿里云域名管理，增加 A 记录解析：&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FmKiF8RjMkyospa5fBRWx4ZT6QWR.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;5-配置-nginx&#34;&gt;5. 配置 nginx&lt;a class=&#34;headerlink&#34; href=&#34;#5-配置-nginx&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Nginx 是一个高效的服务器，著名的 LNMP 中的 N，相信很多在 VPS 搭建过网站的小伙伴一定不陌生。我假设你已经安装好了 nginx，如果不会安装可以自行百度。&lt;/p&gt;
&lt;p&gt;Nginx 创建一个虚拟主机 vhost，然后配置文件参考下面：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;upstream&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;notebook&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;server&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;localhost:8888&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
server&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;listen&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;80&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;server_name&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;xxx.xxxx.com&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;rewrite&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;^/&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;.*&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://xxx.xxxx.com/&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;permanent&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
server&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;listen&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;443&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ssl&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;index&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;index.html&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;index.htm&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;index.php&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;default.html&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;default.htm&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;default.php&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;server_name&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;xxx.xxxx.com&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;root&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/home/wwwroot/xxx.xxxx.com&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;ssl_certificate&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/etc/letsencrypt/live/xxx.xxxx.com/fullchain.pem&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;ssl_certificate_key&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/etc/letsencrypt/live/xxx.xxxx.com/privkey.key&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;ssl_ciphers&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;EECDH CHACHA20:EECDH CHACHA20-draft:EECDH AES128:RSA AES128:EECDH AES256:RSA AES256:EECDH 3DES:RSA 3DES:!MD5&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;ssl_protocols&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;TLSv1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;TLSv1.1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;TLSv1.2&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;ssl_prefer_server_ciphers&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;on&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;ssl_session_cache&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;shared:SSL:10m&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;location&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;proxy_pass&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;http://notebook&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;proxy_set_header&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;Host&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$host&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;

&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;location&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/api/kernels/&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;proxy_pass&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;http://notebook&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;proxy_set_header&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;Host&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$host&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# websocket support&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;proxy_http_version&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.1&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;proxy_set_header&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;Upgrade&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;websocket&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;proxy_set_header&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;Connection&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;Upgrade&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;proxy_read_timeout&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;86400&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;location&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/terminals/&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;proxy_pass&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;http://notebook&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;proxy_set_header&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;Host&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$host&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# websocket support&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;proxy_http_version&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.1&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;proxy_set_header&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;Upgrade&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;websocket&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;proxy_set_header&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;Connection&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;Upgrade&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;proxy_read_timeout&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;86400&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;其中 &lt;strong&gt;fullchain.pem&lt;/strong&gt; 与 &lt;strong&gt;privkey.pem&lt;/strong&gt; 是你的网址的 SSL 证书，如果没有，可以参考 Letsencrypt 免费证书。&lt;/p&gt;
&lt;p&gt;至此，大功告成，打开你的网址 &lt;strong&gt;xxx.xxx.com&lt;/strong&gt; 是不是可以看到熟悉的 jupyter 了呢？如有疑问，欢迎留言讨论。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;jupyter_server.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FkZqx8CGwdqzGoyn_BFYwJNNEafn.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;以上就是远程 Jupter Notebook 服务安装与配置的全部内容，下一篇我们介绍一下如何在  Jupyter Notebook  中使用不同内核（Kernel）实现支持包括 python2、python3、R 在的多种不同编程环境。&lt;/p&gt;
&lt;h2 id=&#34;6-其他问题&#34;&gt;6. 其他问题&lt;a class=&#34;headerlink&#34; href=&#34;#6-其他问题&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;missing react-dom js to package data&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Jupyter Notebook 在启动该过程中出现空白页面，后台 log 提示 404 错误：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;[W 15:18:20.967 NotebookApp] 404 GET /static/components/react/react-dom.production.min.js (127.0.0.1) 2.49ms referer=https://jupyter.bioinit.com/tree?
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;解决方法：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;As a workaround I grabbed the file from: &lt;a href=&#34;https://unpkg.com/react-dom@16/umd/react-dom.production.min.js&#34;&gt;https://unpkg.com/react-dom@16/umd/react-dom.production.min.js&lt;/a&gt; and copied it into the jupyter static package tree &amp;hellip;/site_packages/notebook/static/components/react&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$miniconda3&lt;/span&gt;/lib/python3.7/site-packages/notebook/static/components/react
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;wget&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://unpkg.com/react-dom@16/umd/react-dom.production.min.js
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E8%99%9A%E6%8B%9F%E7%8E%AF%E5%A2%83/2019-07-17-jupyter-notebook-toturial-2/</link>
      <pubDate>Wed, 17 Jul 2019 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E8%99%9A%E6%8B%9F%E7%8E%AF%E5%A2%83/2019-07-17-jupyter-notebook-toturial-2/</guid>
      
    </item>
    
    <item>
      <title>Jupyter Notebook 教程(三)：多语言编程环境配置</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2019-07-17&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2019-07-17T00:00:00&#39;&gt;2019-07-17&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-06-30&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-06-30T09:38:00&#39;&gt;2021-06-30&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id=&#34;前言&#34;&gt;前言&lt;a class=&#34;headerlink&#34; href=&#34;#前言&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Jupyter Notebook 作为一个把代码、图像、注释、公式和作图集于一处，从而实现可读性分析的交互式笔记本工具，借助所谓的内核（Kernel）的概念，Jupyter Notebook 可以同时支持包括 python2、python3、R、Ruby 在内超过 50 多种不同编程环境。基于 Kernel，Jupyter Notebook 可以支持的编程语言可以参考&lt;a href=&#34;https://github.com/jupyter/jupyter/wiki/Jupyter-kernels&#34;&gt;列表&lt;/a&gt;。&lt;/p&gt;
&lt;h2 id=&#34;目的&#34;&gt;目的&lt;a class=&#34;headerlink&#34; href=&#34;#目的&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;在 Jupyter Notebook 中实现 python2 与 python3 自由切换。&lt;/p&gt;
&lt;h2 id=&#34;步骤&#34;&gt;步骤&lt;a class=&#34;headerlink&#34; href=&#34;#步骤&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;参考：&lt;a href=&#34;https://stackoverflow.com/questions/30492623/using-both-python-2-x-and-python-3-x-in-ipython-notebook&#34;&gt;https://stackoverflow.com/questions/30492623/using-both-python-2-x-and-python-3-x-in-ipython-notebook&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The idea here is to install multiple &lt;code&gt;ipython&lt;/code&gt; kernels. Here are instructions for anaconda. If you are not using anaconda, I recently added &lt;a href=&#34;https://stackoverflow.com/a/34464003/2272172&#34;&gt;instructions&lt;/a&gt; using pure virtualenvs.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Anaconda 4.1.0&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Since version 4.1.0, anaconda includes a special package &lt;code&gt;nb_conda_kernels&lt;/code&gt; that detects conda environments with notebook kernels and automatically registers them. This makes using a new python version as easy as creating new conda environments:&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;create&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-n&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;py27&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;python&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;.7&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ipykernel
conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;create&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-n&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;py36&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;python&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;.6&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ipykernel
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;After a restart of jupyter notebook, the new kernels are available over the graphical interface. Please note that new packages have to be explicitly installed into the new enviroments. The Managing environments section in conda&amp;rsquo;s docs provides further information.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Manually registering kernels&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Users who do not want to use nb_conda_kernels or still use older versions of anaconda can use the following steps to manually register ipython kernels.&lt;/p&gt;
&lt;p&gt;configure the &lt;code&gt;python2.7&lt;/code&gt; environment:&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;create&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-n&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;py27&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;python&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;.7
&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;activate&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;py27
conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;notebook&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ipykernel
ipython&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;kernel&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--user
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;Additionally you can pass the &lt;code&gt;--name&lt;/code&gt; and &lt;code&gt;--display-name&lt;/code&gt; options to ipython kernel install if you want to change the names of your kernels. See &lt;code&gt;ipython kernel install --help&lt;/code&gt; for more informations.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;总结起来就是：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;在 python2 和 python3 环境中分别安装 ipykernel。&lt;/li&gt;
&lt;li&gt;手动为当前用户(&amp;ndash;user)，或者指定路径(&amp;ndash;prefix)安装 IPython kernel spec。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;需要注意的是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;其中 &lt;code&gt;--user&lt;/code&gt;  与 &lt;code&gt;--prefix&lt;/code&gt;  不能同时使用。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--user&lt;/code&gt; ，IPython kernel spec 默认安装到当前用户 &lt;strong&gt;\~/.local/share/jupyter/kernels&lt;/strong&gt; 或者 &lt;strong&gt;\~/.ipython/kernels&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;不加 &lt;code&gt;--user&lt;/code&gt;  和 &lt;code&gt;--prefix&lt;/code&gt; ，IPython kernel spec 默认安装到 &lt;strong&gt;/usr/local/share/jupyter/kernels&lt;/strong&gt; 或者 &lt;strong&gt;/usr/share/jupyter/kernels&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;IPython kernel spec 安装可以使用 &lt;code&gt;python -m ipykernel install&lt;/code&gt; ，也可以使用 &lt;code&gt;ipython-kernel-install&lt;/code&gt;  命令，两者是一样的。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fq0EgIerNH9zn2ev655rVUkDn655.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;实战&#34;&gt;实战&lt;a class=&#34;headerlink&#34; href=&#34;#实战&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;使用 &lt;code&gt;--prefix&lt;/code&gt; 指定 IPython kernel spec 安装路径：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;# python2 环境（默认）
$ python -m pip install ipykernel
$ python -m ipykernel install --prefix=/Bio/Anaconda2.5/

# python3 环境
$ /Bio/Anaconda2.5/envs/python3/bin/python -m pip install ipykernel
$ /Bio/Anaconda2.5/envs/python3/bin/python -m ipykernel install --prefix=/Bio/Anaconda2.5/ --name &amp;quot;python3&amp;quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;也可以使用 conda 进行安装：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;# python2 环境（root）
conda install -n root ipykernel
python -m ipykernel install --prefix=/path/to/install --name &amp;quot;python2&amp;quot;

# python3 环境
conda install -n python3 ipykernel
/path/to/python3 -m ipykernel install --prefix=/path/to/install --name &amp;quot;python3&amp;quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;最后，&lt;code&gt;jupyter-kernelspec list&lt;/code&gt; 检查安装好的 kernels，启动 &lt;code&gt;jupyter notebook&lt;/code&gt;。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$ jupyter-kernelspec list
Available kernels:
  python2    /Bio/Anaconda2.5/share/jupyter/kernels/python2
  python3    /Bio/Anaconda2.5/share/jupyter/kernels/python3
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FlO_YbUp6yXTyoQyM1adTWUQctvu.png&#34; /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;在 python2 和 python3 环境中分别安装 ipykernel。&lt;/li&gt;
&lt;li&gt;手动为当前用户( &lt;code&gt;--user&lt;/code&gt;  )，或者指定路径( &lt;code&gt;--prefix&lt;/code&gt;  )安装 IPython kernel spec。其中 &lt;code&gt;--user&lt;/code&gt;  与 &lt;code&gt;--prefix&lt;/code&gt;  不能同时使用。&lt;/li&gt;
&lt;li&gt;使用 &lt;code&gt;--user&lt;/code&gt; 时，IPython kernel spec 默认安装到当前用户 &lt;strong&gt;\~/.local/share/jupyter/kernels&lt;/strong&gt; 或者 &lt;strong&gt;\~/.ipython/kernels&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;不加 &lt;code&gt;--user&lt;/code&gt;  和 &lt;code&gt;--prefix&lt;/code&gt; ，IPython kernel spec 默认安装到 &lt;strong&gt;/usr/local/share/jupyter/kernels&lt;/strong&gt; 或者 &lt;strong&gt;/usr/share/jupyter/kernels&lt;/strong&gt;。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;IPython kernel spec 安装可以使用 &lt;code&gt;python -m ipykernel install&lt;/code&gt; ，也可以使用 &lt;code&gt;ipython-kernel-install&lt;/code&gt;  命令，两者是一样的。&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E8%99%9A%E6%8B%9F%E7%8E%AF%E5%A2%83/2019-07-17-jupyter-notebook-toturial-3/</link>
      <pubDate>Wed, 17 Jul 2019 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E8%99%9A%E6%8B%9F%E7%8E%AF%E5%A2%83/2019-07-17-jupyter-notebook-toturial-3/</guid>
      
    </item>
    
    <item>
      <title>RamiGO 安装及库依赖解决备忘</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2019-07-15&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2019-07-15T00:00:00&#39;&gt;2019-07-15&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-06-25&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-06-25T10:40:46&#39;&gt;2021-06-25&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id=&#34;一ramigo-安装&#34;&gt;一、RamiGO 安装&lt;a class=&#34;headerlink&#34; href=&#34;#一ramigo-安装&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/home/shenweiyan/software/R/R-3.6.1/bin/R&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;CMD&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;INSTALL&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/Bioinfo/Pipeline/SourceCode/pkgs/RamiGO_1.20.0.tar.gz
*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;installing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;library&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;‘/home/shenweiyan/software/R/R-3.6.1/lib64/R/library’
ERROR:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;dependencies&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;‘gsubfn’,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;‘igraph’,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;‘RCurl’,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;‘png’,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;‘RCytoscape’,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;‘graph’&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;are&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;available&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;‘RamiGO’
*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;removing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;‘/home/shenweiyan/software/R/R-3.6.1/lib64/R/library/RamiGO’

&lt;span class=&#34;c1&#34;&gt;# 安装 gsubfn, igraph, RCurl&lt;/span&gt;
install.packages&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;c&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;igraph&amp;quot;&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;igraph&amp;quot;&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;RCurl&amp;quot;&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;png&amp;quot;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;))&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# 安装 graph&lt;/span&gt;
BiocManager::install&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;graph&amp;quot;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;

$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/home/shenweiyan/software/R/R-3.6.1/bin/R&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;CMD&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;INSTALL&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/Bioinfo/Pipeline/SourceCode/pkgs/RCytoscape_1.12.0.tar.gz
*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;installing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;library&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;‘/home/shenweiyan/software/R/R-3.6.1/lib64/R/library’
ERROR:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;dependency&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;‘XMLRPC’&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;is&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;available&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;‘RCytoscape’
*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;removing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;‘/home/shenweiyan/software/R/R-3.6.1/lib64/R/library/RCytoscape’

install.packages&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;devtools&amp;quot;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
install_github&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;duncantl/XMLRPC&amp;quot;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;

$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/home/shenweiyan/software/R/R-3.6.1/bin/R&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;CMD&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;INSTALL&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/Bioinfo/Pipeline/SourceCode/pkgs/RamiGO_1.20.0.tar.gz
*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;installing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;library&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;‘/home/shenweiyan/software/R/R-3.6.1/lib64/R/library’
*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;installing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;*source*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;‘RamiGO’&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;...
**&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;using&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;staged&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;installation
**&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;R
**&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;data
**&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;inst
**&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;byte-compile&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;and&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;prepare&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;lazy&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;loading
Error&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;dyn.load&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;file,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;DLLpath&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;DLLpath,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;...&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;:
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;unable&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;load&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;shared&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;object&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;/home/shenweiyan/software/R/R-3.6.1/lib64/R/library/png/libs/png.so&amp;#39;&lt;/span&gt;:
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;libpng16.so.16:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;cannot&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;open&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;shared&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;object&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;No&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;such&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;or&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;directory
Calls:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;lt;Anonymous&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;asNamespace&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;loadNamespace&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;library.dynam&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;dyn.load
Execution&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;halted
ERROR:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;lazy&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;loading&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;failed&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;‘RamiGO’
*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;removing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;‘/home/shenweiyan/software/R/R-3.6.1/lib64/R/library/RamiGO’


$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;LD_LIBRARY_PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/home/shenweiyan/software/LibDependence/libpng-1.6.37/
bin/&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;include/&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;lib/&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;share/

$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;LD_LIBRARY_PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/home/shenweiyan/software/LibDependence/libpng-1.6.37/lib:&lt;span class=&#34;nv&#34;&gt;$LD_LIBRARY_PATH&lt;/span&gt;

$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/home/shenweiyan/software/R/R-3.6.1/bin/R&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;CMD&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;INSTALL&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/Bioinfo/Pipeline/SourceCode/pkgs/RamiGO_1.20.0.tar.gz
*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;installing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;library&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;‘/home/shenweiyan/software/R/R-3.6.1/lib64/R/library’
*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;installing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;*source*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;‘RamiGO’&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;...
**&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;using&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;staged&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;installation
**&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;R
**&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;data
**&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;inst
**&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;byte-compile&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;and&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;prepare&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;lazy&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;loading
**&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;help&lt;/span&gt;
***&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;installing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;help&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;indices
**&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;building&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;indices
**&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;installing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;vignettes
**&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;testing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;installed&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;can&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;be&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;loaded&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;temporary&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;location
**&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;testing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;installed&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;can&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;be&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;loaded&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;final&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;location
**&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;testing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;installed&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;keeps&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;a&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;record&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;temporary&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;installation&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;path
*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;DONE&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;RamiGO&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;二ramigo-使用与-libpng-依赖库异常&#34;&gt;二、RamiGO 使用与 libpng 依赖库异常&lt;a class=&#34;headerlink&#34; href=&#34;#二ramigo-使用与-libpng-依赖库异常&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;使用  &lt;code&gt;RamiGO&lt;/code&gt; R 包过程中，如果发现：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;library&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;RamiGO&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Loading&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;required&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;package&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;gsubfn&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Loading&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;required&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;package&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;proto&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;goIDs&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;GO:0051130&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;GO:0019912&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;GO:0005783&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;GO:0043229&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;GO:0050789&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;lightblue&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;red&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;yellow&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;green&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;pink&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;getAmigoTree&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;goIDs&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;goIDs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;filename&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;example&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;picType&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;png&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;saveResult&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;TRUE&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Error&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;readPNG&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;aa&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;libpng&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;error&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Incompatible&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;libpng&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;version&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;application&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;and&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;library&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;In&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;addition&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Warning&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;messages&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;
&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;In&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;readPNG&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;aa&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;libpng&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;warning&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Application&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;was&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;compiled&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;with&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;png.h&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;libpng&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;-1.6&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;37&lt;/span&gt;
&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;In&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;readPNG&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;aa&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;libpng&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;warning&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Application&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;is&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;running&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;with&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;png.c&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;libpng&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;-1.2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;49&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;首先，如果是源码编译安装的 R（参考：《&lt;a href=&#34;https://www.yuque.com/shenweiyan/bioinit/install-r-from-source&#34;&gt;手把手教你如何在 Linux 源码安装最新版本的 R&lt;/a&gt;》），可以尝试在 configure 的时候把 libpng 相关的的  LDFLAGS 和 CPPFLAGS 去掉，重新安装 R。&lt;/p&gt;
&lt;p&gt;然后，通过拷贝缺失的共享库解决存在的问题。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;library&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;RamiGO&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Loading&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;required&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;package&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;gsubfn&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Loading&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;required&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;package&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;proto&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Error&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;package&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;or&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;namespace&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;load&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;failed&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;‘&lt;span class=&#34;n&#34;&gt;RamiGO&lt;/span&gt;’&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;dyn.load&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;DLLpath&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;DLLpath&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;...&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;unable&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;to&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;load&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;shared&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;object&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;/home/shenweiyan/software/R/R-3.6.1/lib64/R/library/png/libs/png.so&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;libpng16.so.16&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cannot&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;open&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;shared&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;object&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;No&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;such&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;or&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;directory&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;goIDs&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;GO:0051130&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;GO:0019912&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;GO:0005783&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;GO:0043229&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;GO:0050789&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;lightblue&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;red&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;yellow&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;green&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;pink&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;getAmigoTree&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;goIDs&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;goIDs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;filename&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;example&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;picType&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;png&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;saveResult&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;TRUE&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Error&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;getAmigoTree&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;goIDs&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;goIDs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;filename&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;example&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;could&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;not&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;find&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;getAmigoTree&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ldd&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/home/shenweiyan/software/R/R-3.6.1/lib64/R/library/png/libs/png.so
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;linux-vdso.so.1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007fff48999000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libpng16.so.16&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;found
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libm.so.6&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/lib64/libm.so.6&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007f100a740000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libz.so.1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/RiboBio/Bioinfo/APPS/R-3.3.2/lib/libz.so.1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007f100a528000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libR.so&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;found
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libc.so.6&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/lib64/libc.so.6&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007f100a194000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;/lib64/ld-linux-x86-64.so.2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x0000003636a00000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;

$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ln&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-s&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/home/shenweiyan/software/LibDependence/libpng-1.6.37/lib/libpng16.so.16.37.0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/lib64/libpng16.so.16
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ln&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-s&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/home/shenweiyan/software/R/R-3.6.1/lib64/R/lib/libR.so&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/lib64/libR.so

$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ldd&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/home/shenweiyan/software/R/R-3.6.1/lib64/R/library/png/libs/png.so
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;linux-vdso.so.1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007fff079ff000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libpng16.so.16&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007fd903bed000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libm.so.6&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/lib64/libm.so.6&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007fd903969000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libz.so.1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/Bioinfo/APPS/R-3.3.2/lib/libz.so.1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007fd903751000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libR.so&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/lib64/libR.so&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007fd9030aa000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libc.so.6&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/lib64/libc.so.6&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007fd902d16000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libRblas.so&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;found
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libgfortran.so.3&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/lib64/libgfortran.so.3&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007fd902a23000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libreadline.so.6&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/lib64/libreadline.so.6&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007fd9027e0000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libpcre.so.1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/Bioinfo/APPS/R-3.3.2/lib/libpcre.so.1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007fd9025ad000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;liblzma.so.5&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/Bioinfo/APPS/R-3.3.2/lib/liblzma.so.5&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007fd902388000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;librt.so.1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/lib64/librt.so.1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007fd902180000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libdl.so.2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/lib64/libdl.so.2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007fd901f7b000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libiconv.so.2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/local/lib/libiconv.so.2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007fd901c96000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libgomp.so.1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/Bioinfo/APPS/gcc-5.1.0/lib64/libgomp.so.1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007fd901a77000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libpthread.so.0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/lib64/libpthread.so.0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007fd901859000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;/lib64/ld-linux-x86-64.so.2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x0000003636a00000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libtinfo.so.5&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/lib64/libtinfo.so.5&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007fd901638000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;

$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ln&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-s&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/home/shenweiyan/software/R/R-3.6.1/lib64/R/lib/libRblas.so&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/lib64/libRblas.so

$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ldd&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/home/shenweiyan/software/R/R-3.6.1/lib64/R/library/png/libs/png.so
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;linux-vdso.so.1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007fff2b7ff000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libpng16.so.16&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007fed3cd93000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libm.so.6&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/lib64/libm.so.6&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007fed3cb0f000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libz.so.1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/Bioinfo/APPS/R-3.3.2/lib/libz.so.1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007fed3c8f7000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libR.so&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/lib64/libR.so&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007fed3c250000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libc.so.6&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/lib64/libc.so.6&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007fed3bebc000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libRblas.so&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/lib64/libRblas.so&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007fed3bc90000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libgfortran.so.3&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/lib64/libgfortran.so.3&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007fed3b99e000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libreadline.so.6&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/lib64/libreadline.so.6&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007fed3b75b000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libpcre.so.1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/Bioinfo/APPS/R-3.3.2/lib/libpcre.so.1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007fed3b528000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;liblzma.so.5&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/Bioinfo/APPS/R-3.3.2/lib/liblzma.so.5&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007fed3b303000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;librt.so.1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/lib64/librt.so.1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007fed3b0fb000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libdl.so.2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/lib64/libdl.so.2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007fed3aef6000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libiconv.so.2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/local/lib/libiconv.so.2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007fed3ac11000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libgomp.so.1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/Bioinfo/APPS/gcc-5.1.0/lib64/libgomp.so.1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007fed3a9f2000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libpthread.so.0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/lib64/libpthread.so.0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007fed3a7d4000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;/lib64/ld-linux-x86-64.so.2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x0000003636a00000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libtinfo.so.5&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/lib64/libtinfo.so.5&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007fed3a5b3000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;最后，RamiGO 包可以正常使用：
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FtD9wTmytUwfzuyg_VS1qAZngFvT.png&#34; /&gt;&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/R/2019-07-15-r-ramigo/</link>
      <pubDate>Mon, 15 Jul 2019 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/R/2019-07-15-r-ramigo/</guid>
      
    </item>
    
    <item>
      <title>一次误删 GLIBC 后的系统恢复经历</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2019-07-13&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2019-07-13T00:00:00&#39;&gt;2019-07-13&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2025-01-15&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2025-01-15T00:00:00&#39;&gt;2025-01-15&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id=&#34;背景&#34;&gt;背景&lt;a class=&#34;headerlink&#34; href=&#34;#背景&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;周五在安装一个用于 CNV 检测的软件 &lt;code&gt;CNVnator&lt;/code&gt; 的时候，不小心修改了 &lt;code&gt;/lib64/libc.so.6&lt;/code&gt; 文件，结果导致了整个系统所有命令基本都不可用：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@log01&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;lib64&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# ls&lt;/span&gt;
ls:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;error&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;while&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;loading&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;shared&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;libraries:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;libc.so.6:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;cannot&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;open&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;shared&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;object&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;No&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;such&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;or&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;directory
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@log01&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;lib64&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# ls -l&lt;/span&gt;
ls:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;error&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;while&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;loading&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;shared&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;libraries:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;libc.so.6:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;cannot&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;open&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;shared&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;object&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;No&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;such&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;or&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;directory
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@log01&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;lib64&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;#&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;情况更加糟糕的是，我所在的系统是整个公司集群的唯一登录节点，并且在使用 root 重命名了 &lt;strong&gt;libc.so.6&lt;/strong&gt;（&lt;code&gt;mv /lib64/libc.so.6 /lib64/libc.so.6.bak&lt;/code&gt;）后又作死的退出了 root 用户的登录，以致于所有的用户再也无法使用 &lt;code&gt;su&lt;/code&gt;、&lt;code&gt;ssh&lt;/code&gt; 进行 root 切换把 &lt;code&gt;/lib64/libc.so.6.bak&lt;/code&gt; 重新改回来！ 与此同时，整个集群的所有用户在退出登录后再也无法通过 ssh 重新登录，&lt;code&gt;su&lt;/code&gt;、&lt;code&gt;ssh&lt;/code&gt;、&lt;code&gt;ln&lt;/code&gt;、&lt;code&gt;ls&lt;/code&gt;、&lt;code&gt;scp&lt;/code&gt;、&lt;code&gt;mv&lt;/code&gt; 等基础命令也全部失效！！！&lt;/p&gt;
&lt;p&gt;对于还没有退出集群登录的&lt;strong&gt;普通用户&lt;/strong&gt;虽然可以通过下面的命令使 &lt;code&gt;ln&lt;/code&gt;、&lt;code&gt;ls&lt;/code&gt; 等生效，但始终无法从根本上解决问题。
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;LD_PRELOAD&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/lib64/libc-2.12.so&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ls
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;h2 id=&#34;glibc&#34;&gt;GLIBC&lt;a class=&#34;headerlink&#34; href=&#34;#glibc&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;GNU 发布的 libc 库：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;glibc 是 GNU 发布的 libc 库，即 c 运行库。glibc 是 linux 系统中最底层的 api，几乎其它任何运行库都会依赖于 glibc。glibc 除了封装 linux 操作系统所提供的系统服务外，它本身也提供了许多其它一些必要功能服务的实现。由于 glibc 囊括了几乎所有的 UNIX 通行的标准，可以想见其内容包罗万象。而就像其他的 UNIX 系统一样，其内含的档案群分散于系统的树状目录结构中，像一个支架一般撑起整个作业系统。在 GNU/Linux 系统中，其 C 函式库发展史点出了 GNU/Linux   演进的几个重要里程碑，用 glibc 作为系统的 C 函式库，是 GNU/Linux 演进的一个重要里程碑。&lt;/p&gt;
&lt;p&gt;From：&lt;a href=&#34;https://baike.baidu.com/item/glibc/10058561&#34;&gt;https://baike.baidu.com/item/glibc/10058561&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Linux 上的很多命令都是依赖 &lt;code&gt;libc.so.6&lt;/code&gt; 的动态链接库，如果您不小心把它给删除了，基本上所有命令都不能使用了。由此可见 &lt;code&gt;libc.so.6&lt;/code&gt; 的重要性。&lt;/p&gt;
&lt;p&gt;网络上关于 libc.so.6 误删的解决文章有很多，总结起来不外乎 2 种：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;还没有退出 root 登录：
  &lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@localhost&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# LD_PRELOAD=/lib64/libc-2.12.so ln -s /lib64/libc-2.12.so /lib64/libc.so.6&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;已经退出 root 登录：重装系统或者使用 Linux rescue 模式修复。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;作为 HPC 整个集群的 log 节点，不到万不得已是不会轻易重装系统的，于是我们选择了使用 Linux rescue 模式修复，以下是一些记录。&lt;/p&gt;
&lt;h2 id=&#34;使用光盘镜像救急模式恢复&#34;&gt;使用光盘镜像救急模式恢复&lt;a class=&#34;headerlink&#34; href=&#34;#使用光盘镜像救急模式恢复&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&#34;1-u-盘启动盘制作&#34;&gt;1. U 盘启动盘制作&lt;a class=&#34;headerlink&#34; href=&#34;#1-u-盘启动盘制作&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;由于原来的 log 节点是 rhel-server-6.5-x86_64 的操作系统，所以我们需要制作与之相对应的启动 U 盘。建议是跟所使用的 Linux 系统版本一致刻录出来的光盘 如果没有可以到下面地址下载对应的系统版本进行制作镜像。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://vault.centos.org&#34;&gt;http://vault.centos.org&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://access.redhat.com/downloads/&#34;&gt;https://access.redhat.com/downloads/&lt;/a&gt; (RedHat 官方下载，需要注册帐号+订阅/申请试用方可下载)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://pan.baidu.com/s/1zkZsklXI6c4c3VOKXOOKMw?pwd=rhel&#34;&gt;https://pan.baidu.com/s/1zkZsklXI6c4c3VOKXOOKMw?pwd=rhel&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;首先，下载 rhel-server-6.5-x86_64 镜像。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;rhel-server-6.5-x86_64-boot.iso（U 盘安装需要此镜像）    &lt;br /&gt;
  MD5: 004a37b1b0269992a3b341b8f7c3a579    &lt;br /&gt;
  SHA-256: 31116987fb9f5161cd7a7c907d9acc57f832135faf55bb328d032fa6574e3f93    &lt;br /&gt;
  文件大小：255 MB&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;rhel-server-6.5-x86_64-dvd.iso（系统安装介质）    &lt;br /&gt;
  MD5: a84d4d9eddb36fb417832166cd10a4c2    &lt;br /&gt;
  SHA-256: a51b90f3dd4585781293ea08adde60eeb9cfa94670943bd99e9c07f13a259539    &lt;br /&gt;
  文件大小：3,675 MB      &lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;其次，将启动文件写入 u 盘。&lt;/p&gt;
&lt;p&gt;以 UltraISO 软碟通为例，打开 UltraISO 软件，菜单 &lt;strong&gt;“文件”&lt;/strong&gt; 打开 rhel-server-6.5-x86_64-boot.iso ，菜单 &lt;strong&gt;“启动”&lt;/strong&gt; -&amp;gt; &lt;strong&gt;“写入硬盘映像”&lt;/strong&gt;，弹出对话框，点击 &lt;strong&gt;“格式化”&lt;/strong&gt;，格式化完成点击 &lt;strong&gt;“写入”&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;最后，将安装光盘镜像 rhel-server-6.5-x86_64-dvd.iso 拷贝到 u 盘根目录。&lt;/p&gt;
&lt;h3 id=&#34;2-linux-rescue-模式&#34;&gt;2. Linux rescue 模式&lt;a class=&#34;headerlink&#34; href=&#34;#2-linux-rescue-模式&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Linux 下用光盘进行 rescue 模式的方法，需要注意的是实体机跟虚拟机还是有很大差别的，在实体机中通过光盘启动，可能会自动进入到安装界面，所有我们需要在进入安装界面前（会提示 &lt;strong&gt;press any key&lt;/strong&gt; 之类）快速按键盘上的按键（只有三秒钟需要关注）。&lt;/p&gt;
&lt;p&gt;如果不理会就会进入以下界面：
&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Flr1CrojXmnEg_2em-aHFB_ZyMid.png&#34; /&gt;&lt;/p&gt;
&lt;h4 id=&#34;21-rescue-模式步骤&#34;&gt;2.1 rescue 模式步骤&lt;a class=&#34;headerlink&#34; href=&#34;#21-rescue-模式步骤&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;① 选择 rescue 模式&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FowJrdDDjjJBtVov9_xukgxLYjKZ.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;② 选择语言&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fq3vh_e8ugXleZOIaD7y3-ILoSno.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;③ 选择键盘&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fq5qzAaPbsLpyyq335wnpuQ-Ph6F.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;④ 我们选择不启用网络，因为启用也没用。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FhJkIf92Jaci3qOIFeuUgfjXzpWd.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;⑤ 选择继续（continue）&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FngDcpJPqB7CbXgLps-PBJVAOcls.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;⑥ 选择 OK&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fhu8Yihd2hMI37qnz9inDflC04cw.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FsPl6QBM7FGfiS0LxNZe8peHByWm.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;⑦ 选择回车键，打开 shell&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fj3KltY6YrLO9X7RBANPhiafXof8.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;⑧ 进入模式后，我们就可以进行命令行操作了，此时会把硬盘的文件系统挂载在 &lt;code&gt;/mnt/sysimage&lt;/code&gt; 目录下，如果未挂载使用如下命令挂载:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;chroot&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/mnt/sysimage
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;此时我们进入到 &lt;code&gt;/mnt/sysimage&lt;/code&gt;，这里其实就是原系统的根目录，我们进行一些补救操作即可。
&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Ftqf2nKZyurMm59dtSgjcxsAXXTd.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;⑨ 重启后重新进入系统一切正常。      &lt;/p&gt;
&lt;p&gt;⑩ 作为集群，需要重新执行一些必须的挂载、开启必要服务，在这里不详述。&lt;/p&gt;
&lt;h2 id=&#34;总结&#34;&gt;总结&lt;a class=&#34;headerlink&#34; href=&#34;#总结&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;对于系统的库文件，一定不要轻易去修改，特别是在使用 root 权限下。&lt;/li&gt;
&lt;li&gt;HPC 软件安装最好使用非 root 进行安装，如 conda；对于必须要使用 root 安装的软件，应进一步评估该软件使用的必要性，同时应该明确每一步的文件改动所带来的后果。&lt;/li&gt;
&lt;li&gt;任何重要或不确定的文件改动请不要轻易执行删除，一定要先备份，以备出现故障后能尽快恢复。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;最后，感谢美女领导，感谢运维的帅哥，感谢前华大运维的同事！！！&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E9%9B%86%E7%BE%A4/2019-07-13-hpc-experience-glibc/</link>
      <pubDate>Sat, 13 Jul 2019 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E9%9B%86%E7%BE%A4/2019-07-13-hpc-experience-glibc/</guid>
      
    </item>
    
    <item>
      <title>Anaconda 使用的一些体验与困惑</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2019-07-04&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2019-07-04T00:00:00&#39;&gt;2019-07-04&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2024-02-27&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2024-02-27T16:03:37&#39;&gt;2024-02-27&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id=&#34;1-channels-使用&#34;&gt;1. channels 使用&lt;a class=&#34;headerlink&#34; href=&#34;#1-channels-使用&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;需要注意的是做生信分析的童鞋使用 conda 环境时一定要特别注意 conda channels 的设置，滥用 channels 很有可能会导致你的软件升降级（甚至环境）错乱。推荐设置如下（&lt;strong&gt;&lt;code&gt;~/.condarc&lt;/code&gt;&lt;/strong&gt;）：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;channels:
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/pro
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;defaults
show_channels_urls:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://mirrors.tuna.tsinghua.edu.cn/anaconda/&#34;&gt;https://mirrors.tuna.tsinghua.edu.cn/anaconda/&lt;/a&gt; 是清华大学提供了一个 conda 的镜像；&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://mirrors.ustc.edu.cn/anaconda&#34;&gt;https://mirrors.ustc.edu.cn/anaconda&lt;/a&gt; 是中科大 conda 镜像，有需要的也可以使用；&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda&#34;&gt;https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda&lt;/a&gt; 是一个专门用于生物信息软件的 channel。&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;admonition tip&#34;&gt;
&lt;p class=&#34;admonition-title&#34;&gt;清华大学开源软件镜像站&lt;/p&gt;
&lt;p&gt;从 &lt;a href=&#34;https://mirrors.tuna.tsinghua.edu.cn/news/close-anaconda-service/&#34;&gt;2019.04&lt;/a&gt; 起清华大学和中科大宣布停止 Anaconda 镜像服务，但是出于教育科研机构使用的前提，在 &lt;a href=&#34;https://mirrors.tuna.tsinghua.edu.cn/news/restore-anaconda/&#34;&gt;2019-05-15&lt;/a&gt; 清华大学又宣布重新恢复了 Anaconda 镜像！    &lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;因此原来使用国内镜像的 conda 可以根据自身需求决定是否需要变更新的 channels：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;channels:
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conda-forge
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bioconda
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;main
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;free
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;r
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pro
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;defaults
show_channels_urls:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;更多 Anaconda channels，可以参考：&lt;a href=&#34;https://repo.continuum.io/pkgs/&#34;&gt;https://repo.continuum.io/pkgs/&lt;/a&gt;。&lt;/p&gt;
&lt;h2 id=&#34;2-软件安装使用&#34;&gt;2. 软件安装使用&lt;a class=&#34;headerlink&#34; href=&#34;#2-软件安装使用&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;conda 环境下的软件尽量使用 conda、pip 命令去安装。但同时也产生了一个问题，即 conda 中安装了 R，有些使用了  &lt;code&gt;install.packages()&lt;/code&gt; , &lt;code&gt;install_github&lt;/code&gt; , &lt;code&gt;biocLite&lt;/code&gt;  等方式安装的 R 包，在环境迁移的时候，这些包如何迁移？&lt;/p&gt;
&lt;h2 id=&#34;3-环境激活&#34;&gt;3. 环境激活&lt;a class=&#34;headerlink&#34; href=&#34;#3-环境激活&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;conda 4.6.x  切换环境使用的是：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;activate&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bio-base
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;conda 4.7.x 后切换环境变成了：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# To activate this environment, use:&lt;/span&gt;
&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;activate&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bio-base

&lt;span class=&#34;c1&#34;&gt;# To deactivate an active environment, use:&lt;/span&gt;
&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;deactivate
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;问题是，conda-4.7.x 使用推荐的命令切换环境，还要你 init 初始化一下 conda，不想 init 的话可以用回 4.6.x 的方式切换环境：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--version
conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4&lt;/span&gt;.7.5

$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;activate&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bio-base
CommandNotFoundError:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Your&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;shell&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;has&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;been&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;properly&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;configured&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;use&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;conda activate&amp;#39;&lt;/span&gt;.
To&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;initialize&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;your&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;shell,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;run

$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;init&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;lt;SHELL_NAME&amp;gt;

Currently&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;supported&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;shells&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;are:
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bash
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;fish
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tcsh
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;xonsh
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;zsh
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;powershell

See&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;conda init --help&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;more&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;information&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;and&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;options.

IMPORTANT:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;You&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;may&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;need&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;close&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;and&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;restart&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;your&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;shell&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;after&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;running&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;conda init&amp;#39;&lt;/span&gt;.

$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;activate&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bio-base
&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;bio-base&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;shenweiyan@ecs-steven&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;10&lt;/span&gt;:49:59&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/home/shenweiyan
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;which&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;python
/home/shenweiyan/software/Anaconda3/envs/bio-base/bin/python
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;deactivate&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bio-base
DeprecationWarning:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;source deactivate&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;is&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;deprecated.&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Use&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;conda deactivate&amp;#39;&lt;/span&gt;.

shenweiyan@ecs-steven&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;11&lt;/span&gt;:03:40&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/home/shenweiyan
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;activate&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bio-base
&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;bio-base&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;shenweiyan@ecs-steven&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;11&lt;/span&gt;:03:50&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/home/shenweiyan
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;deactivate
&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;bio-base&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;shenweiyan@ecs-steven&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;11&lt;/span&gt;:03:57&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/home/shenweiyan
$
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;4-环境导出与恢复&#34;&gt;4. 环境导出与恢复&lt;a class=&#34;headerlink&#34; href=&#34;#4-环境导出与恢复&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;使用 conda 命令安装的包，都可以使用下面的命令导出依赖包/环境并批量恢复：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# To create a requirements.txt file&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# Gives you list of packages used for the environment&lt;/span&gt;
conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;list

&lt;span class=&#34;c1&#34;&gt;# Save all the info about packages to your folder&lt;/span&gt;
conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;list&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-e&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;requirements.txt


&lt;span class=&#34;c1&#34;&gt;# To export environment file&lt;/span&gt;
activate&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;lt;environment-name&amp;gt;
conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;env&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;lt;environment-name&amp;gt;.yml

&lt;span class=&#34;c1&#34;&gt;# For other person to use the environment&lt;/span&gt;
conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;env&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;create&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-f&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;lt;environment-name&amp;gt;.yml

&lt;span class=&#34;c1&#34;&gt;# Install via `conda` directly.&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# This will fail to install all dependencies. If one fails, all dependencies will fail to install.&lt;/span&gt;
conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--yes&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;requirements.txt

&lt;span class=&#34;c1&#34;&gt;# To go around issue above, one can iterate over all lines in the requirements.txt file.&lt;/span&gt;
&lt;span class=&#34;k&#34;&gt;while&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;read&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;requirement&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;do&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--yes&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$requirement&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;lt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;requirements.txt
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;5-r-与-r-包安装&#34;&gt;5. R 与 R 包安装&lt;a class=&#34;headerlink&#34; href=&#34;#5-r-与-r-包安装&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;R Essentials 软件包包含 IRKernel 和 80 多种最流行的数据科学 R 软件包，包括 dplyr，shiny，ggplot2，tidyr，caret 和 nnet 等。&lt;/p&gt;
&lt;h3 id=&#34;51-r-软件&#34;&gt;5.1 R 软件&lt;a class=&#34;headerlink&#34; href=&#34;#51-r-软件&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;conda 安装 R 有很多种方法，如可以通过  r=3.6.x，或者 r-base、r-irkernel、r-essentials 都可以。需要注意：&lt;/p&gt;
&lt;p&gt;如果需要在 Anaconda 的 Jupyter Notebook 中使用 R，建议使用 &lt;code&gt;conda install -c r r-irkernel&lt;/code&gt;  或者 &lt;code&gt;conda install -c r r-essentials&lt;/code&gt;  的方式安装，因为 &lt;code&gt;conda install -c r r=3.6.x/r-base&lt;/code&gt;  默认不会安装  irkernel，而且先安装的  r=3.6.x/r-base 可能与后安装的  r-irkernel/r-essentials 产生冲突。&lt;/p&gt;
&lt;h3 id=&#34;52-r-包&#34;&gt;5.2 R 包&lt;a class=&#34;headerlink&#34; href=&#34;#52-r-包&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;通过 conda 安装的 R，在安装 R 包时，最好使用 conda 命令去安装，conda 无法安装的（如 github 的包）再考虑其他的安装方式。&lt;/p&gt;
&lt;h4 id=&#34;1-installpackages&#34;&gt;1. install.packages&lt;a class=&#34;headerlink&#34; href=&#34;#1-installpackages&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;install.packages()&lt;/code&gt;  所有 R 包：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;read.table&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;r-packages.txt&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;header&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;T&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;check.names&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;quote&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;soft&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;as.vector&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[,&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;install.packages&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;soft&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4 id=&#34;2-bioconductor&#34;&gt;2. bioconductor&lt;a class=&#34;headerlink&#34; href=&#34;#2-bioconductor&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Bioconductor 镜像：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Bioconductor 镜像源配置文件之一是 &lt;code&gt;.Rprofile&lt;/code&gt; (linux 下位于 &lt;code&gt;~/.Rprofile&lt;/code&gt; )。在文末添加如下语句：
  &lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;#清华大学开源镜像
options(BioC_mirror=&amp;quot;https://mirrors.tuna.tsinghua.edu.cn/bioconductor&amp;quot;)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;也可以在安装过程中指定镜像：
  &lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;source&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;http://bioconductor.org/biocLite.R&amp;quot;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;#指定一个离你最近的国内镜像&lt;/span&gt;
options&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;BioC_mirror&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;http://mirrors.ustc.edu.cn/bioc/&amp;quot;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
biocLite&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;包名&amp;quot;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;biocLite 包安装：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;在 R-3.5（Bioconductor-3.7） 前，Bioconductor 都是通过  &lt;strong&gt;biocLite&lt;/strong&gt;  安装相关的 R 包：
  &lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;http://bioconductor.org/biocLite.R&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;options&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;BioC_mirror&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;http://mirrors.tuna.tsinghua.edu.cn/bioconductor&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;read.table&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;r-biocLite.txt&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;header&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;T&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;check.names&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;quote&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;head&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;biocLite_Packages_Name&lt;/span&gt;
&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;RSQLite&lt;/span&gt;
&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;               &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;KEGGREST&lt;/span&gt;
&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;                    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;png&lt;/span&gt;
&lt;span class=&#34;m&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;                   &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Rcpp&lt;/span&gt;
&lt;span class=&#34;m&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;                 &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;digest&lt;/span&gt;
&lt;span class=&#34;m&#34;&gt;6&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;AnnotationDbi&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;soft&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;as.vector&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[,&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;biocLite&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;soft&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;从 R-3.5(Bioconductor-3.8) 起，Bioconductor 开始使用  &lt;strong&gt;BiocManager&lt;/strong&gt; 安装 R 包：
  &lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;kr&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;!&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;requireNamespace&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;BiocManager&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;quietly&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;TRUE&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;install.packages&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;BiocManager&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;BiocManager&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;install&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;3-github_install&#34;&gt;3. github_install&lt;a class=&#34;headerlink&#34; href=&#34;#3-github_install&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;GitHub 上的一些最新 R 包，可以使用 &lt;code&gt;devtools&lt;/code&gt;  进行安装：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nf&#34;&gt;install.packages&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;devtools&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;library&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devtools&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;install_github&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;jokergoo/ComplexHeatmap&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;6-特别注意的软件&#34;&gt;6. 特别注意的软件&lt;a class=&#34;headerlink&#34; href=&#34;#6-特别注意的软件&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&#34;61-gcc&#34;&gt;6.1 GCC&lt;a class=&#34;headerlink&#34; href=&#34;#61-gcc&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;对于使用 &lt;code&gt;conda install --yes --file requirements.txt&lt;/code&gt; 重装某一个环境的所有软件时，如果软件中包含了 gcc，安装了 R 后，在使用 R 时会可能会引发错误：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;path&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;to&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SoftWare&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Anaconda&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;v2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lib&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;R&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bin&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;exec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;R&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;path&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;to&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SoftWare&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Anaconda&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;v2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lib&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;R&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bin&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;exec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;..&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;..&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lib&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;..&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;..&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;libgomp.so.1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;version&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;`&lt;span class=&#34;n&#34;&gt;GOMP_4.0&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt; not found (required by /path/to/SoftWare/Anaconda/v2/lib/R/bin/exec/../../lib/libR.so)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;62-glibc&#34;&gt;6.2 glibc&lt;a class=&#34;headerlink&#34; href=&#34;#62-glibc&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;glibc 是 GNU 发布的 libc 库，即 c 运行库。glibc 是 linux 系统中最底层的 api，几乎其它任何运行库都会依赖于 glibc。glibc 除了封装 linux 操作系统所提供的系统服务外，它本身也提供了许多其它一些必要功能服务的实现。由于 glibc 囊括了几乎所有的 UNIX 通行的标准，可以想见其内容包罗万象。而就像其他的 UNIX 系统一样，其内含的档案群分散于系统的树状目录结构中，像一个支架一般撑起整个作业系统。在 GNU/Linux 系统中，其 C 函式库发展史点出了 GNU/Linux 演进的几个重要里程碑，用 glibc 作为系统的 C 函式库，是 GNU/Linux 演进的一个重要里程碑。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;有一些软件对于 glibc 的版本会有要求，如 cnvnator-0.3.3 要求 glibc &amp;gt;= 2.14。虽然在 anaconda 中有很多 channel 都提供了 glibc，但&lt;strong&gt;千万注意一定要注意不要轻易去安装&lt;/strong&gt;，否则有很大的概率会导致整个环境挂掉，甚至会导致当前环境中的 conda、python 出现动态库混乱错误，恢复起来相当麻烦！&lt;/p&gt;
&lt;p&gt;我在《&lt;a href=&#34;https://www.yuque.com/shenweiyan/cookbook/hpc-experience-glibc&#34;&gt;一次&amp;rdquo;胆战心惊&amp;rdquo;的真实集群运维经历&lt;/a&gt;》记录了 gblic 的一些集群吐血经历，感兴趣的可以了解一下。&lt;/p&gt;
&lt;h2 id=&#34;7-什么时候使用-anaconda&#34;&gt;7. 什么时候使用 Anaconda&lt;a class=&#34;headerlink&#34; href=&#34;#7-什么时候使用-anaconda&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;对于 Anaconda(conda) 软件安装以及依赖解决的原理，我对这个黑盒子表示一头雾水。真实的情况是，如果在一个环境中安装了几百个软件(包)，再去新装软件，这时候 Anaconda 常常会卡在 Collecting package metadata 和  Solving environment 过程中，甚至一个晚上都没法解决环境的依赖。   &lt;br /&gt;
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FmexuMleqUEMIkuex7HpLeY1BQKX.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;conda 官方说他们在 conda-4.7 中花了很多的精力去提升了 conda 的速度（参考官方文章：《&lt;a href=&#34;https://www.anaconda.com/how-we-made-conda-faster-4-7/&#34;&gt;How We Made Conda Faster in 4.7&lt;/a&gt;》），但从 4.6 升级到 4.7 过程很容易导致环境崩溃，修复起来极其麻烦（反正我折腾了一个晚上都没能把我的 base 给恢复回来，吐血的经历）！   &lt;br /&gt;
&lt;img alt=&#34;image3-768x475.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fvr3y3t7EZRS6wKUTUAyOo6oKytn.png&#34; /&gt;   &lt;br /&gt;
&lt;img alt=&#34;i2-768x475.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FvW1SipMySNdbltM6G2W6xcWBcD2.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;对于新手而言，Anaconda 的确是非常简单易用，如果对于多用户的服务器端，或者是提供公共使用的软件库是否需要采用 Anaconda，个人觉得的确需要慎重考虑一下，最起码需要考虑：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;是否需要根据流程划分环境？如果每个流程都需要使用 Python+R+Perl，每个环境都安装这三个软件（包），如何避免空间浪费？&lt;/li&gt;
&lt;li&gt;需要考虑如何备份和恢复环境。万一某个环境崩溃，有什么快速替代的方案而不影响业务。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;或许还有更多的问题，这里没有列出来，如果大家有什么更好的想法或者建议，也欢迎留言交流。&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E8%99%9A%E6%8B%9F%E7%8E%AF%E5%A2%83/2019-07-04-anaconda-experience/</link>
      <pubDate>Thu, 04 Jul 2019 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E8%99%9A%E6%8B%9F%E7%8E%AF%E5%A2%83/2019-07-04-anaconda-experience/</guid>
      
    </item>
    
    <item>
      <title>阿里云 ECS+Docker+WordPress 搭建个人博客</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2019-07-04&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2019-07-04T00:00:00&#39;&gt;2019-07-04&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2022-06-23&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2022-06-23T11:29:05&#39;&gt;2022-06-23&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;虽然已经入手 leanote，开启了以笔记+博客的方式记录学习生活琐事，但当手上有个续费了三年的 ECS，总想折腾点事情。于是想着在阿里云 ECS 上，使用 docker+wordpress 搭建个人博客，并基于 nginx 实现 ssl 证书的 https 访问。&lt;/p&gt;
&lt;p&gt;在阿里云上搭建使用个人博客主要分为以下几个步骤：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;购买阿里云 ECS 主机&lt;/li&gt;
&lt;li&gt;购买域名&lt;/li&gt;
&lt;li&gt;申请备案&lt;/li&gt;
&lt;li&gt;环境配置&lt;/li&gt;
&lt;li&gt;域名解析&lt;/li&gt;
&lt;li&gt;安装 SSL 证书开启 https 访问&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;h1 id=&#34;1-购买-ecs-主机&#34;&gt;1. 购买 ECS 主机&lt;a class=&#34;headerlink&#34; href=&#34;#1-购买-ecs-主机&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;如果只用来做简单的个人博客，1 核 1G 足够，当然后面也可以根据需求自己扩容。本人用的阿里的主机，平时工作需要搭其他环境，用的 2 核 4G，价钱就不说了，如果经济紧张，或只是搭个玩的，可以入搬瓦工或者腾讯云，具体价格可以去各自的官网查看。&lt;/p&gt;
&lt;p&gt;阿里云：&lt;a href=&#34;https://ecs-buy.aliyun.com/&#34;&gt;https://ecs-buy.aliyun.com/&lt;/a&gt;
腾讯云：&lt;a href=&#34;https://buy.cloud.tencent.com/cvm&#34;&gt;https://buy.cloud.tencent.com/cvm&lt;/a&gt;
搬瓦工：&lt;a href=&#34;https://bandwagonhost.com/vps-hosting.php&#34;&gt;https://bandwagonhost.com/vps-hosting.php&lt;/a&gt;
国外服务器详细对比（要翻墙）：&lt;a href=&#34;https://shadowsocks.blogspot.jp/&#34;&gt;https://shadowsocks.blogspot.jp/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;百度上有详细的购买流程，这不重复造轮子了，实在不明白可以留言。&lt;/p&gt;
&lt;h1 id=&#34;2-购买域名&#34;&gt;2. 购买域名&lt;a class=&#34;headerlink&#34; href=&#34;#2-购买域名&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;这个没什么说的，直接进网站找自己喜欢域名，支付就 OK。&lt;/p&gt;
&lt;p&gt;万网：&lt;a href=&#34;https://wanwang.aliyun.com/&#34;&gt;https://wanwang.aliyun.com/&lt;/a&gt;&lt;/p&gt;
&lt;h1 id=&#34;3-申请备案&#34;&gt;3. 申请备案&lt;a class=&#34;headerlink&#34; href=&#34;#3-申请备案&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;阿里云网站备案：&lt;a href=&#34;https://beian.aliyun.com/&#34;&gt;https://beian.aliyun.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;需要提醒大家的是，如果你买了阿里云的服务器，并且想要通过域名访问，那域名是必须要备案的，总结一句：必须先将域名备案，才能通过域名访问阿里云的服务器。&lt;/p&gt;
&lt;p&gt;一提到备案，可能你会觉得备案这个事情很麻烦，各种流程啊，手续啊。其实没这么麻烦，因为阿里云已经提供了一条龙服务，通过阿里云的代备案系统，一些都会变得容易很多，不管是个人网站的备案，还是企业网站的备案，都只是时间上的问题，一般备案审核需要二十天左右。&lt;/p&gt;
&lt;h1 id=&#34;4-环境配置&#34;&gt;4. 环境配置&lt;a class=&#34;headerlink&#34; href=&#34;#4-环境配置&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;WordPress 是一个非常著名的 PHP 编写的博客平台，发展到目前为止已经形成了一个庞大的网站平台系统。在 WP 上有规模庞大的插件和主题，可以帮助我们快速建立一个博客甚至网站。&lt;/p&gt;
&lt;p&gt;在 Windows 上可以非常方便的安装 WordPress，因为 IIS 上 集成了 WordPress 的一键安装包。而在 Linux 上安装 WordPress 就比较复杂了，我们需要配置 php 环境、Apache 或者 Nginx 服务器、MySQ L 数据库以及各种权限和访问问题。所以在 Linux 上最好的办法就是使用 Docker 来安装 WordPress。&lt;/p&gt;
&lt;p&gt;本人购买的 ECS 预装的 CentOS 7.4，通过 XShell 登入。&lt;/p&gt;
&lt;p&gt;① 安装 Docker&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;yum update
yum install docker
systemctl start docker
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;如果是国内用户的话可能还需要设置 Docker 加速，可以用阿里的 docker 镜像仓库，不然下国外的资源真的会崩溃。参考：&lt;a href=&#34;https://cr.console.aliyun.com/?spm=5176.1971733.2.28.394b9fbdrASJma#/accelerator&#34;&gt;https://cr.console.aliyun.com/?spm=5176.1971733.2.28.394b9fbdrASJma#/accelerator&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;② 安装 mysql，wordpress 镜像&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;# 拉取 mysql,wordPress镜像
docker pull mysql:latest
docker pull wordpress:latest

# 先实例化 Mysql 镜像
docker run -itd  --name mysql -p 127.0.0.1:3306:3306 -e MYSQL_ROOT_PASSWORD=new.1234  mysql

# 接下来后执行下面命令将两都结合
docker run -itd --name wordpress -p 127.0.0.1:8090:80 --link mysql:mysql -v /home/shenweiyan/wordpress/:/var/www/html/ wordpress
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;docker 参数映射前面是主机，后面是容器，比如 mysql:mysql 前面是主机的 docker name 叫 mysql，后面是容器中的 mysql， port 同理。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-p 127.0.0.1:8090:80&lt;/code&gt; 会启用 docker 的 ipv4 网络，方便后面 Nginx 做域名和端口映射；如果直接使用 &lt;code&gt;-p 8090:80&lt;/code&gt;，会默认使用 docker 的 ipv6 网络，ECS 中对于 ipv6 的监听和基于 Nginx 域名绑定比较麻烦，个人在这个坑尝试了很久，目前还没找到好的解决方法。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;到这里，docker+wordpress 就安装完成了。这时候尚不能打开网页，因为是配置在 127.0.0.1 上的，只有本机可以访问。&lt;/p&gt;
&lt;h1 id=&#34;5-域名解析&#34;&gt;5. 域名解析&lt;a class=&#34;headerlink&#34; href=&#34;#5-域名解析&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id=&#34;51-安装并启动-nginx&#34;&gt;5.1 安装并启动 nginx&lt;a class=&#34;headerlink&#34; href=&#34;#51-安装并启动-nginx&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;yum install nginx
systemctl start nginx
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;52-配置-nginxconf&#34;&gt;5.2 配置 nginx.conf&lt;a class=&#34;headerlink&#34; href=&#34;#52-配置-nginxconf&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;进入服务器 nginx 安装路径，进入 conf 文件夹，编辑 nginx.conf，加入一行 &lt;code&gt;include sites-available/*.conf&lt;/code&gt;。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;user  nobody;
worker_processes  1;
......
http {
    include       mime.types;
    default_type  application/octet-stream;
    ......
    server {
        listen       80;
        server_name  localhost;
        ......
    }
    ......
    include sites-available/*.conf;
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;53-配置-wordpressconf&#34;&gt;5.3 配置 wordpress.conf&lt;a class=&#34;headerlink&#34; href=&#34;#53-配置-wordpressconf&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;server {
    listen       80;
    server_name  youdomain.com;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    location / {
        proxy_pass http://127.0.0.1:8090;
    }

    access_log  logs/wordpress_access.log;
    error_log   logs/wordpress_error.log;
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;54-添加域名解析&#34;&gt;5.4 添加域名解析&lt;a class=&#34;headerlink&#34; href=&#34;#54-添加域名解析&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;登入阿里域名解析：&lt;a href=&#34;https://netcn.console.aliyun.com/core/domain/list，点击相应域名的&#34;&gt;https://netcn.console.aliyun.com/core/domain/list，点击相应域名的&lt;/a&gt; &amp;ldquo;解析&amp;rdquo; 链接，根据提示添加域名的 A 记录，解析到你的服务器 ip 下。
&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fm-MQeQpFEqp0LeZEAXEySUs16i_.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;55-安装-wordpress&#34;&gt;5.5 安装 wordpress&lt;a class=&#34;headerlink&#34; href=&#34;#55-安装-wordpress&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;添加完域名解析后，打开浏览器，输入 &lt;a href=&#34;http://youdomain.com，然后就可以看到&#34;&gt;http://youdomain.com，然后就可以看到&lt;/a&gt; WordPress 了。按照提示输入用户名等信息，然后安装 WordPress。等到它提示安装完成，那么 WordPress 的安装就算大功告成了。&lt;/p&gt;
&lt;h1 id=&#34;6-安装-ssl-证书开启-https-访问&#34;&gt;6. 安装 SSL 证书开启 https 访问&lt;a class=&#34;headerlink&#34; href=&#34;#6-安装-ssl-证书开启-https-访问&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id=&#34;61-单域名免费证书申请&#34;&gt;6.1 单域名免费证书申请&lt;a class=&#34;headerlink&#34; href=&#34;#61-单域名免费证书申请&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;登入阿里域名解析：&lt;a href=&#34;https://netcn.console.aliyun.com/core/domain/list，点击相应域名的&#34;&gt;https://netcn.console.aliyun.com/core/domain/list，点击相应域名的&lt;/a&gt; &amp;ldquo;SSL 证书&amp;rdquo; 链接，设置单域名免费证书。
&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FuBDrUkhJAGUHmJMSmoAv9A30FG3.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;62-ssl-证书下载&#34;&gt;6.2 SSL 证书下载&lt;a class=&#34;headerlink&#34; href=&#34;#62-ssl-证书下载&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;单域名免费证书提交申请后，一般十分钟就会审批下来。这时候，我们登陆 &amp;ldquo;&lt;a href=&#34;https://yundun.console.aliyun.com/?spm=5176.2020520163.aliyun_sidebar.24.4eb62b7auFTPPK&amp;amp;p=cas#/cas/home&#34;&gt;CA 证书服务（数据安全）&lt;/a&gt;&amp;ldquo;，在 &amp;ldquo;我的订单&amp;rdquo; 中找到已经签发的域名证书，点击 &amp;ldquo;下载&amp;rdquo; 链接，通过 &amp;ldquo;下载证书 for Nginx&amp;rdquo; 下载证书。
&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FkqqJGGi5jsGXc4BDQ9LN0NcOoth.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;63-ssl-证书安装&#34;&gt;6.3 SSL 证书安装&lt;a class=&#34;headerlink&#34; href=&#34;#63-ssl-证书安装&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;( 1 ) 在 Nginx 的安装目录下创建 cert 目录，并且将下载的全部文件拷贝到 cert 目录中。
( 2 ) 将 wordpress.conf 修改为：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;server {
    listen 80;
    listen 443;
    server_name site.shenweiyan.cn;
    ssl on;
    root /home/shenweiyan/wordpress;
    index index.html index.htm index.php default.html default.htm default.php;
    ssl_certificate   cert/1524404277557.pem;
    ssl_certificate_key  cert/1524404277557.key;
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;

    location / {
        proxy_pass http://127.0.0.1:8090;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    access_log  logs/wordpress_access.log;
    error_log   logs/wordpress_error.log;
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;( 3 )重启 nginx 服务&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;systemctl restart nginx
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;进行到这一步，你已经弄好了 ssl 证书，在服务器导入并且绑定好了 443 端口，也已开启 https 跳转了，正常情况下你可以使用 &lt;a href=&#34;https://site.shenwieyan.cn&#34;&gt;https://site.shenwieyan.cn&lt;/a&gt; 访问你的 wordpress。&lt;/p&gt;
&lt;p&gt;但是，你会遇到如下的情况：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;wordpress 样式错乱，图片打不开；&lt;/li&gt;
&lt;li&gt;wordpress/wp-admin 后台进不去，登录无反应；&lt;/li&gt;
&lt;li&gt;百度找了很多解决方法，却依然没有解决，甚至搞的连网站都打不开了；&lt;/li&gt;
&lt;li&gt;等等。。。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;请按照 6.4 方法修改，本人亲测，wordpress4.9.1-4.9.2 完美解决。&lt;/p&gt;
&lt;h2 id=&#34;64-全站开启-https&#34;&gt;6.4 全站开启 https&lt;a class=&#34;headerlink&#34; href=&#34;#64-全站开启-https&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;1、系统文件修改&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;路径：网站根目录（/home/shenweiyan/wordpress）/wp-includes/functions.php
找到代码：require( ABSPATH . WPINC . &amp;#39;/option.php&amp;#39; );
在下方添加：
add_filter(&amp;#39;script_loader_src&amp;#39;, &amp;#39;agnostic_script_loader_src&amp;#39;, 20,2); function agnostic_script_loader_src($src, $handle) { return preg_replace(&amp;#39;/^(http|https):/&amp;#39;, &amp;#39;&amp;#39;, $src); } add_filter(&amp;#39;style_loader_src&amp;#39;, &amp;#39;agnostic_style_loader_src&amp;#39;, 20,2); function agnostic_style_loader_src($src, $handle) { return preg_replace(&amp;#39;/^(http|https):/&amp;#39;, &amp;#39;&amp;#39;, $src); }
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;2、后台文件修改&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;路径：网站根目录（/home/shenweiyan/wordpress）/wp-config.php
找到代码：

*
* @package WordPress
*/

在下方添加如下代码：
_SERVER[&amp;#39;HTTPS&amp;#39;] = &amp;#39;on&amp;#39;;
define(&amp;#39;FORCE_SSL_LOGIN&amp;#39;, true);
define(&amp;#39;FORCE_SSL_ADMIN&amp;#39;, true);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;3、安装插件&lt;/strong&gt;
完成以上两步操作后，可以正常访问 https 开头的网站和后台，下载这个叫 &amp;ldquo;really-simple-ssl&amp;rdquo; 的 wordpress 插件：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;https://wordpress.org/plugins/really-simple-ssl/
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;登录后台安装此插件。&lt;/p&gt;
&lt;p&gt;或者登陆 wordpress 后台，在&amp;rdquo;设置&amp;rdquo;→ &amp;ldquo;常规&amp;rdquo; 中设置 &amp;ldquo;WordPress 地址（URL）&amp;rdquo; 和 &amp;ldquo;站点地址（URL）&amp;rdquo;为 https 链接地址。
&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FlaMAwW6wsKGgbgxOVbDyv8MafLl.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;至此，真正意义上解决 wordpress 全站开启 https 的 ssl 证书问题。&lt;/p&gt;
&lt;h1 id=&#34;7-填坑总结&#34;&gt;7. 填坑总结&lt;a class=&#34;headerlink&#34; href=&#34;#7-填坑总结&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id=&#34;71-更换域名无法登陆后台&#34;&gt;7.1. 更换域名无法登陆后台&lt;a class=&#34;headerlink&#34; href=&#34;#71-更换域名无法登陆后台&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;在后台—设置—常规—WordPress 地址或者网站域名处设置了别的域名，结果导致后台无法登录了，这是一种情况；还有一种情况就是网站搬家了，或者是换域名了，也会出现这类问题，那么就需要重新配置下当前域名才能使得网站正常运行。&lt;/p&gt;
&lt;p&gt;方法：修改 wp-config.php 文件&lt;/p&gt;
&lt;p&gt;第一步：在网站根目录找到 wp-config.php 文件，在其中添加以下两行内容：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;define(&amp;#39;WP_HOME, &amp;#39;http://要修改的域名&amp;#39;);
define(&amp;#39;WP_SITEURL&amp;#39;, &amp;#39;http://要修改的域名&amp;#39;);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;第二步：登录后台—设置—常规—重新输入新博客地址（WordPressAddress(URL)）和安装地址（SiteAddress(URL)），修改完毕后删除上面在 wp-config.php 文件中添加的内容（如何一切正常，不删除也可以，具体情况，具体操作）。&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;使用过程中我们可以通过 wordpress 大学，或其他平台找一些喜欢的主题，不过很多好看的主题是收费的。&lt;/p&gt;
&lt;p&gt;有其他问题可以留言，谢谢！&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E9%9D%99%E6%80%81%E7%BD%91%E7%AB%99/2019-07-04-ecs-docker-wordpress-ssl/</link>
      <pubDate>Thu, 04 Jul 2019 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E9%9D%99%E6%80%81%E7%BD%91%E7%AB%99/2019-07-04-ecs-docker-wordpress-ssl/</guid>
      
    </item>
    
    <item>
      <title>使用阿里云 ECS 搭建自己的 Leanote 云笔记服务</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2019-07-04&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2019-07-04T00:00:00&#39;&gt;2019-07-04&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-06-30&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-06-30T09:35:06&#39;&gt;2021-06-30&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Leanote（中文名 &amp;ldquo;蚂蚁笔记&amp;rdquo;），横跨 Windows、MacOS、Android、iOS、Linux 多平台，支持富文本和 Markdown 文本格式，自由度非常之高，你可以让笔记内容玩出新花样来。除了主打的笔记同步、编辑功能外，还支持开设博客，展示你公开的笔记内容。总体来说 Leanote 使用起来挺顺手，最重要一点，&lt;strong&gt;这个笔记是开源的&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;下面将基于阿里云 ECS 服务端搭建 Leanote 云笔记服务器的步骤分享出来，给需要使用私人云笔记的筒子们。详细安装请参考官方文档：《&lt;a href=&#34;https://github.com/leanote/leanote/wiki/Leanote-%E6%BA%90%E7%A0%81%E7%89%88%E8%AF%A6%E7%BB%86%E5%AE%89%E8%A3%85%E6%95%99%E7%A8%8B----Mac-and-Linux&#34;&gt;Leanote 源码版详细安装教程 Mac and Linux&lt;/a&gt;》。&lt;/p&gt;
&lt;h2 id=&#34;1-golang-安装&#34;&gt;1. Golang 安装&lt;a class=&#34;headerlink&#34; href=&#34;#1-golang-安装&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/local/src
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;wget&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://studygolang.com/dl/golang/go1.10.1.linux-amd64.tar.gz
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tar&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;zvxf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;go1.10.1.linux-amd64.tar.gz&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-C&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/local/software/
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mv&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/local/software/go&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/local/software/go-1.10.1
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;su&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;steven
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mkdir&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-p&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/data/LeaNote/bin
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ln&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-s&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/local/software/go-1.10.1/bin/*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/data/LeaNote/bin
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;2-获取-revel-和-leanote-的源码&#34;&gt;2. 获取 Revel 和 Leanote 的源码&lt;a class=&#34;headerlink&#34; href=&#34;#2-获取-revel-和-leanote-的源码&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;h2 id=&#34;21-方法-1-推荐方法&#34;&gt;2.1 方法 1 （推荐方法）:&lt;a class=&#34;headerlink&#34; href=&#34;#21-方法-1-推荐方法&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;请下载 &lt;a href=&#34;https://github.com/leanote/leanote-all/archive/master.zip&#34;&gt;leante-all-master.zip&lt;/a&gt;。解压后，将 src 文件夹复制到 /data/LeaNote/gopackage/。&lt;/p&gt;
&lt;p&gt;使用如下命令生成 revel 二进制命令, 稍后运行 Leanote 需要用到：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;go&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;github.com/revel/cmd/revel
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;22-方法-2&#34;&gt;2.2 方法 2&lt;a class=&#34;headerlink&#34; href=&#34;#22-方法-2&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;该方法使用 Golang 的 go get 来下载包, 这个命令会调用 git, 所以必须先安装 git。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# ubuntu 下安装 git&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sudo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;apt-get&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;git-core&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssh-server&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;openssh-client

&lt;span class=&#34;c1&#34;&gt;# centos 下安装git&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sudo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;yum&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;git
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;获取 Revel 和 Leanote:&lt;/p&gt;
&lt;p&gt;打开终端, 以下命令会下载 Revel 和 Leanote 及依赖包, 时间可能会有点久, 请耐心等待。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;go&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;get&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;github.com/revel/cmd/revel
$&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;go&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;get&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;github.com/leanote/leanote/app
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;下载完成后，Leanote 的源码在 /data/LeaNote/gopackage/src/github.com/leanote/leanote 下。&lt;/p&gt;
&lt;h2 id=&#34;3-安装-mongodb&#34;&gt;3. 安装 Mongodb&lt;a class=&#34;headerlink&#34; href=&#34;#3-安装-mongodb&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;h2 id=&#34;31-安装-mongodb&#34;&gt;3.1 安装 Mongodb&lt;a class=&#34;headerlink&#34; href=&#34;#31-安装-mongodb&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;到 &lt;a href=&#34;http://www.mongodb.org/downloads&#34;&gt;Mongodb 官网&lt;/a&gt; 下载相应系统的最新版安装包，或者从以下链接下载旧版本：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;64 位 linux Mongodb 3.0.1 下载链接(推荐): &lt;a href=&#34;https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.1.tgz&#34;&gt;https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.1.tgz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;64 位 linux Mongodb 3.6.4 下载链接：&lt;a href=&#34;https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.6.4.tgz&#34;&gt;https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.6.4.tgz&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/local/src
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;wget&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.6.4.tgz
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tar&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-xzvf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mongodb-linux-x86_64-3.6.4.tgz
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mongodb-linux-x86_64-3.6.4
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;su&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;root
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;cp&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/local/src/mongodb-linux-x86_64-3.6.4&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/local/software
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mv&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/local/software/mongodb-linux-x86_64-3.6.4&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/local/software/mongodb-linux-3.6.4
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;su&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;steven
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;vi&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~/.bashrc
&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;/usr/local/software/mongodb-3.6.4/bin:&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PATH&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;32-测试-mongodb-安装&#34;&gt;3.2 测试 Mongodb 安装&lt;a class=&#34;headerlink&#34; href=&#34;#32-测试-mongodb-安装&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 先在 /data/LeaNote 下新建一个目录 mongodata 存放 Mongodb 数据:&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mkdir&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-p&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/data/LeaNote/mongodb/data

&lt;span class=&#34;c1&#34;&gt;# 用以下命令启动 mongod:&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mongod&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--dbpath&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/data/LeaNote/mongodb/data

&lt;span class=&#34;c1&#34;&gt;# 这时 mongod 已经启动，重新打开一个终端, 键入 mongo 进入交互程序：&lt;/span&gt;
$&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mongo
&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;show&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;dbs
admin&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;.000GB
&lt;span class=&#34;nb&#34;&gt;local&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;.000GB
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Mongodb 安装到此为止, 下面为 Mongodb 导入 Leanote 初始数据。&lt;/p&gt;
&lt;h2 id=&#34;4-导入初始数据&#34;&gt;4. 导入初始数据&lt;a class=&#34;headerlink&#34; href=&#34;#4-导入初始数据&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;leanote 初始数据在 /data/LeaNote/gopackage/src/github.com/leanote/leanote/mongodb_backup/leanote_install_data 中。&lt;/p&gt;
&lt;p&gt;打开终端， 输入以下命令导入数据：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mongorestore&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-h&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;localhost&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-d&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;leanote&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--dir&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/data/LeaNote/gopackage/src/github.com/leanote/leanote/mongodb_backup/leanote_install_data
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;现在在 mongodb 中已经新建了 leanote 数据库, 可用命令查看下 Leanote 有多少张&amp;rdquo;表&amp;rdquo;：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mongo
&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;show&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;dbs&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;#　查看数据库&lt;/span&gt;
admin&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;.000GB
config&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;.000GB
leanote&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;.001GB
&lt;span class=&#34;nb&#34;&gt;local&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;.000GB
&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;use&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;leanote&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 切换到 leanote&lt;/span&gt;
switched&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;db&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;leanote
&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;show&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;collections&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 查看表&lt;/span&gt;
albums
attachs
blog_comments
....
files
has_share_notes
note_content_histories
note_contents
....
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;初始数据的 users 表中已有 2 个用户:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;user1 username: admin, password: abc123 (管理员, 只有该用户才有权管理后台, 请及时修改密码)
user2 username: demo@leanote.com, password: demo@leanote.com (仅供体验使用)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;5-配置-leanote&#34;&gt;5. 配置 Leanote&lt;a class=&#34;headerlink&#34; href=&#34;#5-配置-leanote&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Leanote 的配置存储在文件 /data/LeaNote/gopackage/src/github.com/leanote/leanote/conf/app.conf 中。&lt;/p&gt;
&lt;p&gt;请务必修改 app.secret 一项, 在若干个随机位置处，将字符修改成一个其他的值, 否则会有安全隐患!&lt;/p&gt;
&lt;p&gt;其它的配置可暂时保持不变, 若需要配置数据库信息, 请参照 &lt;a href=&#34;https://github.com/leanote/leanote/wiki/QA&#34;&gt;Leanote 问题汇总&lt;/a&gt;。&lt;/p&gt;
&lt;h2 id=&#34;6-运行-leanote&#34;&gt;6. 运行 Leanote&lt;a class=&#34;headerlink&#34; href=&#34;#6-运行-leanote&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;注意: 在此之前请确保 Mongodb 已在运行！&lt;/p&gt;
&lt;p&gt;新开一个窗口, 运行：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;revel&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;run&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;github.com/leanote/leanote

&lt;span class=&#34;c1&#34;&gt;# leanote 切入后台运行&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;nohup&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;revel&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;run&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;github.com/leanote/leanote&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&amp;gt;&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;恭喜你, 打开浏览器输入: &lt;a href=&#34;http://localhost:9000&#34;&gt;http://localhost:9000&lt;/a&gt; 体验 Leanote 吧！&lt;/p&gt;
&lt;h2 id=&#34;7-leanote-其他配置&#34;&gt;7. Leanote 其他配置&lt;a class=&#34;headerlink&#34; href=&#34;#7-leanote-其他配置&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;按照本教程启动 Mongodb 是没有权限控制的, 如果你的 Leanote 服务器暴露在外网, 任何人都可以访问你的 Mongodb 并修改, 所以这是极其危险的!!!!!!!!!!! 请务必为 Mongodb 添加用户名和密码并以 auth 启动，方法如下。&lt;/p&gt;
&lt;h3 id=&#34;71-为-mongodb-数据库添加用户&#34;&gt;7.1 为 mongodb 数据库添加用户&lt;a class=&#34;headerlink&#34; href=&#34;#71-为-mongodb-数据库添加用户&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;像 mysql 一样有 root 用户, mongodb 初始是没有用户的，这样很不安全，所以要为 leanote 数据库新建一个用户来连接 leanote 数据库(注意，并不是为 leanote 的表 users 里新建用户, 而是新建一个连接 leanote 数据库的用户，类似 mysql 的 root 用户).&lt;/p&gt;
&lt;p&gt;mognodb v2 与 v3 创建用户命令有所不同。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;mongodb v2 创建用户如下：&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 首先切换到leanote数据库下&lt;/span&gt;
&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;use&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;leanote&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# 添加一个用户root, 密码是abc123&lt;/span&gt;
&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;db.addUser&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;root&amp;quot;&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;abc123&amp;quot;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;_id&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ObjectId&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;53688d1950cc1813efb9564c&amp;quot;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;,
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;user&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;root&amp;quot;&lt;/span&gt;,
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;readOnly&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;false,
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;pwd&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;e014bfea4a9c3c27ab34e50bd1ef0955&amp;quot;&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# 测试下是否正确&lt;/span&gt;
&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;db.auth&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;root&amp;quot;&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;abc123&amp;quot;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 返回1表示正确&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;mongodb v3 创建用户如下：&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 首先切换到leanote数据库下&lt;/span&gt;
&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;use&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;leanote&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# 添加一个用户root, 密码是abc123&lt;/span&gt;
&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;db.createUser&lt;span class=&#34;o&#34;&gt;({&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;user:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;root&amp;#39;&lt;/span&gt;,
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;pwd:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;abc123&amp;#39;&lt;/span&gt;,
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;roles:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[{&lt;/span&gt;role:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;dbOwner&amp;#39;&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;db:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;leanote&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;}]&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;})&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# 测试下是否正确&lt;/span&gt;
&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;db.auth&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;root&amp;quot;&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;abc123&amp;quot;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 返回1表示正确&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;用户添加好后重新运行下 mongodb，并开启权限验证. 在 mongod 的终端按 ctrl+c 即可退出 mongodb。&lt;/p&gt;
&lt;p&gt;启动 mongodb：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mongod&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--dbpath&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/data/LeaNote/mongodb/data&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--auth
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;还要修改配置文件 : （修改 leanote/conf/app.conf）&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;db.host=localhost
db.port=27017
db.dbname=leanote # required
db.username=root # if not exists, please leave blank
db.password=abc123 # if not exists, please leave blank
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;72-mongodb-设置后台运行&#34;&gt;7.2 Mongodb 设置后台运行&lt;a class=&#34;headerlink&#34; href=&#34;#72-mongodb-设置后台运行&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Mongodb 安装完成后，我们通常通过 &lt;code&gt;mongod --dbpath /usr/local/mongo/data&lt;/code&gt; 让 mongodb 启动，但是我们关闭 shell，mongodb 就停止运行了。&lt;strong&gt;如果想在后台运行，启动时只需添加 &amp;ndash;fork 函数即可。可以在日志路径后面添加 &amp;ndash;logappend，防止日志被删除。&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mongod&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--fork&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--dbpath&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/data/LeaNote/mongodb/data&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--logpath&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/data/LeaNote/mongodb/logs/mongodb.log&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--logappend
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FoimxB-mRKTlFQHliLg3z3reWVyL.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;73-mongodb-设置开机启动&#34;&gt;7.3 Mongodb 设置开机启动&lt;a class=&#34;headerlink&#34; href=&#34;#73-mongodb-设置开机启动&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;当我们把服务器关闭，重启之后，发现 mongodb 又停止了，有没有开机就启动的方法呢？我们把上面代码放到 /etc/rc.local，中，就可以了。&lt;/p&gt;
&lt;p&gt;具体操作步骤：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 在 /etc/rc.local 添加以下代码&lt;/span&gt;
/usr/local/software/mongodb-3.6.4/bin/mongod&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--fork&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--dbpath&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/data/LeaNote/mongodb/data&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--logpath&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/data/LeaNote/mongodb/logs/mongodb.log&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--logappend
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;下次重启就可以直接运行 mongodb 了！&lt;/p&gt;
&lt;h3 id=&#34;74-为-leanote-配置-https&#34;&gt;7.4 为 Leanote 配置 https&lt;a class=&#34;headerlink&#34; href=&#34;#74-为-leanote-配置-https&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;1. 生成 SSL 证书&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;可以在网上买一个, 或者自己做一个。这里有一个 shell 脚本可以自动生成证书: (cert.sh)&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;ch&#34;&gt;#!/bin/sh&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# create self-signed server certificate:&lt;/span&gt;

&lt;span class=&#34;nb&#34;&gt;read&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-p&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;Enter your domain [www.example.com]: &amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;DOMAIN

&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;Create server key...&amp;quot;&lt;/span&gt;

openssl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;genrsa&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-des3&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-out&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$DOMAIN&lt;/span&gt;.key&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1024&lt;/span&gt;

&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;Create server certificate signing request...&amp;quot;&lt;/span&gt;

&lt;span class=&#34;nv&#34;&gt;SUBJECT&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;/C=US/ST=Mars/L=iTranswarp/O=iTranswarp/OU=iTranswarp/CN=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$DOMAIN&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;

openssl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;req&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-new&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-subj&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$SUBJECT&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-key&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$DOMAIN&lt;/span&gt;.key&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-out&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$DOMAIN&lt;/span&gt;.csr

&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;Remove password...&amp;quot;&lt;/span&gt;

mv&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$DOMAIN&lt;/span&gt;.key&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$DOMAIN&lt;/span&gt;.origin.key
openssl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;rsa&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-in&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$DOMAIN&lt;/span&gt;.origin.key&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-out&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$DOMAIN&lt;/span&gt;.key

&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;Sign SSL certificate...&amp;quot;&lt;/span&gt;

openssl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;x509&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-req&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-days&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3650&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-in&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$DOMAIN&lt;/span&gt;.csr&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-signkey&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$DOMAIN&lt;/span&gt;.key&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-out&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$DOMAIN&lt;/span&gt;.crt
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;假设得到了两个文件: &lt;strong&gt;a.com.crt&lt;/strong&gt;, &lt;strong&gt;a.com.key&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. 配置 Nginx&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;假设 Leanote 运行的端口是 9000, 域名为 a.com, 那么 nginx.conf 可以配置如下：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;k&#34;&gt;upstream&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;leanote_app&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;server&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;localhost&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;9000&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;

&lt;span class=&#34;k&#34;&gt;server&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;listen&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;80&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;listen&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;443&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;server_name&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;note.shenweiyan.cn&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;ssl&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;no&#34;&gt;on&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;client_max_body_size&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;30M&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;index&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;index.html&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;index.htm&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;index.php&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;default.html&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;default.htm&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;default.php&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;ssl_certificate&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;../cert/leanote/note.shenweiyan.cn.crt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;ssl_certificate_key&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;../cert/leanote/note.shenweiyan.cn.key&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;ssl_session_timeout&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;5m&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;ssl_ciphers&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;ssl_protocols&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;TLSv1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;TLSv1.1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;TLSv1.2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;ssl_prefer_server_ciphers&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;no&#34;&gt;on&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;

&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;#rewrite ^/(.*) https://note.shenweiyan.cn/$1 permanent;&lt;/span&gt;

&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;location&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;proxy_pass&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;         &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;http://leanote_app&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;proxy_set_header&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;Host&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;             &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$host&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;proxy_set_header&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;X-Real-IP&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$remote_addr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;proxy_set_header&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;X-Forwarded-For&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$proxy_add_x_forwarded_for&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;

&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;access_log&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;logs/leanote_access.log&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;error_log&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;logs/leanote_error.log&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;最后，执行 &lt;code&gt;nginx -s reload&lt;/code&gt; 重启 nginx 服务，打开 &lt;a href=&#34;http://blog.leanote.com/shenweiyan&#34;&gt;https://note.shenweiyan.cn&lt;/a&gt; 即可看到 leanote 的 index 主页。&lt;/p&gt;
&lt;h3 id=&#34;75-leanote-配置开机启动&#34;&gt;7.5 Leanote 配置开机启动&lt;a class=&#34;headerlink&#34; href=&#34;#75-leanote-配置开机启动&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;虽然通过命令让 Leanote 进程进入后台运行了，但是一旦重启还是要手动开启，略麻烦，这时可以自己新建 _.sh 脚本文件，将命令写入脚本文件里，然后在 rc.local 配置文件中运行 _.sh 脚本文件就能实现开机启动 Leanote 服务端。&lt;/p&gt;
&lt;p&gt;可以参考我的 *.sh 写法：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;ch&#34;&gt;#!/bin/bash&lt;/span&gt;
mongod&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--fork&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--dbpath&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/data/LeaNote/mongodb/data&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--logpath&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/data/LeaNote/mongodb/logs/mongodb.log&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--logappend
nohup&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;revel&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;run&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;github.com/leanote/leanote&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&amp;gt;&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;sstr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-e&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$str&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$sstr&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;若脚本文件命名为 run.sh，且存放在 /root/gopackage 目录里，可以编辑 rc.local 配置文件 /etc/rc.local，加入下面的命令然后保存即可：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/etc/profile
/root/gopackage/run.sh
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;参考资料&#34;&gt;参考资料：&lt;a class=&#34;headerlink&#34; href=&#34;#参考资料&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.csdn.net/adrianandroid/article/details/56277347&#34;&gt;https://blog.csdn.net/adrianandroid/article/details/56277347&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/leanote/leanote/wiki/Leanote-%E6%BA%90%E7%A0%81%E7%89%88%E8%AF%A6%E7%BB%86%E5%AE%89%E8%A3%85%E6%95%99%E7%A8%8B----Mac-and-Linux&#34;&gt;https://github.com/leanote/leanote/wiki/Leanote-源码版详细安装教程----Mac-and-Linux&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/leanote/leanote/wiki/QA#%E5%A6%82%E4%BD%95%E7%BB%91%E5%AE%9A%E5%9F%9F%E5%90%8D&#34;&gt;https://github.com/leanote/leanote/wiki/QA#如何绑定域名&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E9%9D%99%E6%80%81%E7%BD%91%E7%AB%99/2019-07-04-leanote-for-ecs-tutorial/</link>
      <pubDate>Thu, 04 Jul 2019 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E9%9D%99%E6%80%81%E7%BD%91%E7%AB%99/2019-07-04-leanote-for-ecs-tutorial/</guid>
      
    </item>
    
    <item>
      <title>一款能使压缩 fq 再缩小 30% 并加速后续分析的软件</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2019-07-04&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2019-07-04T00:00:00&#39;&gt;2019-07-04&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-06-25&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-06-25T10:37:48&#39;&gt;2021-06-25&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Clumpify 是 &lt;a href=&#34;https://sourceforge.net/projects/bbmap/&#34;&gt;BBMap&lt;/a&gt; 工具包中的一个组件，它与其他工具略有不同的是 Clumpify 不会实际更改你的数据，只是重新排序以最大化 gzip 压缩。因此，输出文件仍然是完全兼容的 gzipped fastq 文件，而 Clumpify 除了使其更快之外，对下游分析也不会造成影响。 它使用起来非常简单：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;clumpify.sh in=reads.fq.gz out=clumped.fq.gz reorder
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;This command assumes paired, interleaved reads or single-ended reads. But Clumpify also now works with paired reads in twin files like this:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;clumpify.sh in1=r1.fq.gz in2=r2.fq.gz out1=clumped1.fq.gz out2=clumped2.fq.gz reorder
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;clumpify-工作原理&#34;&gt;Clumpify 工作原理&lt;a class=&#34;headerlink&#34; href=&#34;#clumpify-工作原理&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Clumpify 的操作原理与使排序的 bam 文件小于未排序 bam 文件的原理相似 —— reads 被重新排序，以便具有相似序列的 reads 都集中在附近，从而使得 gzip 压缩更有效。但是与 bam 排序不同，在此过程中，配对的 pairs 会保持在一起，这样交错的文件（interleaved file）将保持交错，配对完好无损。另外一个与 bam 排序不同的是，Clumpify 不需要比对（mapping）和参考序列（reference），除非在非常特殊的情况下，Clumpify   可以使用任意少量的内存。 因此，与 mapping 比对相比，它的速度非常快且内存效率高，并且可以在不知道读取来自哪些生物体的情况下完成。&lt;/p&gt;
&lt;p&gt;在内部，Clumpify 形成了大量共享特殊 &amp;lsquo;pivot&amp;rsquo; kmers 的 reads 簇（团块），也就是说这些 reads 是重叠的（overlap）。接着，通过 reads 中的 kmer 位置进一步对这些团块进行分类，使得在一个团块内的 reads 都是位置分类的（position-sorted）。 最终结果是得到一个排序的 reads 块列表，在排序的 bam 的百分比左右产生压缩（yielding compression within a percent or so of sorted bam）。&lt;/p&gt;
&lt;h2 id=&#34;clumpify-耗时&#34;&gt;Clumpify 耗时&lt;a class=&#34;headerlink&#34; href=&#34;#clumpify-耗时&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Clumpify 运行会非常快。如果所有数据都适合内存时，Clumpify 只需要一次读取和写入文件所需的时间。如果数据不能适合内存，则需要大约两倍的时间。 但是，我们的集群上有一个高性能的并行文件系统。 在某些文件系统或单个旋转磁盘上，当数据不适合内存时，可能需要几倍的时间，因为一次只能读取和写入多个文件。&lt;/p&gt;
&lt;h2 id=&#34;为什么能提升速度&#34;&gt;为什么能提升速度&lt;a class=&#34;headerlink&#34; href=&#34;#为什么能提升速度&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;有很多进程是具有 I/O 限制的。 例如，在多核处理器上，使用 BBDuk，BBMerge，Reformat 等去解压缩一个 gzipped fastq 文件通常会受到 gzip 解压缩的速率限制（rate-limited）（即使你使用 pigz，它在解压缩方面比 gzip 快得多）。 Gzip 解压缩似乎会受到每秒输入字节数的速率限制而不是输出，这意味着一个给定大小的原始文件，如果压缩 Y％，将更快地解压缩 X％（meaning that a raw file of a given size will decompress X% faster if it is compressed Y% smaller）；这里 X 和 Y 是成比例的，但不是 1 比 1。 在我的测试中，使用 Spades 和 Megahit 进行组装可以减少使用 Clumpified 输入所需的时间，而不仅仅是用于运行 Clumpify 所需的时间，这主要是因为两者都是 multi-kmer 组装软件（assemblers），它们多次读取输入文件（根据 Megahit 的作者， 由于缓存局部性）。 单纯的受 CPU 限制（CPU-limited）的程序和软件，如比对（mapping） 通常不会在速度方面受益太多（尽管仍然有点因为改进了缓存局部性）。&lt;/p&gt;
&lt;h2 id=&#34;什么时候怎么使用-clumpify&#34;&gt;什么时候怎么使用 Clumpify&lt;a class=&#34;headerlink&#34; href=&#34;#什么时候怎么使用-clumpify&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;如果您想要对压缩数据进行进一步压缩，请尽早进行（例如，在 raw reads 时）。 然后运行所有下游处理步骤，确保维持 read 顺序（例如，如果使用 BBDuk 进行 adapter-trimming 时，则使用 &amp;ldquo;ordered&amp;rdquo; 标志），以便保持 clump 顺序; 因此，所有中间文件都将受益于增加的压缩和增加的速度。 我建议在所有将进入长期存储的数据上运行 Clumpify，或者在有多个步骤和中间 gzip 压缩文件的长管道时运行 Clumpify。 此外，即使数据不会进入长期存储，如果正在使用共享文件系统或需要通过互联网发送文件，尽早运行 Clumpify 将节省带宽。 下面列举了我不会聚集数据的唯一时间。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;对于具有非常低 kmer 深度的 reads，由于覆盖率非常低（如 1x WGS）或超高错误率（如原始 PacBio 数据）。 它不会损坏任何东西，但也不会完成任何事情。&lt;/li&gt;
&lt;li&gt;对于大量扩增子数据。 这可能有效，也可能无效; 但如果你的所有的 reads 都被期望共享相同的 kmers，它们可能都会形成一个巨大的丛，再也没有任何东西可以实现。 同样，它不会损坏任何东西，如果从可变区域中随机选择 pivots ，它可能会增加压缩。&lt;/li&gt;
&lt;li&gt;当你的过程依赖 reads 的顺序时。如果你总是从文件中获取前一百万条 reads，假设它们在文件其余部分具有良好代表性，那么 Clumpify 将导致你的假设无效 —— 就像从分类的 bam 文件中获取前一百万条 reads 不具有代表性。 幸运的是，这绝不是一个好习惯，所以如果你现在正在这样做，现在无论如何都是改变你的流程的好机会。 随机子采样（Randomly subsampling）是一种更好的方法。&lt;/li&gt;
&lt;li&gt;If you are only going to read data fewer than \~3 times, it will never go into long-term storage, and it&amp;rsquo;s being used on local disk so bandwidth is not an issue, there&amp;rsquo;s no point in using Clumpify (or gzip, for that matter).&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;clumpify-使用与数据一致性检验&#34;&gt;Clumpify 使用与数据一致性检验&lt;a class=&#34;headerlink&#34; href=&#34;#clumpify-使用与数据一致性检验&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;在实际测试用，使用 Hiseq2500 的 fastq 压缩数据 A，经 clumpify.sh 处理后得到压缩数据 B，但 A、B 解压出来的 fastq 数据 md5 是不一致的：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;# 本测试所所用 bbmap 版本：38.20

$ cp B1_CNE2T1_R1.fastq.gz test_R1.fastq.gz
$ md5sum B1_CNE2T1_R1.fastq.gz test_R1.fastq.gz
0dc5da3a25d4f27e1ff02d2924497f5e  B1_CNE2T1_R1.fastq.gz
0dc5da3a25d4f27e1ff02d2924497f5e  test_R1.fastq.gz

$ sh clumpify.sh in=test_R1.fastq.gz out=clumpify_test_R1.fastq.gz

$ du -sh *
701M    B1_CNE2T1_R1.fastq.gz
515M    clumpify_test_R1.fastq.gz
701M    test_R1.fastq.gz

$ gzip -d test_R1.fastq.gz
$ gzip -d clumpify_test_R1.fastq.gz

$ ll
total 8011828
-rw-r--r-- 1 shenweiyan bioinfo  734384226 Aug  9 16:39 B1_CNE2T1_R1.fastq.gz
-rw-r--r-- 1 shenweiyan bioinfo 3734854983 Aug  9 16:45 clumpify_test_R1.fastq
-rw-r--r-- 1 shenweiyan bioinfo 3734854983 Aug  9 16:40 test_R1.fastq

$ md5sum test_R1.fastq clumpify_test_R1.fastq
a3c411044914a671f88dd0976f29b237  test_R1.fastq
cf3b381d95725f1c2ddd352e50f60832  clumpify_test_R1.fastq
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;其中的一个原因是，clumpify 其实只是将 Fastq 文件根据序列相似性进行了位置重排（有点类似 CD-hit 工作原理），以便使得文件压缩率达到最大，它并没有对文件内容做任何改动。它除了会使后续分析流程变快之外，没有任何副作用。为了验证这一点，我们把原始的 Fastq 和经 clumpify 处理后解压出来的 Fastq 进行重新排序，并对排序后的结果进行一致性检测：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$ sort test_R1.fastq &amp;gt;sorted_test_R1.fastq
$ sort clumpify_test_R1.fastq &amp;gt;sorted_clumpify_test_R1.fastq

$ ll
total 15306476
-rw-r--r-- 1 shenweiyan bioinfo  734384226 Aug  9 16:39 B1_CNE2T1_R1.fastq.gz
-rw-r--r-- 1 shenweiyan bioinfo 3734854983 Aug  9 16:45 clumpify_test_R1.fastq
-rw-r--r-- 1 shenweiyan bioinfo 3734854983 Aug  9 17:43 sorted_clumpify_test_R1.fastq
-rw-r--r-- 1 shenweiyan bioinfo 3734854983 Aug  9 17:26 sorted_test_R1.fastq
-rw-r--r-- 1 shenweiyan bioinfo 3734854983 Aug  9 16:40 test_R1.fastq

$ md5sum *
0dc5da3a25d4f27e1ff02d2924497f5e  B1_CNE2T1_R1.fastq.gz
cf3b381d95725f1c2ddd352e50f60832  clumpify_test_R1.fastq
240f0aa5ec8be86b38908f8bb09fb21d  sorted_clumpify_test_R1.fastq
240f0aa5ec8be86b38908f8bb09fb21d  sorted_test_R1.fastq
a3c411044914a671f88dd0976f29b237  test_R1.fastq
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;可以看出来原始的 Fastq 和经 clumpify 处理后解压出来的 Fastq 重新排序后得到的结果是一致的，说明 clumpify 的确没有对文件内容做任何改动。&lt;/p&gt;
&lt;p&gt;因此，我们可以基于此建议对于数据需要长期存储，或者后续分析流程耗时较长的场景，数据下机之后首先用 clumpify 对 fastq 进行排序压缩，节省数据存储空间。&lt;/p&gt;
&lt;h2 id=&#34;clumpify-使用注意事项&#34;&gt;Clumpify 使用注意事项&lt;a class=&#34;headerlink&#34; href=&#34;#clumpify-使用注意事项&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&#34;内存设置&#34;&gt;内存设置&lt;a class=&#34;headerlink&#34; href=&#34;#内存设置&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;实测 Clumpify 确实能显著减少 fastq 压缩文件的体积，这里注意一个参数 &lt;strong&gt;-Xmx&lt;/strong&gt;：限制 JVM 使用的最大内存。一定要根据自己机器配置情况设置一下，不然 Clumpify 默认自动检测可用内存，如果处理的 Fastq 文件太大，会把机器内存都占满，就别再想跑别的程序了。&lt;/p&gt;
&lt;h3 id=&#34;重复数据删除&#34;&gt;重复数据删除&lt;a class=&#34;headerlink&#34; href=&#34;#重复数据删除&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Clumpify 的 37.24 版本起，增加了一些很好的光学重复数据删除的改进。 它现在更快（many times faster in certain degenerate cases），并且提高了 NextSeq tile-edge duplicates 的精度。 具体来说，现在建议使用下面的方式进行删除处理：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;clumpify.sh in=nextseq.fq.gz out=clumped.fq.gz dedupe optical spany adjacent
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;这将删除所有正常的光学 duplicates，以及所有的 tile-edge duplicates，但是如果它们位于相邻的 tile 中并且共享它们的 Y 坐标（within dupedist），而不是之前，它会仅仅将 reads 视为 tile-edge duplicates。 它们可以在任何 tiles 中并且可以共享它们的 X 坐标。 这意味着假阳性较少（PCR 或巧合重复被分类为光学/tile-edge 重复）。 这可能是因为在 NextSeq 上，tile-edge duplicates 仅存在于 tile X-edges 上，并且 duplicates 仅在相邻 tiles 之间。&lt;/p&gt;
&lt;p&gt;正常光学复制删除（HiSeq，MiSeq 等）应使用此命令：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;clumpify.sh in=nextseq.fq.gz out=clumped.fq.gz dedupe optical
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;参考资料&#34;&gt;参考资料&lt;a class=&#34;headerlink&#34; href=&#34;#参考资料&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Brian Bushnell，《&lt;a href=&#34;https://www.biostars.org/p/225338/&#34;&gt;Tool: Introducing Clumpify: Create 30% Smaller, Faster Gzipped Fastq Files. And remove duplicates.&lt;/a&gt;》，Biostars&lt;/li&gt;
&lt;li&gt;wangpeng905，《&lt;a href=&#34;https://www.jianshu.com/p/13d0575fa08b&#34;&gt;Linux 下提升生物信息分析工作效率的神器（持续更新）&lt;/a&gt;》，简书&lt;/li&gt;
&lt;/ul&gt;</description>
      <link>https://shenwy.com/yuque/%E7%94%9F%E7%89%A9%E4%BF%A1%E6%81%AF/%E8%BD%AF%E4%BB%B6/2019-07-04-clumpify/</link>
      <pubDate>Thu, 04 Jul 2019 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E7%94%9F%E7%89%A9%E4%BF%A1%E6%81%AF/%E8%BD%AF%E4%BB%B6/2019-07-04-clumpify/</guid>
      
    </item>
    
    <item>
      <title>基于 ggplot2 的解剖图和组织模块可视化</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;h1 id=&#34;摘要&#34;&gt;摘要&lt;a class=&#34;headerlink&#34; href=&#34;#摘要&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2019-07-01&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2019-07-01T00:00:00&#39;&gt;2019-07-01&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-06-30&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-06-30T09:43:21&#39;&gt;2021-06-30&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;将数据显示到解剖结构上，是一种可以快速观察组织相关信息的便捷技术。然而，绘制组织是一项复杂的任务（a complex task），需要解剖学和艺术方面的专业知识。虽然已经存在可用于在解剖图上显示基因表达的基于网络的应用技术，但是其他非遗传学科（non-genetic disciplines）缺乏类似的工具。此外，基于网络的工具通常缺乏与编程语言（如 R）中的包相关联的模块性（ lack the modularity associated with packages in programming languages）。这里我介绍 gganatogram，一个根据 ggplot2 的图形语法和来自 Expression Atlas 公众可用解剖图的组合，来绘制模块化物种解剖图的 R 包。这种组合允许快速，简单，模块化和可重复地生成解剖图。仅使用一个命令以及一个具有组织名称，分组，颜色和值的数据框，该工具就可以使用户能够以特定的颜色可视化特定的人体和小鼠组织，或者根据变量进行分组，或显示特定的值，例如基因-表达（gene-expression），药代动力学（pharmacokinetics）或所选组织之间的细菌负荷（bacterial load）。我希望这个工具对更广泛的生物科学界有用。也欢迎社区成员提交额外的解剖图，并将其纳入该软件包中。&lt;/p&gt;
&lt;h1 id=&#34;介绍&#34;&gt;介绍&lt;a class=&#34;headerlink&#34; href=&#34;#介绍&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;在多细胞生物中有效地显示组织信息可能是一个费力且耗时的过程（a laborious and time consuming process）。 研究人员通常希望展示值之间的差异，例如一个生物体组织之间，或不同组中具有相似组织之间的基因表达值或药代动力学值。&lt;/p&gt;
&lt;p&gt;虽然条形图和热图提供了组间差异的信息视图，但很难立即观察到生物学意义（图 1a-b）。 与解剖图相比，后者更易于快速发现组织或组之间的差异，并可立即为这些观察提供生物学背景（biological context）（图 1c）。 这还有一个额外的好处，即无论是阅读论文还是参加讲座，观众都必须花费更少的时间和精力来掌握结果。
&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FnwXGs9R0SqUm0FFghpIFnx5t47H.png&#34; /&gt;
Figure 1. Comparison between barplot (top left), heatmap (top right), and anatogram (bottom) to display tissue values between groups.&lt;/p&gt;
&lt;p&gt;已经存在几种在不同组织中显示基因表达的在线工具（如 Expression Atlas、Semantic Body Browser、TISSUES 2.0）。 虽然这些工具提供了关于各种组织和生物体中基因表达的重要信息，但除遗传学之外的其他学科由于(缺少)对基因的关注而无法利用这些应用（other disciplines besides genetics are unable to utilise these applications due to the focus on genes）。 此外，这些工具通常只包含一组可预测的预定义实验，导致难以呈现我们自己的数据。 还有其他值得注意是，使用这些工具，重建绘图或从结果中自动创建绘图可能很费力。&lt;/p&gt;
&lt;p&gt;这里介绍的 gganatogram，是一个利用 Expression Atlas 中公开提供的鼠和人体解剖图，基于 ggplot2 的开源 R 软件包。 使用此软件包，任何 R 用户都可以轻松快速地查看具有指定颜色，组和值的解剖图。 使用 ggplot2 中熟悉的语法，该程序可用于模块化解剖图的生成。&lt;/p&gt;
&lt;h1 id=&#34;方法&#34;&gt;方法&lt;a class=&#34;headerlink&#34; href=&#34;#方法&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id=&#34;实现implementation&#34;&gt;实现（Implementation）&lt;a class=&#34;headerlink&#34; href=&#34;#实现implementation&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;gganatogram 存储在 &lt;a href=&#34;https://neuroconductor.org/package/gganatogram&#34;&gt;neuroconductor&lt;/a&gt;，一个用于快速测试（rapid testing）和可重现计算成像软件（reproducible computational imaging software）传播的开源平台上， 其开发版本可以在 &lt;a href=&#34;https://github.com/jespermaag/gganatogram&#34;&gt;github/jespermaag/gganatogram&lt;/a&gt; 找到，它允许社区通过创建坐标文件来发布包的 issues，提交请求或添加解剖图。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nf&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;https://neuroconductor.org/neurocLite.R&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;neuro_install&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;gganatogram&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;release&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;stable&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;release_repo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;latest_neuroc_release&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;release&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;stable&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;开发版本可以从 github 安装：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;devtools&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;install_github&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;jespermaag/gganatogram&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;简而言之，为了生成包含所有组织坐标的主列表对象，作者从 Expression Atlas 下载了 SVG 文件（可从 &lt;a href=&#34;https://github.com/ebi-gene-expression-group/anatomogram/tree/master/src/svg&#34;&gt;gganatogram GitHub&lt;/a&gt; 中获取）并使用自定义的 python 脚本（可从 &lt;a href=&#34;https://github.com/jespermaag/gganatogram/blob/master/data-raw/getCoord.py&#34;&gt;GitHub&lt;/a&gt; 中获得）处理它们。 该脚本通过 SVG 文件来提取名称，坐标和 SVG 转换信息。 然后在 R 中对它们进行后处理以创建构成组织坐标的 rda 文件。&lt;/p&gt;
&lt;h2 id=&#34;操作operation&#34;&gt;操作（Operation）&lt;a class=&#34;headerlink&#34; href=&#34;#操作operation&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;gganatogram 需要满足 R≥3.0.0，ggplot2 v.3.0.0 和 ggpolypath v.0.1.0 。 该程序应该能够在任何具有 R 系统要求的计算机上运行。可以使用包含器官名称，颜色，类型或值的基本 data.frame 生成图形。 根据 data.frame 的顺序，一次一个地绘制器官。 每个连续行的组织将在前一个上面分层。 gganatogram 包提供了四个这样的 data.frame，其中包含可用于绘图的所有组织，每个人和小鼠一个，并按性别划分。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;hgMale_key&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hgFemale_key&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mmMale_key&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mmFemale_key&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;这些数据框已经指定了颜色，类型和指定的随机数，以便于开始绘图。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nf&#34;&gt;head&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hgFemale_key&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;organ&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;colour&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;value&lt;/span&gt;
&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pancreas&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;orange&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;digestion&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;10.373146&lt;/span&gt;
&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;           &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;liver&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;orange&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;digestion&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;19.723172&lt;/span&gt;
&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;           &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;colon&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;orange&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;digestion&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;14.853335&lt;/span&gt;
&lt;span class=&#34;m&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bone_marrow&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;#41ab5d     other 19.681587&lt;/span&gt;
&lt;span class=&#34;m&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;urinary_bladder&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;orange&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;digestion&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;14.914273&lt;/span&gt;
&lt;span class=&#34;m&#34;&gt;6&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;         &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;stomach&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;orange&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;digestion&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2.667599&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;主要功能是 gganatogram()。 默认情况下，没有任何参数，它会绘制具有标准 ggplot2 参数的男性人的轮廓。 通过添加几个选项，可以快速更改为女性，通过选定的颜色填充指定的器官，或者根据值填充器官（图 2）。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nf&#34;&gt;library&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;gganatogram&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;library&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;gridExtra&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;organPlot&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;data.frame&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;organ&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;heart&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;leukocyte&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;nerve&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;brain&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;liver&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;stomach&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;colon&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;circulation&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;circulation&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;nervous␣system&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;nervous␣system&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;digestion&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;digestion&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;digestion&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;colour&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;red&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;red&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;purple&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;purple&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;orange&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;orange&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;orange&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;stringsAsFactors&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;gganatogram&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;B&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;gganatogram&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fillOutline&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;#a6bddb&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sex&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;female&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;theme_void&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;C&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;gganatogram&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;organPlot&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fillOutline&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;#a6bddb&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;organism&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;human&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sex&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;female&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fill&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;colour&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;theme_void&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;gganatogram&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;organPlot&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fillOutline&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;#a6bddb&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;organism&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;human&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sex&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;female&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fill&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;value&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;theme_void&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;grid.arrange&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;B&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;C&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ncol&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FgJLZqEZ9AjHOBvcC74kIYGOpY-F.png&#34; /&gt;
(A) Default plot generated by calling gganatogram(), (B) adding female, plotting specified organs by (C) colour, (D) value.&lt;/p&gt;
&lt;h1 id=&#34;示例&#34;&gt;示例&lt;a class=&#34;headerlink&#34; href=&#34;#示例&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;要绘制每个生物体的所有组织，请使用每个生物体和性别所提供的密钥文件。 这将按照每个 data frame 的顺序显示所有组织。 要更改器官彼此叠加的顺序，请重新排序数据框以使这些组织位于底部。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nf&#34;&gt;library&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;gganatogram&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;library&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;gridExtra&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;hgMale&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;gganatogram&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hgMale_key&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fillOutline&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;#a6bddb&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;organism&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;human&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;           &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sex&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;male&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fill&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;colour&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;theme_void&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;hgFemale&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;gganatogram&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hgFemale_key&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fillOutline&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;#a6bddb&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;             &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;organism&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;human&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sex&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;female&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fill&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;colour&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;theme_void&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;mmMale&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;gganatogram&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mmMale_key&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fillOutline&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;#a6bddb&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;organism&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;mouse&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;           &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sex&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;male&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fill&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;colour&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;theme_void&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;mmFemale&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;gganatogram&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mmFemale_key&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;outline&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;T&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fillOutline&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;#a6bddb&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;             &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;organism&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;mouse&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sex&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;female&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fill&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;colour&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;theme_void&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;

&lt;span class=&#34;nf&#34;&gt;grid.arrange&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hgMale&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hgFemale&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mmMale&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mmFemale&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ncol&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FhLpmsx0AyFILfUsg4mFT0-QDSKx.png&#34; /&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;hgMale&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;gganatogram&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hgMale_key&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fillOutline&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;#440154FF&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;organism&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;human&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sex&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;male&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fill&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;value&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;theme_void&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;scale_fill_viridis&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;hgFemale&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;gganatogram&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hgFemale_key&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fillOutline&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;#440154FF&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;organism&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;human&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sex&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;female&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fill&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;value&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;theme_void&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;scale_fill_viridis&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;mmMale&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;gganatogram&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mmMale_key&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fillOutline&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;#440154FF&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;organism&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;mouse&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sex&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;male&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fill&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;value&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;theme_void&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;scale_fill_viridis&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;mmFemale&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;gganatogram&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mmFemale_key&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;outline&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;T&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fillOutline&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;#440154FF&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;organism&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;mouse&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sex&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;female&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fill&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;value&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;theme_void&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;scale_fill_viridis&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;

&lt;span class=&#34;nf&#34;&gt;grid.arrange&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hgMale&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hgFemale&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mmMale&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mmFemale&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ncol&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;AllSpeciesPlotValue-1.svg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FlZNWlsR6LpjlanbAOiPyIcG5w5v.svg&#34; /&gt;&lt;/p&gt;
&lt;p&gt;要使用 gganatogram 函数，我们需要具有器官（organ）、颜色（colour）和相关值（value）的数据框（data frame）。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;organPlot&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;data.frame&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;organ&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;heart&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;leukocyte&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;nerve&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;brain&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;liver&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;stomach&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;colon&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;circulation&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;circulation&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;nervous system&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;nervous system&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;digestion&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;digestion&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;digestion&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;colour&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;red&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;red&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;purple&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;purple&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;orange&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;orange&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;orange&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;stringsAsFactors&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;head&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;organPlot&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;#&amp;gt;       organ           type colour value&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;#&amp;gt; 1     heart    circulation    red    10&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;#&amp;gt; 2 leukocyte    circulation    red     5&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;#&amp;gt; 3     nerve nervous system purple     1&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;#&amp;gt; 4     brain nervous system purple     8&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;#&amp;gt; 5     liver      digestion orange     2&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;#&amp;gt; 6   stomach      digestion orange     5&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;使用 gganatogram 函数，根据颜色填充器官。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nf&#34;&gt;gganatogram&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;organPlot&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fillOutline&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;#a6bddb&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;organism&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;human&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sex&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;male&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fill&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;colour&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;1.svg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fjw14x7hTBzDwpOjKZBYbxG11z9p.svg&#34; /&gt;&lt;/p&gt;
&lt;p&gt;当然，我们可以使用 ggplot 主题和函数来调整绘图。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nf&#34;&gt;gganatogram&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;organPlot&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fillOutline&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;#a6bddb&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;organism&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;human&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sex&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;male&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fill&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;colour&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;theme_void&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;2.svg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fv-EMpnCR_BlMjCrq8-41djxTlF_.svg&#34; /&gt;&lt;/p&gt;
&lt;p&gt;我们也可以根据给予每个器官的值来填充各个组织的不同颜色；甚至，gganatogram 可以绘制细胞亚结构的相关组织图；或者是其他物种对应的解剖表达图谱。
&lt;img alt=&#34;4.svg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FhpAUgQsdrDQwm6yZyTT7JCrMnv1.svg&#34; /&gt;
&lt;img alt=&#34;3.svg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FrxPQH5KN7vDwNX7EA7IhOyG2UuV.svg&#34; /&gt;&lt;/p&gt;
&lt;p&gt;更多 gganatogram 解剖图谱绘制示例可以参考其在 Github 的介绍，&lt;a href=&#34;https://github.com/jespermaag/gganatogram&#34;&gt;https://github.com/jespermaag/gganatogram&lt;/a&gt;， 感兴趣的童鞋可以去尝试研究一下。&lt;/p&gt;
&lt;p&gt;总的来说，gganatogram 是一款强大的 R 包，它可以根据 ggplot2 和 Expression Atlas 的信息轻松地显示解剖图，这些工具组合成了一个更加强大的工具来绘制和显示组织信息。&lt;/p&gt;
&lt;h1 id=&#34;参考资料&#34;&gt;参考资料&lt;a class=&#34;headerlink&#34; href=&#34;#参考资料&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;Maag JLV. &lt;a href=&#34;https://f1000research.com/articles/7-1576/v1&#34;&gt;gganatogram: An R package for modular visualisation of anatograms and tissues based on ggplot2&lt;/a&gt; [version 1; referees: 1 approved]. F1000Research 2018, 7:1576 (doi: 10.12688/f1000research.16409.1)&lt;/li&gt;
&lt;li&gt;Jesper Maag，&lt;a href=&#34;https://github.com/jespermaag/gganatogram&#34;&gt;Create anatograms using ggplot2&lt;/a&gt;，Github&lt;/li&gt;
&lt;/ol&gt;</description>
      <link>https://shenwy.com/yuque/%E5%8F%AF%E8%A7%86%E5%8C%96/R%E8%AF%AD%E8%A8%80%E5%8F%AF%E8%A7%86%E5%8C%96/2019-07-01-r-gganatogram/</link>
      <pubDate>Mon, 01 Jul 2019 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%8F%AF%E8%A7%86%E5%8C%96/R%E8%AF%AD%E8%A8%80%E5%8F%AF%E8%A7%86%E5%8C%96/2019-07-01-r-gganatogram/</guid>
      
    </item>
    
    <item>
      <title>Windows 增强型终端 MobaXterm</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2019-07-01&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2019-07-01T00:00:00&#39;&gt;2019-07-01&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2024-08-07&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2024-08-07T00:00:00&#39;&gt;2024-08-07&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;MobaXterm 又名 MobaXVT，是一款增强型终端、X 服务器和 Unix 命令集（GNU/ Cygwin）工具箱。MobaXterm 可以开启多个终端视窗，以最新的 X 服务器为基础的 &lt;a href=&#34;http://X.Org&#34;&gt;X.Org&lt;/a&gt;，可以轻松地来试用 Unix/Linux 上的 GNU Unix 命令。这样一来，我们可以不用安装虚拟机来试用虚拟环境，然后只要通过 MobaXterm 就可以使用大多数的 linux 命令。&lt;/p&gt;
&lt;p&gt;MobaXterm 还有很强的扩展能力，可以集成插件来运行 Emacs、Fontforge、Gcc, G++ and development tools、MPlayer、Perl、Curl、Corkscrew、 Tcl / Tk / Expect、 Screen、 Png2Ico 、 NEdit  Midnight Commander 等程序。&lt;/p&gt;
&lt;p&gt;MobaXterm 分免费开源版和收费专业版。官网提供 MobaXterm 的免费开源版 &amp;ldquo;Home Edition&amp;rdquo; 下载, 免费开源版又分便捷版(解压即用)和安装版(需要一步步安装)。&lt;/p&gt;
&lt;p&gt;MobaXterm 免费版（persional）和专业版（Professional）除了 sessions 数、SSH tunnels 数和其他一些定制化配置外限制外，免费版在终端底部还多了一个 &amp;ldquo;UNREGISTERED VERSION&amp;rdquo; 提示。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Peronnal Edition    &lt;br /&gt;
&lt;img alt=&#34;mobaxterm_personal&#34; src=&#34;https://kg.weiyan.cc/2024/08/mobaxterm_personal.png&#34; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Professional Edition    &lt;br /&gt;
&lt;img alt=&#34;mobaxterm_professional&#34; src=&#34;https://kg.weiyan.cc/2024/08/mobaxterm_professional.png&#34; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;1-主要功能&#34;&gt;1. 主要功能&lt;a class=&#34;headerlink&#34; href=&#34;#1-主要功能&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;支持各种连接 SSH，X11，RDP，VNC，FTP，MOSH&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;支持 Unix 命令（bash，ls，cat，sed，grep，awk，rsync，…）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;连接 SSH 终端后支持 SFTP 传输文件&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;各种丰富的插件（git/dig/aria2…）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;可运行 Windows 或软件&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;11-内建多标签和多终端分屏&#34;&gt;1.1. 内建多标签和多终端分屏&lt;a class=&#34;headerlink&#34; href=&#34;#11-内建多标签和多终端分屏&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;MobaXterm 内置多标签页、横向纵向 2 分屏和田字形 4 分屏，用于一个窗口内管理多个连接。管理多台服务器不必开多个窗口。    &lt;br /&gt;
&lt;img alt=&#34;mobaxterm-split-mode&#34; src=&#34;https://kg.weiyan.cc/2024/08/mobaxterm-split-mode.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;12-内建-sftp-文件传输&#34;&gt;1.2. 内建 SFTP 文件传输&lt;a class=&#34;headerlink&#34; href=&#34;#12-内建-sftp-文件传输&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;如果用 SSH 连接远程主机，则左侧就会自动启动 SFTP 连接，列出服务器上的文件列表，无需任何配置。可以直接上传下载，更方便的是，还可以让文件列表的当前目录，直接跟随终端当前目录同步切换！        &lt;br /&gt;
&lt;img alt=&#34;mobaxterm-sftp&#34; src=&#34;https://kg.weiyan.cc/2024/08/mobaxterm-sftp.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;13-内建-x-server&#34;&gt;1.3. 内建 X server&lt;a class=&#34;headerlink&#34; href=&#34;#13-内建-x-server&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;MobaXterm 内建了一个 X server，可以直接执行远程端的 X 窗口程序。也是随着 SSH 连接自动发挥作用，无需任何配置。    &lt;br /&gt;
&lt;img alt=&#34;mobaxterm-x-server&#34; src=&#34;https://kg.weiyan.cc/2024/08/mobaxterm-x-server.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;14-支持远程桌面&#34;&gt;1.4. 支持远程桌面&lt;a class=&#34;headerlink&#34; href=&#34;#14-支持远程桌面&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;直接支持 VNC/RDP/Xdmcp 远程桌面,如果真的需要完整的远程桌面了，也无需多种客户端，一个软件即可对付所有的需求。Windows 服务器管理员特别推荐。    &lt;br /&gt;
&lt;img alt=&#34;mobaxterm-vnc&#34; src=&#34;https://kg.weiyan.cc/2024/08/mobaxterm-vnc.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;15-更加友好的串口连接设置&#34;&gt;1.5. 更加友好的串口连接设置&lt;a class=&#34;headerlink&#34; href=&#34;#15-更加友好的串口连接设置&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;MobaXterm 不仅支持串口连接，并且直接提供下拉框选择串口号和波特率，选择串口号时还会自动显示串口设备的名称。这一点对于开源硬件玩家是相当幸福的。          &lt;br /&gt;
&lt;img alt=&#34;mobaxterm-serial&#34; src=&#34;https://kg.weiyan.cc/2024/08/mobaxterm-serial.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;2-使用介绍&#34;&gt;2. 使用介绍&lt;a class=&#34;headerlink&#34; href=&#34;#2-使用介绍&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&#34;21-下载&#34;&gt;2.1. 下载&lt;a class=&#34;headerlink&#34; href=&#34;#21-下载&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;我们使用免费开源版的便携版为例。(&lt;a href=&#34;http://mobaxterm.mobatek.net/download-home-edition.html&#34;&gt;http://mobaxterm.mobatek.net/download-home-edition.html&lt;/a&gt;)。下载位置如下图所示。    &lt;br /&gt;
&lt;img alt=&#34;mobaxterm-home-edition&#34; src=&#34;https://kg.weiyan.cc/2024/08/mobaxterm-home-edition.png&#34; /&gt; &lt;/p&gt;
&lt;p&gt;下载后解压文件，运行 MobaXterm_Personal_xx.xx.exe 即可。第一次打开会自解压，会比较慢，后续就正常了。&lt;/p&gt;
&lt;h3 id=&#34;22-ssh-连接&#34;&gt;2.2. SSH 连接&lt;a class=&#34;headerlink&#34; href=&#34;#22-ssh-连接&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;打开软件后，点击左上角的 Session（会话控制），在弹出的窗口中选择 SSH：    &lt;br /&gt;
&lt;img alt=&#34;mobaxterm-session-ssh&#34; src=&#34;https://kg.weiyan.cc/2024/08/mobaxterm-session-ssh.png&#34; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在新的窗口输入账号和密码，即可登陆主机。此时界面主要分两块，左边的是主机的文件，右边是终端。勾选左下角的 &amp;ldquo;Follow terminal folder&amp;rdquo; 可以让两个的工作路径保持一致。    &lt;br /&gt;
&lt;img alt=&#34;mobaxterm-follow-terminal-folder&#34; src=&#34;https://kg.weiyan.cc/2024/08/mobaxterm-follow-terminal-folder.png&#34; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;3-常用设置&#34;&gt;3. 常用设置&lt;a class=&#34;headerlink&#34; href=&#34;#3-常用设置&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;注意任何配置修改后都需要重启下 MobaXterm，否则不会生效。&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id=&#34;31-取消自动关闭连接&#34;&gt;3.1. 取消自动关闭连接&lt;a class=&#34;headerlink&#34; href=&#34;#31-取消自动关闭连接&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;MobaXterm 使用 ssh 直接连接远程主机，或者通过跳板机登陆远程服务器可能会出现一段时候不操作就会自动关闭连接。要解决这个过一会就断开连接的问题，我们需要在勾选 Setting 下的 SSH Keepalive 选项。    &lt;br /&gt;
&lt;img alt=&#34;mobaxterm-ssh-keepalive&#34; src=&#34;https://kg.weiyan.cc/2024/08/mobaxterm-ssh-keepalive.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;32-保存临时文件&#34;&gt;3.2. 保存临时文件&lt;a class=&#34;headerlink&#34; href=&#34;#32-保存临时文件&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;MobaXterm 会产生临时文件，但是临时文件随时可能被删除或丢失，建议指定文件夹作为 &lt;code&gt;/home&lt;/code&gt; 和 &lt;code&gt;/root&lt;/code&gt; 目录，以免出现异常。打开 Settings – Configuration – Genernal 进行设置，如下截图。    &lt;br /&gt;
&lt;img alt=&#34;mobaxterm-genernal&#34; src=&#34;https://kg.weiyan.cc/2024/08/mobaxterm-genernal.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;33-使用-windows-环境变量&#34;&gt;3.3. 使用 Windows 环境变量&lt;a class=&#34;headerlink&#34; href=&#34;#33-使用-windows-环境变量&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;在 MobaXterm 23.x 及以上版本中发现 &lt;code&gt;Use Windows PATH environment&lt;/code&gt; 在设置中已经找不到，MabaXterm 的 &lt;a href=&#34;https://mobaxterm.mobatek.net/download-home-edition.html&#34;&gt;Changelog&lt;/a&gt; 中也没发现有什么移除之类的说明。&lt;/p&gt;
&lt;p&gt;如果您 Windows 下安装了 node、Python 等环境，发现相关命令无法在 MobaXterm 使用，可通过打开 &lt;strong&gt;Settings&lt;/strong&gt; – &lt;strong&gt;Configuration&lt;/strong&gt; – &lt;strong&gt;Terminal&lt;/strong&gt; – &lt;strong&gt;使用 Windows 环境变量&lt;/strong&gt;，如下截图进行设置。    &lt;br /&gt;
&lt;img alt=&#34;mobaxterm-win-path-env&#34; src=&#34;https://kg.weiyan.cc/2024/08/mobaxterm-win-path-env.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;34-右键快速复制粘贴&#34;&gt;3.4. 右键快速复制粘贴&lt;a class=&#34;headerlink&#34; href=&#34;#34-右键快速复制粘贴&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;如果需要鼠标右键快速复制粘贴，把 &amp;ldquo;&lt;strong&gt;Paste using right-click&lt;/strong&gt;&amp;rdquo; 勾选上，然后重启 MobaXterm。    &lt;br /&gt;
&lt;img alt=&#34;mobaxterm-right-click&#34; src=&#34;https://kg.weiyan.cc/2024/08/mobaxterm-right-click.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;除了 ssh/telnet/rsh 等多种远程会话，支持录制和回放键盘宏，支持多终端分屏显示等功能以外，MobaXterm 还支持 xdmcp/vnc 访问远程桌面以及本地 bash 或者 cmd 等诸多功能，无法一一介绍，欢迎大家用自行去探索研究。&lt;/p&gt;
&lt;h3 id=&#34;35-设置-terminal-窗口大小&#34;&gt;3.5 设置 Terminal 窗口大小&lt;a class=&#34;headerlink&#34; href=&#34;#35-设置-terminal-窗口大小&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;img alt=&#34;mobaxterm-terminal-size&#34; src=&#34;https://kg.weiyan.cc/2024/08/mobaxterm-terminal-size.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;35-ssh-browser-消失不显示&#34;&gt;3.5 SSH browser 消失不显示&lt;a class=&#34;headerlink&#34; href=&#34;#35-ssh-browser-消失不显示&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;某些用户可能在 MobaXTerm 中看不到文件浏览器窗格。这可能是也可能不是由于 Windows 防火墙提示用户允许/拒绝 MobaXTerm 访问公共和/或专用网络时所采取的操作所致。&lt;/p&gt;
&lt;p&gt;解决此问题的方法是在创建/启动 MobaXTerm 会话时要求 MobaXTerm 使用 SCP 文件传输协议而不是 SFTP 协议（参考 &lt;a href=&#34;https://github.com/mikecroucher/Intro_to_HPC/issues/2&#34;&gt;mikecroucher/Intro_to_HPC#2&lt;/a&gt;）：    &lt;br /&gt;
&lt;img alt=&#34;mobaxterm-ssh-browser-type&#34; src=&#34;https://kg.weiyan.cc/2024/08/mobaxterm-ssh-browser-type.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;4-参考资料&#34;&gt;4. 参考资料&lt;a class=&#34;headerlink&#34; href=&#34;#4-参考资料&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://www.isharebest.com/mobaxterm.htm&#34;&gt;Windows 全能终端神器——MobaXterm&lt;/a&gt;，爱上分享，博客&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://www.dabiaoseo.com/212.html&#34;&gt;Windows 终端神器 MobaXterm &amp;amp; 常用设置&lt;/a&gt;，Xiaoz，2017.12.28&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/IDE/2019-07-01-mobaxterm/</link>
      <pubDate>Mon, 01 Jul 2019 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/IDE/2019-07-01-mobaxterm/</guid>
      
    </item>
    
    <item>
      <title>VSCode 中利用 Remote SSH 连接远程服务器</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;h1 id=&#34;引言&#34;&gt;引言&lt;a class=&#34;headerlink&#34; href=&#34;#引言&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2019-07-01&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2019-07-01T00:00:00&#39;&gt;2019-07-01&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-08-13&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-08-13T17:58:56&#39;&gt;2021-08-13&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;北京时间 2019 年 5 月 3 日，在 PyCon 2019 大会上，&lt;a href=&#34;https://zhuanlan.zhihu.com/p/64505333&#34;&gt;微软发布了 VS Code Remote&lt;/a&gt;。这是一个用来实现远程开发的功能插件，对于许多使用 Windows 进行开发，但是需要将程序部署在服务器的用户来说，提供了非常大的便利。这些插件包括了：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Remote - SSH&lt;/li&gt;
&lt;li&gt;Remote - Containers&lt;/li&gt;
&lt;li&gt;Remote - WSL&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;第一个是基于 SSH 的远程连接主机，第二个用于连接容器，第三个用于连接 WSL，也就是 Linux 子系统。在 &lt;strong&gt;Remote - SSH&lt;/strong&gt;  插件的介绍中这样写到：
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FtTZMviUvX0VC5fzt-QqNSPKopWN.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;简单翻译一下就是：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Remote - SSH 扩展允许您使用任何带有 SSH 服务器的远程计算机作为开发环境。由于几乎每个桌面和服务器操作系统都有可配置的 SSH 服务器，因此该扩展可以在各种情况下大大简化开发。
您可以：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在部署的同一操作系统上进行开发，或者使用比本地计算机更快更专业的硬件。&lt;/li&gt;
&lt;li&gt;在不同的远程开发环境之间快速切换，安全地进行更新，而不必担心影响本地计算机。&lt;/li&gt;
&lt;li&gt;从多台计算机或位置访问现有开发环境。&lt;/li&gt;
&lt;li&gt;调试运行在其他位置（如客户站点或云中）的应用程序。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;由于扩展程序直接在远程计算机上运行命令和其他扩展，因此本地计算机上不需要源代码即可获得这些好处。您可以打开远程计算机上的任何文件夹并使用它，就像文件夹在您自己的计算机上一样。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;在本文中，将对于基本的 &lt;strong&gt;Remote - SSH&lt;/strong&gt;  的使用简单地进行介绍。&lt;/p&gt;
&lt;h1 id=&#34;安装-remote-ssh-相关插件&#34;&gt;安装 **Remote-SSH **相关插件&lt;a class=&#34;headerlink&#34; href=&#34;#安装-remote-ssh-相关插件&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;截止 2019.06.26，&lt;strong&gt;Remote - SSH&lt;/strong&gt;（预览版）已经可以在 VSCode 稳定版本中下载和安装使用了。安装步骤如下。&lt;/p&gt;
&lt;p&gt;打开安装好的 VSCode，然后在最左边的侧边栏中找到 Extensions 项，即扩展选项卡，并进入，然后再搜索窗口中输入：Remote - SSH（或者 ssh 关键字）。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FioQyhREZ8JkJzjJiLjTpIi9fKvU.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;找到所对应的插件之后，点击绿色的 &amp;ldquo;&lt;strong&gt;Install(安装)&lt;/strong&gt;&amp;rdquo; 即可开始安装。稍等片刻，在安装完成之后，在侧边栏中会出现一个 &lt;strong&gt;Remote-SSh&lt;/strong&gt; 选项卡，即表示安装成功。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fj_kb_8AZReCeSAS8ruXXBANR2j2.png&#34; /&gt;&lt;/p&gt;
&lt;h1 id=&#34;利用-remote-ssh-连接服务器&#34;&gt;利用 Remote-SSH 连接服务器&lt;a class=&#34;headerlink&#34; href=&#34;#利用-remote-ssh-连接服务器&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;在安装完成之后，点击左侧的 Remote-SSH 选项卡，再将鼠标移向 CONNECTIONS 栏，点击出现的 configure：
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FiRbwerTS7xdAozjJGX3fkfecDEB.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;在 Select SSH configuration file to edit 中，选择第一项即可，开始对里面的内容进行编辑：
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FpZQA0eMxzdA7LIt7a0GlJGRf7rK.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FqG5NrP6UsBrRnSXq6RqO2vtZQDs.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;在上图中为初始情况下的 .ssh 文件夹下的 config 文件中的内容，需要将其修改为所需要的内容，修改之后不要忘记保存（若 SSH 端口不是默认的 22，则还需加一行 Port）。&lt;/p&gt;
&lt;p&gt;**注意：**VSCode 的这个远程连接的插件是基于 OpenSSH 的，因此在本机需要装有 OpenSSH 的客户端，在服务器上也要装有 OpenSSH 的服务端，并且密钥文件已经放置在服务器中，即需要在 &lt;code&gt;cmd&lt;/code&gt;  中可以直接通过命令 &lt;code&gt;ssh IP_ADDRESS -l USERNAME -p PORT&lt;/code&gt; （其中 IP_ADDRESS、USERNAME、PORT 要修改为所需变量）连接的情况下，才可以通过这个插件连接到服务器。如果前面的这些配置还没有完成，VSCode 会报出以下错误：
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FmlRuiNu9SCeBGZfVb5rN5w7MoQb.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;1-安装-openssh-客户端&#34;&gt;1. 安装  OpenSSH 客户端&lt;a class=&#34;headerlink&#34; href=&#34;#1-安装-openssh-客户端&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;各个平台下 OpenSSH 客户端的安装参考 VSCode 官方文档《&lt;a href=&#34;https://code.visualstudio.com/docs/remote/troubleshooting#_installing-a-supported-ssh-client&#34;&gt;Installing a supported SSH client&lt;/a&gt;》一节的内容。这里以 windows 7 为例，官方推荐：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Install &lt;a href=&#34;https://git-scm.com/download/win&#34;&gt;Git for Windows&lt;/a&gt; and select the &lt;strong&gt;Use Git and optional Unix tools from the Command Prompt&lt;/strong&gt; option or manually add &lt;code&gt;C:\Program Files\Git\usr\bin&lt;/code&gt; into your PATH.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;首先，安装  &lt;a href=&#34;https://git-scm.com/download/win&#34;&gt;Git for Windows&lt;/a&gt;，安装过程中注意勾选 &amp;ldquo;&lt;strong&gt;Use Git and optional Unix tools from the Command Prompt&lt;/strong&gt;&amp;ldquo;。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FsJA94LK5FeLej-9HhwWuH0kM9R2.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;其次，git 安装完后， &lt;code&gt;bash&lt;/code&gt; 、 &lt;code&gt;ssh&lt;/code&gt; 、 &lt;code&gt;ssh-keygen&lt;/code&gt;  等一些常用的 linux 命令工具都已经安装到  &lt;code&gt;C:\Program Files\Git\usr\bin&lt;/code&gt;  下，我们需要把这个目录添加到 windows 的系统环境变量中（我的电脑 → 属性 → 高级系统设置 → 环境变量 →path）。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FvrHE6rQNoX0ApslYEI05BZQJ6XB.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;第三，在 DOC 中测试 ssh 连接到远程服务器成功！
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FkRk0YhX6ckkcSYOlZQYTGofJGVa.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;2-ssh-key-配置&#34;&gt;2. SSH KEY 配置&lt;a class=&#34;headerlink&#34; href=&#34;#2-ssh-key-配置&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;创建本地机器的 ssh 公钥&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;ssh-keygen&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;-t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;rsa&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;-b&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;4096&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FirkYn9u8CbaQPU8MRRwf5T5LTHg.png&#34; /&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;把本地公钥拷贝至远程服务器，windows 下执行命令如下：&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nb&#34;&gt;SET &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;REMOTEHOST&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;your-user-name-on-host&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;@host&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;-fqdn&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-or&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;-ip-goes-here&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;scp&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;%&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;USERPROFILE&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;%\.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ssh&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;\&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;id_rsa&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pub&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;%&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;REMOTEHOST&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;%:~/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tmp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pub&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;ssh&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;%&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;REMOTEHOST&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;%&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;mkdir -p ~/.ssh &amp;amp;&amp;amp; chmod 700 ~/.ssh &amp;amp;&amp;amp; cat ~/tmp.pub &amp;gt;&amp;gt; ~/.ssh/authorized_keys &amp;amp;&amp;amp; chmod 600 ~/.ssh/authorized_keys &amp;amp;&amp;amp; rm -f ~/tmp.pub&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;配置完成后，在 DOC 中再次执行  &lt;code&gt;ssh IP_ADDRESS -l USERNAME -p PORT&lt;/code&gt;  命令，如果可以免密码登陆远程的服务器，说明配置成功。&lt;/li&gt;
&lt;li&gt;更多详细的 ssh key 设置，请参考官方文档：《&lt;a href=&#34;https://code.visualstudio.com/docs/remote/troubleshooting&#34;&gt;Remote Development Tips and Tricks&lt;/a&gt;》。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;3-使用-remote-ssh-连接远端服务器&#34;&gt;3. 使用 Remote-SSH 连接远端服务器&lt;a class=&#34;headerlink&#34; href=&#34;#3-使用-remote-ssh-连接远端服务器&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;回到 VSCode 中  Remote-SSH 选项卡，在  Select SSH configuration file to edit 中将 config 文件修改完成之后，&amp;rdquo;Ctrl+s&amp;rdquo; 保存可以看到，在下面出现了我们所配置的远程连接，这里显示的是我设置的名称：&amp;rdquo;&lt;strong&gt;GalaxyServer&lt;/strong&gt;&amp;ldquo;，即 Galaxy 在线生信分析平台的服务器，然后点击 &amp;ldquo;&lt;strong&gt;GalaxyServer&lt;/strong&gt;&amp;rdquo; 右侧的连接按钮(图中箭头所指），便会弹出一个新的窗口，在新的窗口中选择打开文件夹，便可以看到，这个窗口中的打开的便是服务器中的文件了，接下来便可以访问服务器中的文件并远程修改了。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FonOgUdX0QYBvzv_uTs3556jXekf.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FvNza0Vgksbe6XLmG9YVZd-hYnKw.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;更多详细的 Remote SSH 的说明与使用配置，参考官方文档：《&lt;a href=&#34;https://code.visualstudio.com/docs/remote/ssh&#34;&gt;Remote Development using SSH&lt;/a&gt;》。&lt;/p&gt;
&lt;h2 id=&#34;4-在-remote-ssh-中使用终端&#34;&gt;4. 在 Remote-SSH 中使用终端&lt;a class=&#34;headerlink&#34; href=&#34;#4-在-remote-ssh-中使用终端&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Remote SSH 还有个强大的功能，就是在添加了工作区文件夹后，可以直接在 VSCode 上使用终端，执行远程 Linux 的命令：
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FjEZ5Awz4zDccUlJo02zfvbLTdXV.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;以上就是 Visual Studio Code 上关于 Remote SSH 插件的一些简单安装、配置和使用心得体验，喜欢使用 VSCode 的童鞋可以去尝试一下。&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/IDE/2019-07-01-vscode-remote-ssh/</link>
      <pubDate>Mon, 01 Jul 2019 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/IDE/2019-07-01-vscode-remote-ssh/</guid>
      
    </item>
    
    <item>
      <title>基于 Web 的 Linux 终端 WebTerminal</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2019-07-01&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2019-07-01T00:00:00&#39;&gt;2019-07-01&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-06-25&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-06-25T10:39:03&#39;&gt;2021-06-25&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;有时候用公共电脑，或者在没有安装 putty、xshell 之类的终端的电脑上访问或展示服务器上的一些资料数据，甚至是在运维平台开发中想要嵌入 WebTerminal 功能，于是找到了这个项目 —— 基于 Web 的 Linux 终端 webSSH。&lt;/p&gt;
&lt;p&gt;webSSH 是 Python 语言写的一个基于 tornado 和 paramiko 包的 web 应用，它可以作为一个 ssh 终端连接你的服务器。webSSH 主要特点：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;支持 SSH 密码认证，包括空密码；&lt;/li&gt;
&lt;li&gt;支持 SSH 公钥认证，包括 DSA RSA ECDSA Ed25519 keys；&lt;/li&gt;
&lt;li&gt;支持 Encrypted keys；&lt;/li&gt;
&lt;li&gt;支持全屏终端，且终端窗口可调整大小；&lt;/li&gt;
&lt;li&gt;自动检测系统默认编码；&lt;/li&gt;
&lt;li&gt;适用于 Python 2.7-3.6。&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;1-安装&#34;&gt;1. 安装&lt;a class=&#34;headerlink&#34; href=&#34;#1-安装&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;pip&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;webssh
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h1 id=&#34;2-启动&#34;&gt;2. 启动&lt;a class=&#34;headerlink&#34; href=&#34;#2-启动&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;webssh 安装完成，我们可以通过 wssh 命令进行启动&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;wssh
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;I&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;180627&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;11&lt;/span&gt;:14:55&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;settings:67&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;WarningPolicy
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;I&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;180627&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;11&lt;/span&gt;:14:55&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;main:33&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Listening&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;on&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;127&lt;/span&gt;.0.0.1:8888
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;wssh 默认启用 localhost 的 8888 端口开启服务，我们也可以通过监听 0.0.0.0 来使用本地的 iP 并指定服务端口&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;wssh&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--address&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;0.0.0.0&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--port&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;8000&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;I&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;180627&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;11&lt;/span&gt;:07:05&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;settings:67&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;WarningPolicy
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;I&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;180627&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;11&lt;/span&gt;:07:05&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;main:33&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Listening&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;on&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;.0.0.0:8000
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;这时候，在浏览器打开 &lt;a href=&#34;http://ip:8000，输入登陆信息，登陆&#34;&gt;http://ip:8000，输入登陆信息，登陆&lt;/a&gt; web 终端：
&lt;img alt=&#34;webt.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FsqW5kM2kU_rElrYV0WCyo0EFp9h.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;webt-2.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FlO0DMXBgSzrdAddMrEebbNUrw-p.png&#34; /&gt;&lt;/p&gt;
&lt;h1 id=&#34;3-参数&#34;&gt;3. 参数&lt;a class=&#34;headerlink&#34; href=&#34;#3-参数&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;wssh 的一些主要参数如下&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;#配置监听地址与服务端口&lt;/span&gt;
wssh&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--address&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;0.0.0.0&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--port&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;8000&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;#配置缺少主机密钥策略&lt;/span&gt;
wssh&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--policy&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;reject

&lt;span class=&#34;c1&#34;&gt;#配置日志级别&lt;/span&gt;
wssh&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--logging&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;debug

&lt;span class=&#34;c1&#34;&gt;#配置保存日志到指定文件&lt;/span&gt;
wssh&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--log-file-prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;main.log

&lt;span class=&#34;c1&#34;&gt;#更多参数说明&lt;/span&gt;
wssh&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--help
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h1 id=&#34;4-nginx&#34;&gt;4. Nginx&lt;a class=&#34;headerlink&#34; href=&#34;#4-nginx&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;wssh 可以使用 Nginx 作为后台代理，以及启用 SSL 访问，参考配置文件&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;vg&#34;&gt;location&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;proxy_pass&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nl&#34;&gt;http:&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;//&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;127.0.0.1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;il&#34;&gt;8888&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;proxy_http_version&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;1.1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;proxy_read_timeout&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;il&#34;&gt;300&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;proxy_set_header&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;Upgrade&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;http_upgrade&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;proxy_set_header&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;Connection&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;upgrade&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;proxy_set_header&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;Host&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;http_host&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;proxy_set_header&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;X&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;Real&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;IP&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;remote_addr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;proxy_set_header&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;X&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;Real&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;PORT&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;vg&#34;&gt;remote_port&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;使用 Nginx 作为后台代理，并启用 SSL 访问，可以避免你的 ssh 证书被暴露。此外，你的浏览器和 Web 服务器之间的通信将使用安全的 Websockets 进行加密。&lt;/li&gt;
&lt;li&gt;尝试使用 reject policy 作为缺少主机密钥时的策略，以及经过验证的 known_hosts，可以防止中间人的攻击。其思路是，webssh 会依次检查系统主机密钥文件（&amp;rdquo;\~/.ssh/known_hosts&amp;rdquo;）和应用程序主机密钥文件（&amp;rdquo;./known_hosts&amp;rdquo;），如果 ssh 服务器的主机名（hostname）没有被发现或者密钥不匹配，连接将被中止。&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;5-参考资料&#34;&gt;5. 参考资料&lt;a class=&#34;headerlink&#34; href=&#34;#5-参考资料&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.oschina.net/p/webterminal&#34;&gt;https://www.oschina.net/p/webterminal&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/IDE/2019-07-01-webterminal-for-linux/</link>
      <pubDate>Mon, 01 Jul 2019 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/IDE/2019-07-01-webterminal-for-linux/</guid>
      
    </item>
    
    <item>
      <title>LaTeX 安装教程</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2019-07-01&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2019-07-01T00:00:00&#39;&gt;2019-07-01&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2023-04-26&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2023-04-26T15:07:23&#39;&gt;2023-04-26&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id=&#34;一背景&#34;&gt;一、背景&lt;a class=&#34;headerlink&#34; href=&#34;#一背景&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;前两天在自己的 Jupyter 服务器上想要把 notebook(.ipynb) 导出为 pdf 时发现 xelatex 没有安装：&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fp9hxWhI_H98Nn23qhXB_PF-t6FC.png&#34; /&gt;
500 : Internal Server Error 如下：
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;nbconvert&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;failed:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;xelatex&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;found&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;on&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;PATH,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;you&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;have&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;installed&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;xelatex&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;you&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;may&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;need&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;do&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;so.&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Find&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;further&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;instructions&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;at&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://nbconvert.readthedocs.io/en/latest/install.html#installing-tex.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;另外一点就是，对于经常做生信分析的童鞋而言，LaTeX，或者 Html+wkhtmltopdf 也许是当前生信报告生成与交付的两种主要解决方案（如果还有其他更好的，欢迎留言告诉我）。因此对于生信分析而言，LaTeX 也许并不陌生，但真正熟悉和掌握它的人却寥寥无几。&lt;/p&gt;
&lt;h2 id=&#34;二概念&#34;&gt;二、概念&lt;a class=&#34;headerlink&#34; href=&#34;#二概念&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;TEX 是诞生于 20 世纪 70 年代末到 80 年代初的一款计算机排版软件，而且是命令行格式的，用来排版高质量的书籍，特别是包含有数学公式的书籍。TEX 以追求高质量为目标，很早就实现了矢量描述的计算机字体、细致的分页断行算法和数学排版功能，因其数学排版能力得到了学术界的广泛使用，也启发了后来复杂的商业计算机排版软件。&lt;/p&gt;
&lt;p&gt;LATEX 开始于 20 世纪 80 年代初，是 Leslie Lamport 博士为了编写自己的一部书籍而设计的。LATEX 是对 TEX 的封装和拓展，实际上就是用 TEX 语言编写的一组宏代码，拥有比原来 TEX 格式（Plain TEX）更为规范的命令和一整套预定义的格式，隐藏了不少排版方面的细节，可以让完全不懂排版理论的学者们也可以比较容易地将书籍和文稿排版出来。&lt;/p&gt;
&lt;p&gt;TEXLive 是 Tex 的一种比较流行的发行版，它是由 TUG（TEX User Group，TEX 用户组）发布的，可以在类 UNIX/Linux、Mac OS X 和 Windows 等不同的操作系统平台下安装使用，并且提供相当可靠的工作环境。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align: center;&#34;&gt;引擎&lt;/th&gt;
&lt;th&gt;(Knuth)TeX&lt;/th&gt;
&lt;th&gt;真正的(原始的)TeX&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align: center;&#34;&gt;&lt;/td&gt;
&lt;td&gt;ε-TeX&lt;/td&gt;
&lt;td&gt;相对于原始的 TeX 它提供了一种扩展模式&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align: center;&#34;&gt;&lt;/td&gt;
&lt;td&gt;pdfTeX&lt;/td&gt;
&lt;td&gt;它从 tex 文件不通过 dvi 文件直接生成 pdf 文件（开发者已经转向 LuaTeX）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align: center;&#34;&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;XeTeX&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;相对于原始的 TeX，主要增加了 Unicode 和 OpenType 的支持&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align: center;&#34;&gt;&lt;/td&gt;
&lt;td&gt;LuaTeX&lt;/td&gt;
&lt;td&gt;它使用 Lua 作为扩展语言，对于 LaTeX 支持尚不完善？&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align: center;&#34;&gt;&lt;/td&gt;
&lt;td&gt;......&lt;/td&gt;
&lt;td&gt;......&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align: center;&#34;&gt;宏集&lt;/td&gt;
&lt;td&gt;plain TeX&lt;/td&gt;
&lt;td&gt;最古老的 TeX 宏集，提供了一些最基本的命令&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align: center;&#34;&gt;&lt;/td&gt;
&lt;td&gt;AMSTeX&lt;/td&gt;
&lt;td&gt;是美国数学会提供的一个 TeX 宏集，它添加了许多数学符号和数学字体&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align: center;&#34;&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;LaTeX&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;相对于 PlainTeX，它使得科技文档的排版更加直观和方便&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align: center;&#34;&gt;&lt;/td&gt;
&lt;td&gt;ConTeXt&lt;/td&gt;
&lt;td&gt;和 LaTeX 相比，它更加灵活和自由。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align: center;&#34;&gt;&lt;/td&gt;
&lt;td&gt;ctex&lt;/td&gt;
&lt;td&gt;小写的 ctex 是可以很好支持中文的宏包。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align: center;&#34;&gt;&lt;/td&gt;
&lt;td&gt;......&lt;/td&gt;
&lt;td&gt;......&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align: center;&#34;&gt;发行版&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;TeX Live&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;国际 TeX 用户组织 TUG 开发，支持不同的操作系统。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align: center;&#34;&gt;&lt;/td&gt;
&lt;td&gt;MiKTeX&lt;/td&gt;
&lt;td&gt;Windows 下广泛使用的一个 TeX 发行版。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align: center;&#34;&gt;&lt;/td&gt;
&lt;td&gt;ConTeXt Minimals&lt;/td&gt;
&lt;td&gt;它包含了最新版本的 ConTeXt。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align: center;&#34;&gt;&lt;/td&gt;
&lt;td&gt;teTeX&lt;/td&gt;
&lt;td&gt;一个 Unix 下的 TeX 发行版，现在已经停止更新且并入 TeXLive。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align: center;&#34;&gt;&lt;/td&gt;
&lt;td&gt;fpTeX&lt;/td&gt;
&lt;td&gt;一个 Windows 的 TeX 发行版，已不再更新。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align: center;&#34;&gt;&lt;/td&gt;
&lt;td&gt;CTeX&lt;/td&gt;
&lt;td&gt;&lt;a href=&#34;http://www.ctex.org/CTeX&#34;&gt;CTeX&lt;/a&gt;  是基于 Windows 下的  &lt;a href=&#34;http://www.ctex.org/MiKTeX&#34;&gt;MiKTeX&lt;/a&gt;  系统的一个中文套装（ctex 是可以很好支持中文的宏包）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align: center;&#34;&gt;&lt;/td&gt;
&lt;td&gt;......&lt;/td&gt;
&lt;td&gt;......&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;a href=&#34;http://www.ctex.org/CTeX&#34;&gt;CTeX&lt;/a&gt;  中文套装是基于 Windows 下的  &lt;a href=&#34;http://www.ctex.org/MiKTeX&#34;&gt;MiKTeX&lt;/a&gt;  系统，集成了编辑器  &lt;a href=&#34;http://www.ctex.org/WinEdt&#34;&gt;WinEdt&lt;/a&gt;  和  &lt;a href=&#34;http://www.ctex.org/PostScript/edit&#34;&gt;PostScript&lt;/a&gt;  处理软件 Ghostscript 和 GSview 等主要工具。 &lt;a href=&#34;http://www.ctex.org/CTeX&#34;&gt;CTeX&lt;/a&gt;  中文套装在  &lt;a href=&#34;http://www.ctex.org/MiKTeX&#34;&gt;MiKTeX&lt;/a&gt;  的基础上增加了对中文的完整支持。 &lt;a href=&#34;http://www.ctex.org/CTeX&#34;&gt;CTeX&lt;/a&gt;  中文套装支持 CJK, xeCJK, CCT, TY 等多种中文  &lt;a href=&#34;http://www.ctex.org/TeX&#34;&gt;TeX&lt;/a&gt;  处理方式。&lt;/p&gt;
&lt;h2 id=&#34;三安装&#34;&gt;三、安装&lt;a class=&#34;headerlink&#34; href=&#34;#三安装&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;TEXLive 常用有两种安装方式：从 TEXLive 光盘进行安装和从网络在线安装。这里我们以 TexLive 2018 版本为例介绍第二种安装方法。&lt;/p&gt;
&lt;h3 id=&#34;1-镜像文件下载&#34;&gt;1. 镜像文件下载&lt;a class=&#34;headerlink&#34; href=&#34;#1-镜像文件下载&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;TexLive 历史版本下载地址：&lt;a href=&#34;https://www.tug.org/historic/&#34;&gt;https://www.tug.org/historic/&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;TexLive 的镜像文件下载推荐使用 &lt;a href=&#34;https://mirrors.tuna.tsinghua.edu.cn/CTAN/systems/texlive/Images/&#34;&gt;清华大学开源软件镜像站&lt;/a&gt;，国内下载速度极快。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;最新版本：&lt;a href=&#34;https://mirrors.tuna.tsinghua.edu.cn/CTAN/systems/texlive/Images/&#34;&gt;https://mirrors.tuna.tsinghua.edu.cn/CTAN/systems/texlive/Images/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;历史版本：&lt;a href=&#34;https://mirrors.tuna.tsinghua.edu.cn/tex-historic-archive/systems/texlive/&#34;&gt;https://mirrors.tuna.tsinghua.edu.cn/tex-historic-archive/systems/texlive/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;2-镜像挂载&#34;&gt;2. 镜像挂载&lt;a class=&#34;headerlink&#34; href=&#34;#2-镜像挂载&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;TEXLive 镜像文件下载完之后，推荐使用 root 用户进行安装。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sudo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mkdir&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/mnt/textlive
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sudo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mount&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-o&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;loop&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;texlive2018.iso&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/mnt/textlive
mount:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/dev/loop0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;is&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;write-protected,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mounting&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;read-only
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;注意：
使用 mount 挂载出现以上提示 &lt;code&gt;mount: /dev/loop0 is write-protected, mounting read-only&lt;/code&gt;。这是因为 mount 命令默认以读写方式挂载一个设备，而光盘是只读的，所以在挂载光盘这个块设备时会出现上述从读写方式切换为以只读方式挂载光盘的提示。我们可以忽视不必管它。&lt;/p&gt;
&lt;p&gt;如果不想看到这个提示，就请在 mount 命令后面添加参数,指定以只读方式来挂载设备。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sudo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mount&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-o&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;loop&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;texlive2018.iso&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/mnt/textlive&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-o&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ro
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;3-镜像安装&#34;&gt;3. 镜像安装&lt;a class=&#34;headerlink&#34; href=&#34;#3-镜像安装&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;TEXLive 镜像的安装有两种方法：一是可以启动安装程序的图形化界面进行安装配置；二是直接在命令行中进行。这里主要介绍一下命令行下的安装。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/mnt/textlive
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sudo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;./install-tl
Loading&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;./tlpkg/texlive.tlpdb
Installing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;TeX&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Live&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2018&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;.&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;verified&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
Platform:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;x86_64-linux&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;GNU/Linux on x86_64&amp;#39;&lt;/span&gt;
Distribution:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;inst&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;compressed&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
Directory&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;temporary&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;files:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/tmp/j3dA84tbet
&lt;span class=&#34;o&#34;&gt;======================&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;TeX&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Live&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;installation&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;procedure&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;lt;&lt;span class=&#34;o&#34;&gt;=====================&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;======&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;Letters/digits&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;indicate&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&amp;lt;&lt;span class=&#34;o&#34;&gt;=======&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;======&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;menu&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;items&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;actions&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;or&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;customizations&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&amp;lt;&lt;span class=&#34;o&#34;&gt;=======&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Detected&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;platform:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;GNU/Linux&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;on&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;x86_64
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;binary&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;platforms:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;out&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;8&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;installation&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;scheme:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;scheme-full
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;installation&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;collections:
&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;40&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;collections&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;out&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;41&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;disk&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;space&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;required:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;5381&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;MB
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;directories:
&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;TEXDIR&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;main&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;TeX&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;directory&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;:
&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;/usr/local/texlive/2018
&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;TEXMFLOCAL&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;directory&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;site-wide&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;local&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;files&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;:
&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;/usr/local/texlive/texmf-local
&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;TEXMFSYSVAR&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;directory&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;variable&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;and&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;automatically&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;generated&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;data&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;:
&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;/usr/local/texlive/2018/texmf-var
&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;TEXMFSYSCONFIG&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;directory&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;local&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;config&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;:
&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;/usr/local/texlive/2018/texmf-config
&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;TEXMFVAR&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;personal&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;directory&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;variable&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;and&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;automatically&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;generated&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;data&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;:
&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;~/.texlive2018/texmf-var
&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;TEXMFCONFIG&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;personal&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;directory&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;local&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;config&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;:
&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;~/.texlive2018/texmf-config
&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;TEXMFHOME&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;directory&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;user-specific&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;files&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;:
&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;~/texmf
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;options:
&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;use&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;letter&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;size&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;instead&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;A4&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;by&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;default
&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;X&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;allow&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;execution&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;restricted&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;list&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;programs&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;via&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\w&lt;/span&gt;rite18
&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;X&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;create&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;all&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;format&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;files
&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;X&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;macro/font&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;doc&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tree
&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;X&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;macro/font&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tree
&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;create&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;symlinks&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;standard&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;directories
&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;X&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;after&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;use&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tlnet&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;on&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;CTAN&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;updates
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;up&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;portable&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;installation
Actions:
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;start&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;installation&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;hard&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;disk
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;save&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;installation&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;profile&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;texlive.profile&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;and&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;exit&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;help&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;quit
Enter&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;command:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;D&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;===============================================================================&lt;/span&gt;
Directories&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;customization:
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;lt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;TEXDIR:&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;/usr/local/texlive/2018
&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;support&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tree:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/local/texlive/2018/texmf-dist
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;lt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;TEXMFLOCAL:&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;/usr/local/texlive/texmf-local
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;lt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;TEXMFSYSVAR:&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;/usr/local/texlive/2018/texmf-var
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;lt;&lt;span class=&#34;m&#34;&gt;4&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;TEXMFSYSCONFIG:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/local/texlive/2018/texmf-config
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;lt;&lt;span class=&#34;m&#34;&gt;5&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;TEXMFVAR:&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;~/.texlive2018/texmf-var
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;lt;&lt;span class=&#34;m&#34;&gt;6&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;TEXMFCONFIG:&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;~/.texlive2018/texmf-config
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;lt;&lt;span class=&#34;m&#34;&gt;7&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;TEXMFHOME:&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;~/texmf
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Note:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;will&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;expand&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$HOME&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;or&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;%USERPROFILE%&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;on&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Windows&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
Actions:
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;main&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;menu
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;quit
Enter&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;command:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
New&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;value&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;TEXDIR&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;/usr/local/texlive/2018&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/local/software/texlive/2018
&lt;span class=&#34;o&#34;&gt;===============================================================================&lt;/span&gt;
Directories&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;customization:
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;lt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;TEXDIR:&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;/usr/local/software/texlive/2018
&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;support&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tree:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/local/software/texlive/2018/texmf-dist
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;lt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;TEXMFLOCAL:&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;/usr/local/software/texlive/texmf-local
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;lt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;TEXMFSYSVAR:&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;/usr/local/software/texlive/2018/texmf-var
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;lt;&lt;span class=&#34;m&#34;&gt;4&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;TEXMFSYSCONFIG:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/local/software/texlive/2018/texmf-config
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;lt;&lt;span class=&#34;m&#34;&gt;5&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;TEXMFVAR:&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;~/.texlive2018/texmf-var
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;lt;&lt;span class=&#34;m&#34;&gt;6&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;TEXMFCONFIG:&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;~/.texlive2018/texmf-config
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;lt;&lt;span class=&#34;m&#34;&gt;7&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;TEXMFHOME:&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;~/texmf
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Note:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;will&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;expand&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$HOME&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;or&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;%USERPROFILE%&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;on&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Windows&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
Actions:
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;main&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;menu
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;quit
Enter&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;command:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;R
......
Actions:
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;start&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;installation&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;hard&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;disk

&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;save&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;installation&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;profile&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;texlive.profile&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;and&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;exit&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;help&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;quit
Enter&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;command:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;I
Installing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/local/software/texlive/2018
Installing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0001&lt;/span&gt;/3590,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;time/total:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;??:??/??:??&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;12many&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;376k&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
Installing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0002&lt;/span&gt;/3590,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;time/total:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;00&lt;/span&gt;:00/00:00&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;2up&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;66k&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
Installing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0003&lt;/span&gt;/3590,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;time/total:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;00&lt;/span&gt;:00/00:00&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Asana-Math&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;482k&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
Installing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0004&lt;/span&gt;/3590,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;time/total:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;00&lt;/span&gt;:00/00:00&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ESIEEcv&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;137k&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
Installing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0005&lt;/span&gt;/3590,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;time/total:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;00&lt;/span&gt;:00/00:00&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FAQ-en&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;4971k&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
......
finished&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package-specific&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;postactions
Welcome&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;TeX&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Live!
......
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;FAQ-1：Digest::MD5&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Can&lt;span class=&#34;err&#34;&gt;&amp;#39;&lt;/span&gt;t&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;locate&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Digest/MD5.pm&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;@INC&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;@INC&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;contains:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;./tlpkg&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/local/lib64/perl5&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/local/share/perl5&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/lib64/perl5/vendor_perl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/share/perl5/vendor_perl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/lib64/perl5&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/share/perl5&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;.&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;at&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tlpkg/TeXLive/TLCrypto.pm&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;line&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;9&lt;/span&gt;.
BEGIN&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;failed--compilation&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;aborted&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;at&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tlpkg/TeXLive/TLCrypto.pm&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;line&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;9&lt;/span&gt;.
Compilation&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;failed&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;require&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;at&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tlpkg/TeXLive/TLPOBJ.pm&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;line&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;16&lt;/span&gt;.
BEGIN&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;failed--compilation&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;aborted&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;at&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tlpkg/TeXLive/TLPOBJ.pm&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;line&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;16&lt;/span&gt;.
Compilation&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;failed&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;require&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;at&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;./install-tl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;line&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;55&lt;/span&gt;.
BEGIN&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;failed--compilation&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;aborted&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;at&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;./install-tl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;line&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;55&lt;/span&gt;.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;code&gt;Can&#39;t locate Digest/MD5.pm&lt;/code&gt;  是因为系统的 perl(&lt;code&gt;/usr/bin/perl&lt;/code&gt;) 中没有安装 &lt;code&gt;Digest::MD5&lt;/code&gt;  模块，我们可以去 &lt;a href=&#34;https://metacpan.org/pod/Digest::MD5&#34;&gt;CPAN&lt;/a&gt;  下载手动安装，也可以在线安装：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sudo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;yum&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;perl-Digest-MD5
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;FAQ-2：perl-TK&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Error&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;message&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;loading&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Tk:
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Can&lt;span class=&#34;err&#34;&gt;&amp;#39;&lt;/span&gt;t&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;locate&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Tk.pm&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;@INC&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;@INC&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;contains:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;./tlpkg&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/local/lib64/perl5&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/local/share/perl5&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/lib64/perl5/vendor_perl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/share/perl5/vendor_perl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/lib64/perl5&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/share/perl5&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;.&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;at&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;./install-tl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;line&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;398&lt;/span&gt;.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;在线安装 Tk 的 perl 模块(通过 &lt;a href=&#34;https://metacpan.org/pod/distribution/Tk/Tk.pod&#34;&gt;CPAN&lt;/a&gt;手动安装，这里不详述，有兴趣的可自行谷歌一下)：
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sudo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;yum&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;perl-Tk
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;perl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-e&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;use Tk&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 测试 TK 是否安装成功&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;最后，卸载镜像：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sudo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;umount&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/mnt/textlive/
umount:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/mnt/textlive:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;target&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;is&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;busy.
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;In&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;some&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;cases&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;useful&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;info&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;about&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;processes&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;that&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;use
&lt;span class=&#34;w&#34;&gt;         &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;device&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;is&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;found&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;by&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;lsof&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;8&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;or&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;fuser&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;))&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# fuser/lsof 能识别出正在对某个文件或端口访问的进程&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sudo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;fuser&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-m&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/mnt/textlive/
/mnt/textlive:&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;6436c&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;6548c&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;6549c
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ps&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;aux&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;grep&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;6436&lt;/span&gt;
shenwei+&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;6436&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;.0&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;.0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;115568&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2220&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pts/3&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;Ss&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;10&lt;/span&gt;:36&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;:00&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-bash
shenwei+&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;18041&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;.0&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;.0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;112704&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;952&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pts/1&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;S+&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;11&lt;/span&gt;:11&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;:00&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;grep&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--color&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;6436&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ps&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;aux&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;grep&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;6548&lt;/span&gt;
root&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;6548&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;.0&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;.1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;218528&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4020&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pts/3&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;S+&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;10&lt;/span&gt;:37&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;:00&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sudo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;./install-tl
shenwei+&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;18062&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;.0&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;.0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;112704&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;952&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pts/1&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;S+&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;11&lt;/span&gt;:11&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;:00&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;grep&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--color&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;6548&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# 杀掉占用此设备的进程&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sudo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;fuser&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-m&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-v&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-k&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/mnt/textlive/
&lt;span class=&#34;c1&#34;&gt;# 执行 umount 就可以正常卸载&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sudo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;umount&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/mnt/textlive/
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;这里有一个更加详细的&lt;a href=&#34;https://www.tug.org/texlive/doc/texlive-zh-cn/texlive-zh-cn.pdf&#34;&gt;TEX Live 指南&lt;/a&gt;，其中也有详细介绍各平台各种安装方法。&lt;/p&gt;
&lt;h2 id=&#34;四设置环境变量&#34;&gt;四、设置环境变量&lt;a class=&#34;headerlink&#34; href=&#34;#四设置环境变量&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;将 texlive 部分目录添加到环境变量(\~/.bashrc)，编辑完记得 source 刷新一下：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/software/texlive/2018/bin/x86_64-linux:&lt;span class=&#34;nv&#34;&gt;$PATH&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;MANPATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/software/texlive/2018/texmf-dist/doc/man:&lt;span class=&#34;nv&#34;&gt;$MANPATH&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;INFOPATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/software/texlive/2018/texmf-dist/doc/info:&lt;span class=&#34;nv&#34;&gt;$INFOPATH&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;五使用与测试&#34;&gt;五、使用与测试&lt;a class=&#34;headerlink&#34; href=&#34;#五使用与测试&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;编辑一个 tex-test.tex 文件：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;\documentclass{article}
\begin{document}
Hello \LaTeX! 你好，这是一个测试文档。
\end{document}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;使用命令，最后打开生成的 tex-test.pdf 文件：
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;xelatex&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tex-test.tex
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;h2 id=&#34;六中文支持&#34;&gt;六、中文支持&lt;a class=&#34;headerlink&#34; href=&#34;#六中文支持&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;LaTeX 默认是不支持中文的，想要支持中文排版，这里需要引入一个&amp;rdquo;宏包&amp;rdquo; 的概念。关于宏包，我们可以理解为一些指令的集合，用于专门处理某个特定的专题（如排版，字体等方面的细节问题），使用者可以方便地根据需要选用某个宏包。&lt;/p&gt;
&lt;p&gt;LaTeX 中比较常用的中文排版处理宏包主要有 ctex、CJK、xeCJK 等等，这里主要介绍一下后面两个。CJK 是由 Werner Lemberg 开发的，是中文（Chinese）、日文（Japanese）、韩文（Korean）三国文字的缩写。顾名思义，它能够支持这三种文字。实际上，CJK 能够支持在 LaTeX 中使用包括中文、日文、韩文在内的多种亚洲双字节文字。&lt;/p&gt;
&lt;p&gt;CJK 宏包提供了两种环境：CJK 环境和 CJK* 环境，这两种环境的区别为：对于汉字后面的空格，前者不忽略，后者忽略，我们推荐使用 CJK* 环境。&lt;/p&gt;
&lt;p&gt;xeCJK 是在 CCT 和 CJK 包基础上发展起来的，支持多种标点格式。也有人说，xeCJK package 搭上 XeLaTeX 是最好的中文 TeX 处理方式。总的来说 xeCJK 主要特点：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;分别设置 CJK 和英文字体；&lt;/li&gt;
&lt;li&gt;自动忽略 CJK 文字间的空格而保留其它空格，允许在非标点汉字和英文字母 (a-z, A-Z) 间断行；&lt;/li&gt;
&lt;li&gt;提供多种标点处理方式：全角式、半角式、开明式、行末半角式；&lt;/li&gt;
&lt;li&gt;自动调整中英文间空白。&lt;/li&gt;
&lt;li&gt;TexLive 2018 已经默认安装了 xeCJK，我们可以使用下面的命令查看 TexLive 已经安装的包以及包的具体信息：&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 查看 TexLive 所有已经安装的包&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tlmgr&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;list&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--only-installed
&lt;span class=&#34;c1&#34;&gt;# 查看具体某个包的信息&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tlmgr&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;info&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;xecjk
&lt;span class=&#34;c1&#34;&gt;# 安装新的宏包&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tlmgr&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pkgname
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;结合 xeCJK 宏包来配置字体，下面是一个小例子：
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;\documentclass{article}
\usepackage{xeCJK}
\setCJKmainfont{SimSun}
\begin{document}
你好，TeX Live 2018！
\end{document}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FrniQGthPg4PVIqBj2AHm_GWJUk_.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;七参考资料&#34;&gt;七、参考资料&lt;a class=&#34;headerlink&#34; href=&#34;#七参考资料&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;CTAN，&lt;a href=&#34;https://ctan.org/pkg/xecjk&#34;&gt;xecjk – Support for CJK documents in XeLaTeX&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Tass，Regular Tass Office Hour，《&lt;a href=&#34;http://rtassoh.blogspot.com/2010/08/cjk-xecjk-cwtex.html&#34;&gt;CJK, xeCJK 與 cwTeX 對於中文支援的比較&lt;/a&gt;》&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://CTEX.ORG&#34;&gt;CTEX.ORG&lt;/a&gt;，《&lt;a href=&#34;http://mirrors.sjtug.sjtu.edu.cn/ctan/macros/xetex/latex/xecjk/xeCJK.pdf&#34;&gt;xeCJK 宏包（中文文档）&lt;/a&gt;》&lt;/li&gt;
&lt;li&gt;CTAN，&lt;a href=&#34;https://ctan.org/pkg/xecjk&#34;&gt;xecjk – Support for CJK documents in XELATEX&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Jiedong Hao，jdhao blog，&lt;a href=&#34;https://jdhao.github.io/2018/03/29/latex-chinese.zh/&#34;&gt;LaTeX 中如何使用中文&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/LaTeX/2019-07-01-latex-2018-tutorial/</link>
      <pubDate>Mon, 01 Jul 2019 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/LaTeX/2019-07-01-latex-2018-tutorial/</guid>
      
    </item>
    
    <item>
      <title>各个平台下 Perl 源码安装教程</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2019-07-01&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2019-07-01T00:00:00&#39;&gt;2019-07-01&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-06-25&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-06-25T10:42:16&#39;&gt;2021-06-25&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;!&lt;img alt=&#34;How-To-Install-Perl.jpeg&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FpxbOJPB_b-KaVp9LYgc4uRgF1a0.jpeg&#34; /&gt;
Perl 是一种功能丰富的计算机程序语言，运行在超过 100 种计算机平台上，适用广泛，从大型机到便携设备，从快速原型创建到大规模可扩展开发。在生物信息分析领域，Perl 主要是做数据预处理、文本处理和格式转换、对算法效率要求不高的分析软件开发，系统管理和 pipeline 搭建等工作。这里对 Linux（主要是 CentOS）、windows 下 Perl 的安装做一个备忘。&lt;/p&gt;
&lt;h1 id=&#34;一centos-7-下安装-perl&#34;&gt;一、CentOS 7 下安装 Perl&lt;a class=&#34;headerlink&#34; href=&#34;#一centos-7-下安装-perl&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id=&#34;1-源码包下载&#34;&gt;1. 源码包下载&lt;a class=&#34;headerlink&#34; href=&#34;#1-源码包下载&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;在官方网站下载新版本的源码包：&lt;a href=&#34;http://www.perl.org/get.html&#34;&gt;http://www.perl.org/get.html&lt;/a&gt;，我下载的是 &lt;a href=&#34;http://www.cpan.org/src/5.0/perl-5.26.1.tar.gz&#34;&gt;perl-5.26.1.tar.gz&lt;/a&gt;。&lt;/p&gt;
&lt;h2 id=&#34;2-解压设置源码&#34;&gt;2. 解压，设置源码&lt;a class=&#34;headerlink&#34; href=&#34;#2-解压设置源码&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tar&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;zvxf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;perl-5.26.1.tar.gz
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;perl-5.26.1
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;./Configure&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--help
Usage:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Configure&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-dehrsEKOSV&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-f&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;config.sh&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-D&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;symbol&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-D&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;symbol&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;value&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;                 &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-U&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;symbol&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-U&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;symbol&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-A&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;command:symbol...&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-d&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;use&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;defaults&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;all&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;answers.
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-e&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;go&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;on&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;without&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;questioning&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;past&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;production&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;config.sh.
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-f&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;specify&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;an&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;alternate&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;default&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;configuration&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file.
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-h&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;print&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;this&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;help&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;message&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;and&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;exit&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;an&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;error&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;status&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;.
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-r&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;reuse&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;C&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;symbols&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;value&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;possible&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;skips&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;costly&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;nm&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;extraction&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;.
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-s&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;silent&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mode,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;only&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;echoes&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;questions&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;and&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;essential&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;information.
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-D&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;define&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;symbol&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;have&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;some&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;value:
&lt;span class=&#34;w&#34;&gt;         &lt;/span&gt;-D&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;symbol&lt;span class=&#34;w&#34;&gt;         &lt;/span&gt;symbol&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;gets&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;value&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;define&amp;#39;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;         &lt;/span&gt;-D&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;symbol&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;value&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;symbol&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;gets&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;value&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;value&amp;#39;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;common&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;used&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;examples&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;see&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;INSTALL&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;more&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;info&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;:
&lt;span class=&#34;w&#34;&gt;         &lt;/span&gt;-Duse64bitint&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;use&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;64bit&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;integers
&lt;span class=&#34;w&#34;&gt;         &lt;/span&gt;-Duse64bitall&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;use&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;64bit&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;integers&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;and&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pointers
&lt;span class=&#34;w&#34;&gt;         &lt;/span&gt;-Dusethreads&lt;span class=&#34;w&#34;&gt;             &lt;/span&gt;use&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;thread&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;support
&lt;span class=&#34;w&#34;&gt;         &lt;/span&gt;-Dinc_version_list&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;none&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;do&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;include&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;older&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;perl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;trees&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;@INC
&lt;span class=&#34;w&#34;&gt;         &lt;/span&gt;-DEBUGGING&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;none&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;DEBUGGING&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;options
&lt;span class=&#34;w&#34;&gt;         &lt;/span&gt;-Dcc&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;gcc&lt;span class=&#34;w&#34;&gt;                 &lt;/span&gt;choose&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;your&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;compiler
&lt;span class=&#34;w&#34;&gt;         &lt;/span&gt;-Dprefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/opt/perl5&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;choose&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;your&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;destination
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-E&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;stop&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;at&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;end&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;questions,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;after&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;having&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;produced&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;config.sh.
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-K&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;do&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;use&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;unless&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;you&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;know&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;what&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;you&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;are&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;doing.
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-O&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ignored&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;backward&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;compatibility
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-S&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;perform&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;variable&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;substitutions&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;on&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;all&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;.SH&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;files&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;can&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mix&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-f&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-U&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;undefine&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;symbol:
&lt;span class=&#34;w&#34;&gt;         &lt;/span&gt;-U&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;symbol&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;symbol&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;gets&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;value&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;undef&amp;#39;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;         &lt;/span&gt;-U&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;symbol&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;symbol&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;gets&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;completely&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;empty
&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;e.g.:&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-Uversiononly
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-A&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;manipulate&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;symbol&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;after&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;platform&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;specific&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;hints&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;have&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;been&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;applied:
&lt;span class=&#34;w&#34;&gt;         &lt;/span&gt;-A&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;append:symbol&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;value&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;append&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;value&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;symbol
&lt;span class=&#34;w&#34;&gt;         &lt;/span&gt;-A&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;symbol&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;value&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;like&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;append:,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;but&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;a&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;separating&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;space
&lt;span class=&#34;w&#34;&gt;         &lt;/span&gt;-A&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;define:symbol&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;value&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;define&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;symbol&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;have&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;value
&lt;span class=&#34;w&#34;&gt;         &lt;/span&gt;-A&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;clear:symbol&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;define&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;symbol&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;be&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;         &lt;/span&gt;-A&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;define:symbol&lt;span class=&#34;w&#34;&gt;         &lt;/span&gt;define&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;symbol&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;be&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;define&amp;#39;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;         &lt;/span&gt;-A&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;eval:symbol&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;value&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;define&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;symbol&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;be&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;eval&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;value
&lt;span class=&#34;w&#34;&gt;         &lt;/span&gt;-A&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;prepend:symbol&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;value&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;prepend&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;value&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;symbol
&lt;span class=&#34;w&#34;&gt;         &lt;/span&gt;-A&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;undef:symbol&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;define&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;symbol&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;be&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;undef&amp;#39;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;         &lt;/span&gt;-A&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;undef:symbol&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;         &lt;/span&gt;define&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;symbol&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;be&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;e.g.:&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-A&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;prepend:libswanted&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;cl pthread &amp;#39;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;              &lt;/span&gt;-A&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;ccflags&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;-DSOME_MACRO
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-V&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;print&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;version&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;number&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;and&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;exit&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;a&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;zero&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;status&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;.

&lt;span class=&#34;c1&#34;&gt;# 设置源码&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;./Configure&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-des&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-Dprefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/software/Perl-5.26&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-Dusethreads&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-Uversiononly
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;3-编译安装&#34;&gt;3. 编译安装&lt;a class=&#34;headerlink&#34; href=&#34;#3-编译安装&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make
......
make&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;***&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;IO.o&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Error&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
make&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Leaving&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;directory&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;/users/rmi1/build/perl-5.12.0/dist/IO&lt;span class=&#34;err&#34;&gt;&amp;#39;&lt;/span&gt;
Unsuccessful&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;dist/IO&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;code&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;512&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;at&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make_ext.pl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;line&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;449&lt;/span&gt;.
make:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;***&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;lib/auto/IO/IO.so&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Error&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;如果在 make 编译过程中出现如上报错，请参考 &lt;a href=&#34;https://serverfault.com/questions/145288/make-error-when-compiling-perl-5-12-1-rhel-5-5&#34;&gt;Make error when compiling Perl 5.12.1 (RHEL 5.5)&lt;/a&gt; 执行下面操作：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;clean
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;unset&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;C_INCLUDE_PATH
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;./Configure&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-des&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-Dprefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/software/Perl-5.26&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-Dusethreads&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-Uversiononly
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;继续验证编译，执行安装：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;test&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 命令完成后，基本安装就完成了&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;4-调整环境变量&#34;&gt;4. 调整环境变量&lt;a class=&#34;headerlink&#34; href=&#34;#4-调整环境变量&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;在 \~/.bashrc 中把 perl 添加到 PATH 中，然后 source \~/.bashrc 刷新。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;/usr/local/software/Perl-5.26/bin:&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PATH&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;5-安装完成&#34;&gt;5. 安装完成&lt;a class=&#34;headerlink&#34; href=&#34;#5-安装完成&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;perl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-version

This&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;is&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;perl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;5&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;version&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;26&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;subversion&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;v5.26.1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;built&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;x86_64-linux-thread

Copyright&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1987&lt;/span&gt;-2017,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Larry&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Wall

Perl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;may&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;be&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;copied&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;only&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;under&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;terms&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;either&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Artistic&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;License&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;or&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the
GNU&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;General&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Public&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;License,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;which&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;may&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;be&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;found&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Perl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;kit.

Complete&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;documentation&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Perl,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;including&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FAQ&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;lists,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;should&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;be&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;found&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;on
this&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;system&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;using&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;man perl&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;or&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;perldoc perl&amp;quot;&lt;/span&gt;.&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;If&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;you&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;have&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;access&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the
Internet,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;point&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;your&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;browser&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;at&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;http://www.perl.org/,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Perl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Home&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Page.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;查看 perl 配置汇总信息：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;perl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-V&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 该命令会把对应 perl 配置、模块路径所有信息汇总打印出来&lt;/span&gt;
Summary&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;my&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;perl5&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;revision&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;version&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;26&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;subversion&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;configuration:

&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Platform:
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;osname&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;linux
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;osvers&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;.6.32-696.10.1.el6.x86_64
......

Built&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;under&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;linux
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Compiled&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;at&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Sep&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2017&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;16&lt;/span&gt;:35:49
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;@INC:
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;/usr/local/software/Perl-5.26/lib/perl5/site_perl/5.26.1/x86_64-linux
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;/usr/local/software/Perl-5.26/lib/perl5/site_perl/5.26.1
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;/usr/local/software/Perl-5.26/lib/perl5/5.26.1/x86_64-linux
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;/usr/local/software/Perl-5.26/lib/perl5/5.26.1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h1 id=&#34;二windows-7-下安装-perl&#34;&gt;二、Windows 7 下安装 Perl&lt;a class=&#34;headerlink&#34; href=&#34;#二windows-7-下安装-perl&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;windows 下的 Perl 安装推荐使用 ActivePerl（&lt;a href=&#34;https://www.activestate.com/products/activeperl/&#34;&gt;https://www.activestate.com/products/activeperl/&lt;/a&gt;），安装步骤如下。&lt;/p&gt;
&lt;h2 id=&#34;21-安装包下载&#34;&gt;2.1 安装包下载&lt;a class=&#34;headerlink&#34; href=&#34;#21-安装包下载&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;在这里我们下载 64-bit 的 &lt;a href=&#34;https://www.activestate.com/products/activeperl/downloads/thank-you/?dl=https://downloads.activestate.com/ActivePerl/releases/5.26.3.2603/ActivePerl-5.26.3.2603-MSWin32-x64-a95bce075.exe&#34;&gt;Perl-5.26.3&lt;/a&gt;。&lt;/p&gt;
&lt;h2 id=&#34;22-安装与设置&#34;&gt;2.2 安装与设置&lt;a class=&#34;headerlink&#34; href=&#34;#22-安装与设置&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;ActivePerl-5.26.3.2603-MSWin32-x64-a95bce075.exe 安装包下载完后，我们直接点击进行安装。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FltQ3ily8fUf7jsc8lkAaa1S6j2C.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;选择 &amp;ldquo;Custom&amp;rdquo; 自定义安装：
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FjxzUF9spJfd0_xw1Gj1ebX64IC6.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;自定义安装路径：
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FlguUA_zw4HQ8RezvB8nGElAjhdt.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;把 Perl 添加到系统环境变量：
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FlrvxARXJt3KCsxePwpEpKe6ZEJM.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;Perl 安装完成后，我们在 DOC 命令行输入 perl -V，可以看到详细的相关信息：
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FtVmx_MsNHaXijdtfSGVjZM3irE3.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;如果我们在安装过程中没有勾选把 Perl 添加到系统环境变量，DOC 中直接执行 perl -V 会出现 &lt;strong&gt;&amp;ldquo;&amp;lsquo;perl&amp;rsquo; is not recognized as an internal or external command&amp;rdquo;&lt;/strong&gt; 提示，这时候我们需要手动把 perl 添加到 Windows 的系统环境变量中就可以了。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FozuAmdNUImdIzTJhZmE2SIVFA6o.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;23-配置-cpan&#34;&gt;2.3 配置 cpan&lt;a class=&#34;headerlink&#34; href=&#34;#23-配置-cpan&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;为了更好对 Perl 进行扩展，方便以后的模块安装，我们最好配置一下 cpan。ActivePerl 有个好处就是在初始化 cpan 的时候会自动把 dmake、gcc、g++、mingw32-make 等 windows 常用的编译工具一起安装到 &amp;ldquo;&lt;strong&gt;$Dprefix/site/bin&lt;/strong&gt;&amp;rdquo; 目录下，免去了我们手动安装这些编译器的各种麻烦。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fk2vzpGMiygw3YHFIf3vV7_hj-5-.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;24-安装完成&#34;&gt;2.4 安装完成&lt;a class=&#34;headerlink&#34; href=&#34;#24-安装完成&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;到这里，windows 下的 ActivePerl（perl-5.26）就安装完成了！&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/Perl/2019-07-01-install-perl-from-source/</link>
      <pubDate>Mon, 01 Jul 2019 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/Perl/2019-07-01-install-perl-from-source/</guid>
      
    </item>
    
    <item>
      <title>Bioconductor 中的 R 包安装方法总结</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2019-07-01&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2019-07-01T00:00:00&#39;&gt;2019-07-01&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2022-10-17&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2022-10-17T22:55:57&#39;&gt;2022-10-17&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Bioconductor 是一个基于 R 语言的生物信息软件包，主要用于生物数据的注释、分析、统计、以及可视化 （&lt;a href=&#34;http://www.bioconductor.org&#34;&gt;http://www.bioconductor.org&lt;/a&gt; ）。&lt;/p&gt;
&lt;p&gt;总所周知，Bioconductor 是和 R 版本绑定的，这是为了确保用户不把包安装在错误的版本上。Bioconductor 发行版每年更新两次，它在任何时候都有一个发行版本（release version），对应于 R 的发行版本。此外，Bioconductor 还有一个开发版本（development version），它对应于 R 的开发版本。&lt;/p&gt;
&lt;p&gt;R 每年（通常是 4 月中旬）在 &amp;lsquo;x.y.z&amp;rsquo; 中发布一个 &amp;lsquo;.y&amp;rsquo; 版本，但 Bioconductor 每 6 个月（4 月中旬和 10 月中旬）发布一个 &amp;lsquo;.y&amp;rsquo; 版本。&lt;/p&gt;
&lt;p&gt;Bioconductor 与 R 各自对应的版本如下：（参考：&lt;a href=&#34;https://bioconductor.org/about/release-announcements/&#34;&gt;Bioconductor releases&lt;/a&gt;）
&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FuWsjeYOiJKjpvrMD1vvWkclbemC.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;bioclite-使用&#34;&gt;biocLite 使用&lt;a class=&#34;headerlink&#34; href=&#34;#bioclite-使用&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;在 R-3.5（Bioconductor-3.7） 前，Bioconductor 都是通过 biocLite 安装相关的 R 包：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nf&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;https://bioconductor.org/biocLite.R&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;biocLite&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pkg_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;但是，从 R-3.5（Bioconductor-3.8）起，Bioconductor 更改了 R 包的安装方式：它们通过发布在 CRAN 的 &lt;code&gt;[BiocManager](https://cran.r-project.org/web/packages/BiocManager/index.html)&lt;/code&gt; 包来对 Bioconductor 的包进行安装和管理——通过 CRAN 安装 &lt;code&gt;BiocManager&lt;/code&gt;，再通过这个包来安装 Bioconductor 的包。&lt;/p&gt;
&lt;h2 id=&#34;biocmanager-安装与使用&#34;&gt;BiocManager 安装与使用&lt;a class=&#34;headerlink&#34; href=&#34;#biocmanager-安装与使用&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&#34;1-镜像镜像镜像&#34;&gt;1. 镜像，镜像，镜像！&lt;a class=&#34;headerlink&#34; href=&#34;#1-镜像镜像镜像&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;重要的事情说三遍！很多安装  CRAN 和 Bioconductor 包的童鞋都会发现自己的包下载不完整，以至于出现各种神奇的报错！所以国内的用户推荐参考下面的用法，设置国内镜像，改善包下载速度慢的问题。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Bioconductor 镜像&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Bioconductor 镜像源配置文件之一是  &lt;code&gt;.Rprofile&lt;/code&gt; (Linux 下位于  &lt;code&gt;~/.Rprofile&lt;/code&gt; )。
在文末添加如下语句：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nf&#34;&gt;options&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;BioC_mirror&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;https://mirrors.tuna.tsinghua.edu.cn/bioconductor&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;打开 R 即可使用该 Bioconductor 镜像源安装 Bioconductor 软件包。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CRAN 镜像与 R 包安装&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;R 在线安装包，设置全局镜像（选择中国的镜像），加快安装进度，可以参考以下方法：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;#设置清华大学镜像&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;local&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;({&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;r&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;getOption&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;repos&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;r&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;CRAN&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;http://mirrors.tuna.tsinghua.edu.cn/CRAN/&amp;quot;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;options&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;repos&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;r&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;})&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;#然后在安装需要的包&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;install.packages&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;ggplot2&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;或者直接在安装方法中指定 repos，指定国内的镜像地址，安装会快很多：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nf&#34;&gt;install.packages&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;ggplot2&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;repos&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;http://mirrors.tuna.tsinghua.edu.cn/CRAN/&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;2-安装-biocmanager-包&#34;&gt;2. 安装 BiocManager 包&lt;a class=&#34;headerlink&#34; href=&#34;#2-安装-biocmanager-包&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nf&#34;&gt;chooseCRANmirror&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;                           &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 选择 CRAN 的镜像&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;install.packages&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;BiocManager&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 安装 BiocManager 包&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;3-安装-bioconductor-的-r-包&#34;&gt;3. 安装 Bioconductor 的 R 包&lt;a class=&#34;headerlink&#34; href=&#34;#3-安装-bioconductor-的-r-包&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;BiocManager&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;install&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;GenomicRanges&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;Organism.dplyr&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;4-查看-bioconductor-的版本&#34;&gt;4. 查看 Bioconductor 的版本&lt;a class=&#34;headerlink&#34; href=&#34;#4-查看-bioconductor-的版本&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;BiocManager&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;version&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## &amp;#39;3.8&amp;#39;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;5-更新所有已经安装的-r-包&#34;&gt;5. 更新所有已经安装的 R 包&lt;a class=&#34;headerlink&#34; href=&#34;#5-更新所有已经安装的-r-包&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;BiocManager&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;install&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 更新到最新版本&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;6-旧和意外版本的-r-包&#34;&gt;6. 旧和意外版本的 R 包&lt;a class=&#34;headerlink&#34; href=&#34;#6-旧和意外版本的-r-包&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;当 Bioconductor 的包都来自同一版本时，它们的效果最佳。 使用 &lt;code&gt;valid()&lt;/code&gt; 来查看过期（out-of-date）或意外版本（unexpected versions）的 R 包。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;BiocManager&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;valid&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;## Warning: 21 packages out-of-date; 2 packages too new&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;##&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## * sessionInfo()&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;##&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## R Under development (unstable) (2018-11-02 r75540)&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## Platform: x86_64-pc-linux-gnu (64-bit)&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## Running under: Ubuntu 18.04.1 LTS&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;##&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## Matrix products: default&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## BLAS: /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.7.1&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.7.1&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;##&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## locale:&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;##  [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;##  [3] LC_TIME=en_US.UTF-8        LC_COLLATE=C&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;##  [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;##  [7] LC_PAPER=en_US.UTF-8       LC_NAME=C&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;##  [9] LC_ADDRESS=C               LC_TELEPHONE=C&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;##&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## attached base packages:&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## [1] stats     graphics  grDevices utils     datasets  methods   base&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;##&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## other attached packages:&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## [1] BiocStyle_2.11.0&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;##&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## loaded via a namespace (and not attached):&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;##  [1] Rcpp_1.0.0         bookdown_0.7       digest_0.6.18&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;##  [4] rprojroot_1.3-2    backports_1.1.2    magrittr_1.5&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;##  [7] evaluate_0.12      stringi_1.2.4      rmarkdown_1.10&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## [10] tools_3.6.0        stringr_1.3.1      xfun_0.4&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## [13] yaml_2.2.0         compiler_3.6.0     BiocManager_1.30.4&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## [16] htmltools_0.3.6    knitr_1.20&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;##&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## Bioconductor version &amp;#39;3.9&amp;#39;&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;##&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;##   * 21 packages out-of-date&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;##   * 2 packages too new&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;##&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## create a valid installation with&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;##&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;##   BiocManager::install(c(&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;##     &amp;quot;BiocManager&amp;quot;, &amp;quot;GenomicDataCommons&amp;quot;, &amp;quot;GenomicRanges&amp;quot;, &amp;quot;IRanges&amp;quot;,&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;##     &amp;quot;RJSONIO&amp;quot;, &amp;quot;RcppArmadillo&amp;quot;, &amp;quot;S4Vectors&amp;quot;, &amp;quot;TCGAbiolinks&amp;quot;, &amp;quot;TCGAutils&amp;quot;,&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;##     &amp;quot;TMB&amp;quot;, &amp;quot;biocViews&amp;quot;, &amp;quot;biomaRt&amp;quot;, &amp;quot;bumphunter&amp;quot;, &amp;quot;curatedMetagenomicData&amp;quot;,&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;##     &amp;quot;dimRed&amp;quot;, &amp;quot;dplyr&amp;quot;, &amp;quot;flowCore&amp;quot;, &amp;quot;ggpubr&amp;quot;, &amp;quot;ggtree&amp;quot;, &amp;quot;lme4&amp;quot;, &amp;quot;rcmdcheck&amp;quot;,&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;##     &amp;quot;shinyFiles&amp;quot;, &amp;quot;tximportData&amp;quot;&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;##   ), update = TRUE, ask = FALSE)&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;##&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## more details: BiocManager::valid()$too_new, BiocManager::valid()$out_of_date&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;code&gt;valid()&lt;/code&gt; 返回一个对象，可以查询该对象以获取有关无效包的详细信息：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;valid&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Warning&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;message&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;
&lt;span class=&#34;m&#34;&gt;6&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;packages&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;out&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;of&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;date&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;packages&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;too&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;new&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;names&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;out_of_date&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;too_new&amp;quot;&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;head&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;out_of_date&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Package&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;LibPath&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;bit&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;bit&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;/home/shenweiyan/R/x86_64-pc-linux-gnu-library/3.5-Bioc-3.8&amp;quot;&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;ff&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;ff&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;/home/shenweiyan/R/x86_64-pc-linux-gnu-library/3.5-Bioc-3.8&amp;quot;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Installed&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Built&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ReposVer&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Repository&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;bit&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;1.1-12&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;3.5.0&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;1.1-13&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;https://cran.rstudio.com/src/contrib&amp;quot;&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;ff&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;2.2-13&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;3.5.0&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;2.2-14&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;https://cran.rstudio.com/src/contrib&amp;quot;&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;7-适用的-r-包&#34;&gt;7. 适用的 R 包&lt;a class=&#34;headerlink&#34; href=&#34;#7-适用的-r-包&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;可以使用 &lt;code&gt;available()&lt;/code&gt; 发现适用于我们的 Bioconductor 版本的软件包；第一个参数是可用于根据正则表达式过滤包名称，例如，可用于 Homo sapiens 的 &lt;strong&gt;&amp;lsquo;BSgenome&amp;rsquo;&lt;/strong&gt; 包：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;avail&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;BiocManager&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;available&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;length&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;avail&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## [1] 16261&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;BiocManager&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;available&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;BSgenome.Hsapiens&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;##  [1] &amp;quot;BSgenome.Hsapiens.1000genomes.hs37d5&amp;quot;&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;##  [2] &amp;quot;BSgenome.Hsapiens.NCBI.GRCh38&amp;quot;&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;##  [3] &amp;quot;BSgenome.Hsapiens.UCSC.hg17&amp;quot;&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;##  [4] &amp;quot;BSgenome.Hsapiens.UCSC.hg17.masked&amp;quot;&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;##  [5] &amp;quot;BSgenome.Hsapiens.UCSC.hg18&amp;quot;&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;##  [6] &amp;quot;BSgenome.Hsapiens.UCSC.hg18.masked&amp;quot;&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;##  [7] &amp;quot;BSgenome.Hsapiens.UCSC.hg19&amp;quot;&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;##  [8] &amp;quot;BSgenome.Hsapiens.UCSC.hg19.masked&amp;quot;&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;##  [9] &amp;quot;BSgenome.Hsapiens.UCSC.hg38&amp;quot;&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;## [10] &amp;quot;BSgenome.Hsapiens.UCSC.hg38.masked&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;安装旧版本的-bioconductor-r-包&#34;&gt;安装旧版本的 Bioconductor R 包&lt;a class=&#34;headerlink&#34; href=&#34;#安装旧版本的-bioconductor-r-包&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FsWdeAuTnAbrncvAU1q5kl7QcebP.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;r35bioconductor37&#34;&gt;R≥3.5，Bioconductor≥3.7&lt;a class=&#34;headerlink&#34; href=&#34;#r35bioconductor37&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;可以使用 BiocManager 安装相关与版本匹配的 R 包。或者通过源码的方式安装旧版本 R 包。&lt;/p&gt;
&lt;h3 id=&#34;r35bioconductor37_1&#34;&gt;R&amp;lt;3.5，Bioconductor&amp;lt;3.7&lt;a class=&#34;headerlink&#34; href=&#34;#r35bioconductor37_1&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;那么使用 3.5 以下 R 版本的用户是继续使用 biocLite，还是 BiocManager，还是其他的方法安装匹配相关版本的 R 包呢？&lt;/p&gt;
&lt;p&gt;**首先，**对于 R &amp;lt; 3.5.0，如果  biocLite 或者 BiocManager 可以安装，则优先使用  biocLite 或者 BiocManager 去安装。&lt;/p&gt;
&lt;p&gt;**其次，**对于 R &amp;lt; 3.5.0，  如果 biocLite 和 BiocManager 都无法安装对应版本的 R 包，可以参考下面的方法。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;https://bioconductor.org/biocLite.R&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Bioconductor&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;version&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3.6&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;BiocInstaller&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1.28&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;?&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;biocLite&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;help&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;new&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;version&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;of&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Bioconductor&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;is&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;available&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;after&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;installing&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;the&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;most&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;recent&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;version&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;of&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;R&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;see&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;http&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;://&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bioconductor.org&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;install&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;biocLite&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;clusterProfile&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;......&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;Warning&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;message&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;package&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;‘&lt;span class=&#34;n&#34;&gt;clusterProfile&lt;/span&gt;’&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;is&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;not&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;available &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;R&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;version&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3.4&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;chooseCRANmirror&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;install.packages&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;BiocManager&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Warning&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;message&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;package&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;‘&lt;span class=&#34;n&#34;&gt;BiocManager&lt;/span&gt;’&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;is&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;not&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;available &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;R&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;version&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3.4&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;这时候，Bioconductor 推荐使用以下命令安装相应的 R 包。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nf&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;https://bioconductor.org/biocLite.R&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;BiocInstaller&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;biocLite&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;GenomicFeatures&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;AnnotationDbi&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;安装新版本的-bioconductor-r-包&#34;&gt;安装新版本的 Bioconductor R 包&lt;a class=&#34;headerlink&#34; href=&#34;#安装新版本的-bioconductor-r-包&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Bioconductor 是与特定版本的 R 绑定的，正常来说当 Bioconductor 的包都来自同一版本时，它们的效果最佳。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Bioconductor versions are associated with specific R versions, as summarized &lt;a href=&#34;https://bioconductor.org/about/release-announcements/&#34;&gt;here&lt;/a&gt;. Attempting to install a version of Bioconductor that is not supported by the version of R in use leads to an error; using the most recent version of Bioconductor may require installing a new version of R.&lt;/p&gt;
&lt;p&gt;From：&lt;a href=&#34;https://cran.r-project.org/web/packages/BiocManager/vignettes/BiocManager.html&#34;&gt;https://cran.r-project.org/web/packages/BiocManager/vignettes/BiocManager.html&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;所以，当有些 R 包是基于高版本的 Bioconductor 开发的，在低版本的 Bioconductor/R 中直接执行 &lt;code&gt;BiocManager::install(&#34;package&#34;)&lt;/code&gt;，安装得到的 package 版本默认是与当前版本 Bioconductor/R 相匹配的，而并非是最新的版本。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FrfiotBKifOnRNkqsPWL2co_udL6.png&#34; /&gt;
以 &lt;strong&gt;DiffBind&lt;/strong&gt; 包为例，&lt;a href=&#34;https://bioconductor.org/packages/3.14/bioc/html/DiffBind.html&#34;&gt;DiffBind==3.4.0&lt;/a&gt; 是基于 Bioconductor==3.14（对应 R-4.1）开发的；我们在 Bioconductor==3.13（对应 R-4.0）中执行 &lt;code&gt;BiocManager::install(&#34;DiffBind&#34;)&lt;/code&gt;，默认安装的是 &lt;a href=&#34;https://bioconductor.org/packages/3.12/bioc/html/DiffBind.html&#34;&gt;DiffBind==3.0.15&lt;/a&gt;！
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fidxv_6XZ_eQf1AEOOj52EQdgkME.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;1-源码方式安装&#34;&gt;1. 源码方式安装&lt;a class=&#34;headerlink&#34; href=&#34;#1-源码方式安装&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;如果想要在 Bioconductor==3.13（对应 R-4.0）中安装 &lt;a href=&#34;https://bioconductor.org/packages/3.14/bioc/html/DiffBind.html&#34;&gt;DiffBind==3.4.0&lt;/a&gt;，可以直接通过源码包的方式安装：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;packageurl&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;http://bioconductor.org/packages/release/bioc/src/contrib/DiffBind_3.4.0.tar.gz&amp;quot;&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;install.packages&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;packageurl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;repos&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;NULL&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;source&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;2-biocinstaller-安装&#34;&gt;2. BiocInstaller 安装&lt;a class=&#34;headerlink&#34; href=&#34;#2-biocinstaller-安装&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;下面，我们以在 R-3.4（Bioconductor==3.6）中安装最新版本的 clusterProfiler 为例。&lt;/p&gt;
&lt;p&gt;在 Aanconda2 环境 R==3.4.3 中安装 clusterProfiler，发现 &lt;code&gt;package ‘clusterProfile’ is not available (for R version 3.4.3)&lt;/code&gt;。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;https://bioconductor.org/biocLite.R&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Bioconductor&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;version&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3.6&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;BiocInstaller&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1.28&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;?&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;biocLite&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;help&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;new&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;version&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;of&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Bioconductor&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;is&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;available&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;after&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;installing&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;the&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;most&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;recent&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;version&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;of&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;R&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;see&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;http&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;://&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bioconductor.org&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;install&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;biocLite&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;clusterProfile&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;BioC_mirror&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;https&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;://&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bioconductor.org&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Using&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Bioconductor&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3.6&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;BiocInstaller&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1.28&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;R&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3.4&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2017-11-30&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;.&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Installing&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;package&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;‘&lt;span class=&#34;n&#34;&gt;clusterProfile&lt;/span&gt;’
&lt;span class=&#34;n&#34;&gt;Old&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;packages&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;ade4&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;ape&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;backports&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;caret&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;......&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;Update&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;all&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;some&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;none&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;?&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;n&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Warning&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;message&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;package&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;‘&lt;span class=&#34;n&#34;&gt;clusterProfile&lt;/span&gt;’&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;is&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;not&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;available &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;R&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;version&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3.4&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;使用 &lt;code&gt;BiocInstaller&lt;/code&gt; 安装 clusterProfiler：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;https://bioconductor.org/biocLite.R&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Bioconductor&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;version&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3.6&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;BiocInstaller&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1.28&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;?&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;biocLite&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;help&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;new&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;version&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;of&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Bioconductor&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;is&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;available&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;after&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;installing&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;the&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;most&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;recent&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;version&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;of&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;R&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;see&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;http&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;://&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bioconductor.org&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;install&lt;/span&gt;

&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;BiocInstaller&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;biocLite&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;clusterProfiler&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;BioC_mirror&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;https&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;://&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bioconductor.org&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Using&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Bioconductor&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3.6&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;BiocInstaller&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1.28&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;R&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3.4&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2017-11-30&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;.&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Installing&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;package&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;‘&lt;span class=&#34;n&#34;&gt;clusterProfiler&lt;/span&gt;’
&lt;span class=&#34;n&#34;&gt;trying&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;URL&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;https://bioconductor.org/packages/3.6/bioc/src/contrib/clusterProfiler_3.6.0.tar.gz&amp;#39;&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Content&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;application/x-gzip&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;length&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4478098&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;bytes &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4.3&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;==================================================&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;downloaded&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4.3&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MB&lt;/span&gt;

&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;installing&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;package&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;‘&lt;span class=&#34;n&#34;&gt;clusterProfiler&lt;/span&gt;’&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;...&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;**&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;R&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;**&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;**&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;inst&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;**&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;byte&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;compile&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;and&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;prepare&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;package&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lazy&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;loading&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;**&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;help&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;***&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;installing&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;help&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;indices&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;**&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;building&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;package&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;indices&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;**&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;installing&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;vignettes&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;**&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;testing&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;installed&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;package&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;can&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;be&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;loaded&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;DONE &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;clusterProfiler&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;packageVersion&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;clusterProfiler&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;‘&lt;span class=&#34;m&#34;&gt;3.6&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;’
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;installpackages-一站式方案&#34;&gt;install.packages 一站式方案&lt;a class=&#34;headerlink&#34; href=&#34;#installpackages-一站式方案&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;用 install.packages 来安装 CRAN 和 Bioconductor 所有的包！这是来自于 Y 叔 2018-09-25 在公众号发表的《&lt;a href=&#34;https://mp.weixin.qq.com/s/xi2XPsHVsXsMijvbox90ew&#34;&gt;不用 biocLite 安装 Bioconductor 包&lt;/a&gt;》介绍的方法。这里截取部分内容介绍一下。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;用 install.packages 来安装 CRAN 和 Bioconductor 所有的包，你要做的很简单，在 \~/.Rprofile  里加入以下两行内容。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nf&#34;&gt;options&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;BioC_mirror&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;https://mirrors.tuna.tsinghua.edu.cn/bioconductor&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;utils&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;setRepositories&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ind&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;第一行，使用国内的镜像，我这里用的是清华大学的，第二行，设定  &lt;code&gt;install.packages&lt;/code&gt;  从 CRAN 和 Bioconductor 中搜索包，其实你还可以让它支持比如 R-Forge 以及各种第三方的仓库。&lt;/p&gt;
&lt;p&gt;然后你就可以愉快地使用  &lt;code&gt;install.packages&lt;/code&gt; 来安装 Bioconductor 包了。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;安装体积比较大的-r-包&#34;&gt;安装体积比较大的 R 包&lt;a class=&#34;headerlink&#34; href=&#34;#安装体积比较大的-r-包&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;安装 CRAN 或者 Bioconductor 中一些体积比较大的 R 包，如果网络不太好，经常可能会出现包下载不完（Timeout of 60 seconds was reached），从而导致无法正常安装。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FkT19wEWbN-7DeYe42UDzDiZJKsR.png&#34; /&gt;
参考 &lt;a href=&#34;https://stackoverflow.com/questions/35282928/how-do-i-set-a-timeout-for-utilsdownload-file-in-r/35283374&#34;&gt;How do i set a timeout for utils::download.file() in R - Stack Overflow&lt;/a&gt;，增加 timeout 时长的同时使用国内的镜像进行加速：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nf&#34;&gt;getOption&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;timeout&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# [1] 60&lt;/span&gt;

&lt;span class=&#34;nf&#34;&gt;options&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;timeout&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fv20PVmbB48T5yQ79Us0sXjVJiZy.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;以上，就是  Bioconductor R 包安装和使用的全部内容，希望对大家有所帮助。&lt;/p&gt;
&lt;h2 id=&#34;参考资料&#34;&gt;参考资料&lt;a class=&#34;headerlink&#34; href=&#34;#参考资料&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;omicsgene，《&lt;a href=&#34;https://www.omicsclass.com/article/106&#34;&gt;R 语言包安装方法，设置国内镜像加快安装速度&lt;/a&gt;》，OmicsClass  组学大讲堂问答社区&lt;/li&gt;
&lt;li&gt;Y 叔叔，《&lt;a href=&#34;https://mp.weixin.qq.com/s/xi2XPsHVsXsMijvbox90ew&#34;&gt;不用 biocLite 安装 Bioconductor 包&lt;/a&gt;》，&amp;rdquo;biobable&amp;rdquo;公众号&lt;/li&gt;
&lt;/ol&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/R/2019-07-01-bioconductor-packages/</link>
      <pubDate>Mon, 01 Jul 2019 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/R/2019-07-01-bioconductor-packages/</guid>
      
    </item>
    
    <item>
      <title>Linux 下 R 源码安装指南</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2019-07-01&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2019-07-01T00:00:00&#39;&gt;2019-07-01&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2023-07-15&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2023-07-15T00:06:09&#39;&gt;2023-07-15&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;如果你使用的 Linux 系统 GCC 版本太低, 又没有 root 权限 (即使有 root 权限又担心升级 GCC 带来的风险) ; 同时你又不想入坑 conda, 但是你又希望安装一个最新版本的 R, 那么恭喜你, 这篇普通用户在 Linux 下源码编译安装 R 的记录刚好满足了你想要的一切.。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;📢 说明&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;本文档以 R-3.6.0 为例, 但对于 R-3.6.x, R-4.0.x 的安装同样适用。&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;根据本教程，经过测试，以下版本均可以正常安装成功。&lt;/strong&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;R-4.0.3&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;R-4.1.2&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;R-4.3.0&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;p&gt;本教程在以下的安装环境中，经过测试都可以正常操作：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;系统（版本）&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;GCC 版本&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Red Hat Enterprise Linux Server release 6.5 (Santiago), x86_64&lt;/td&gt;
&lt;td&gt;gcc version 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CentOS Linux release 7.6.1810 (Core), x86_64&lt;/td&gt;
&lt;td&gt;gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;openEuler 20.03 (LTS)&lt;/td&gt;
&lt;td&gt;gcc (GCC) 7.3.0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h1 id=&#34;1-安装命令&#34;&gt;1. 安装命令&lt;a class=&#34;headerlink&#34; href=&#34;#1-安装命令&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;R 源码编译安装基本命令。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# Rpy：--enable-R-shlib&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# download list：https://mirrors.ustc.edu.cn/CRAN/src/base/&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;wget&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://mirrors.ustc.edu.cn/CRAN/src/base/R-3/R-3.6.0.tar.gz
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tar&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;zxvf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;R-3.6.0.tar.gz
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;R-3.6.0
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;./configure&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/Bioinfo/SoftWare/R-3.6.0&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;--enable-R-shlib&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--enable-BLAS-shlib&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;--with-blas&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;--with-lapack
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;关于 R 相关的动态库：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;R 编译的过程中，如果想要在其他语言中集成 R 就必须选择&lt;code&gt;--enable-R-shlib&lt;/code&gt;选项，将 R 编译成 lib 模式，在此模式下，会生成 &lt;code&gt;path-to-R/lib/libR.so&lt;/code&gt;库——将 R 编译成动态库(libR.so)，然后 R 的执行程序与之链接；&lt;/li&gt;
&lt;li&gt;例如，如果不编译生成 &lt;code&gt;libR.so&lt;/code&gt;，在安装 rpy2（Python 中的 R 语言接口模块） 时就无法正确编译。&lt;/li&gt;
&lt;li&gt;同时，确保同目录下 &lt;code&gt;libRblas.so&lt;/code&gt;,&lt;code&gt;libRlapack.so&lt;/code&gt; 两个链接库也被正确生成，这两个库默认会生成，如果没有，需要添加参数：&lt;code&gt;--enable-BLAS-shlib&lt;/code&gt;,&lt;code&gt;--with-blas&lt;/code&gt;,&lt;code&gt;--with-lapack&lt;/code&gt;；&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;2-基础环境&#34;&gt;2. 基础环境&lt;a class=&#34;headerlink&#34; href=&#34;#2-基础环境&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;configure: error: No Fortran compiler found&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# Ubuntu/Debian&lt;/span&gt;
apt&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;gfortran

&lt;span class=&#34;c1&#34;&gt;# RHEL/openEluer&lt;/span&gt;
yum&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;gcc-gfortran
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;configure: error: C++ preprocessor &amp;ldquo;/lib/cpp&amp;rdquo; fails sanity check&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# Ubuntu/Debian&lt;/span&gt;
apt&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;build-essential
apt&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;g++

&lt;span class=&#34;c1&#34;&gt;# RHEL/openEluer&lt;/span&gt;
yum&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;glibc-headers
yum&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;gcc-c++
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h1 id=&#34;3-各种库和依赖解决&#34;&gt;3. 各种库和依赖解决&lt;a class=&#34;headerlink&#34; href=&#34;#3-各种库和依赖解决&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;R 源码编译安装的时候需要的各种依赖库比较多，如果你有 root 的权限，建议使用 &lt;strong&gt;yum/apt&lt;/strong&gt; 等系统命令解决；如果没有 root 权限，可以手动一个个去解决。&lt;/p&gt;
&lt;h2 id=&#34;31-自动处理&#34;&gt;3.1 自动处理&lt;a class=&#34;headerlink&#34; href=&#34;#31-自动处理&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;针对 RHEL/Debian 一些常见的依赖，使用 yum/apt 自动解决的示例。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;configure: error: &amp;ndash;with-readline=yes (default) and headers/libs are not available&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# Ubuntu/Debian&lt;/span&gt;
apt&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;libreadline-dev

&lt;span class=&#34;c1&#34;&gt;# RHEL/openEluer&lt;/span&gt;
yum&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;readline-devel
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;configure: error: &amp;ndash;with-x=yes (default) and X11 headers/libs are not available&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# Ubuntu/Debian&lt;/span&gt;
apt&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;libx11-dev&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;xorg-dev&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;libcurl4-openssl-dev

&lt;span class=&#34;c1&#34;&gt;# RHEL/openEluer&lt;/span&gt;
yum&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;xorg-x11-server-devel&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;libX11-devel&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;libXt-devel
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;configure: error: &amp;ldquo;liblzma library and headers are required&amp;rdquo;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# Ubuntu/Debian&lt;/span&gt;
apt&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;liblzma-dev

&lt;span class=&#34;c1&#34;&gt;# RHEL/openEluer&lt;/span&gt;
yum&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;lzma-devel&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;xz&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;xz-devel
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;configure: error: PCRE2 library and headers are required, or use &amp;ndash;with-pcre1 and PCRE &amp;gt;= 8.32 with UTF-8 support&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# Ubuntu/Debian&lt;/span&gt;
apt&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;libpcre2-dev

&lt;span class=&#34;c1&#34;&gt;# RHEL/openEluer&lt;/span&gt;
yum&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pcre&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pcre-devel&lt;span class=&#34;w&#34;&gt;         &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 安装 PCRE1&lt;/span&gt;
yum&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pcre2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pcre2-devel&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 安装 PCRE2&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;configure: error: libcurl &amp;gt;= 7.28.0 library and headers are required with support for https&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# Ubuntu/Debian&lt;/span&gt;
apt&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;libcurl4-openssl-dev

&lt;span class=&#34;c1&#34;&gt;# RHEL/openEluer&lt;/span&gt;
yum&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;libcurl-devel
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;jpeg&#34;&gt;JPEG&lt;a class=&#34;headerlink&#34; href=&#34;#jpeg&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;R 安装过程中默认开启 &lt;strong&gt;&amp;ndash;with-jpeglib&lt;/strong&gt;（use jpeglib library (if available) [yes]），但是相关的依赖没有，依然可以正常安装（没有任何报错），但最后会提示：&lt;strong&gt;Capabilities skipped: JPEG！&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# Ubuntu/Debian&lt;/span&gt;
yum&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;libjpeg-dev

&lt;span class=&#34;c1&#34;&gt;# RHEL/openEluer&lt;/span&gt;
yum&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;libjpeg-devel
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;tiff&#34;&gt;TIFF&lt;a class=&#34;headerlink&#34; href=&#34;#tiff&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;R 安装过程中默认开启 &lt;strong&gt;&amp;ndash;with-tifflib&lt;/strong&gt;（use libtiff library (if available) [yes]），但是相关的依赖没有，依然可以正常安装（没有任何报错），但最后会提示：&lt;strong&gt;Capabilities skipped: TIFF！&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# Ubuntu/Debian&lt;/span&gt;
yum&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;libtiff-dev

&lt;span class=&#34;c1&#34;&gt;# RHEL/openEluer&lt;/span&gt;
yum&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;libtiff-devel
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;cairo&#34;&gt;cairo&lt;a class=&#34;headerlink&#34; href=&#34;#cairo&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;R 安装过程中默认开启 &lt;strong&gt;&amp;ndash;with-cairo&lt;/strong&gt;（use cairo (and pango) if available [yes]），但是相关的依赖没有，依然可以正常安装（没有任何报错），但最后会提示：&lt;strong&gt;Capabilities skipped: cairo！&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# Ubuntu/Debian&lt;/span&gt;
apt&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;libcairo2-dev&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;libxt-dev

&lt;span class=&#34;c1&#34;&gt;# RHEL/openEluer&lt;/span&gt;
yum&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;cairo-devel
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;icu&#34;&gt;ICU&lt;a class=&#34;headerlink&#34; href=&#34;#icu&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;R 安装过程中默认开启 &lt;strong&gt;&amp;ndash;with-ICU&lt;/strong&gt;（use ICU library (if available) [yes]），如果不可用，最后会提示：&lt;strong&gt;Capabilities skipped: ICU！&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# Ubuntu/Debian&lt;/span&gt;
apt&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;libicu-dev

&lt;span class=&#34;c1&#34;&gt;# RHEL/openEluer&lt;/span&gt;
yum&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;libicu&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;libicu-devel
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;32-手动处理&#34;&gt;3.2 手动处理&lt;a class=&#34;headerlink&#34; href=&#34;#32-手动处理&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;以下是一些常见的依赖手动解决的示例，可以参考。&lt;/p&gt;
&lt;h3 id=&#34;zlib&#34;&gt;zlib&lt;a class=&#34;headerlink&#34; href=&#34;#zlib&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;根据《&lt;a href=&#34;https://cran.r-project.org/doc/manuals/r-release/R-admin.html#Essential-programs-and-libraries&#34;&gt;R Installation and Administration: A.1 Essential programs and libraries&lt;/a&gt;》官方文档，zlib (version 1.2.5 or later)，至少需要 1.2.5 及以上版本。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Installations of&lt;code&gt;zlib&lt;/code&gt;(version 1.2.5 or later), &lt;code&gt;libbz2&lt;/code&gt;(version 1.0.6 or later: called &lt;strong&gt;bzip2-libs/bzip2-devel&lt;/strong&gt; or &lt;strong&gt;libbz2-1.0/libbz2-dev&lt;/strong&gt; by some Linux distributions) and&lt;code&gt;liblzma&lt;/code&gt;version 5.0.3 or later are required.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;报错：
checking&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;zlib.h...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;yes
checking&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;zlib&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;version&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.2.5...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;no
checking&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;whether&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;zlib&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;support&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;suffices...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;configure:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;error:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;zlib&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;library&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;and&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;headers&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;are&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;required
&lt;span class=&#34;c1&#34;&gt;## 缺少zlib或者zlib版本过低, 要求 zlib 版本 &amp;gt;= 1.2.5&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# download list：http://www.zlib.net/fossils/&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;wget&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;http://www.zlib.net/fossils/zlib-1.2.6.tar.gz
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tar&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;xvf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;zlib-1.2.6.tar.gz
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;zlib-1.2.6
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;./configure&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/Bioinfo/SoftWare/NewLibs/zlib-1.2.6
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;接着安装 R-3.6.0:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;../R-3.6.0
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;./configure&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/Bioinfo/SoftWare/R-3.6.0&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;--enable-R-shlib&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;LDFLAGS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;-L/Bioinfo/SoftWare/NewLibs/zlib-1.2.6/lib&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;CPPFLAGS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;-I/Bioinfo/SoftWare/NewLibs/zlib-1.2.6/include&amp;quot;&lt;/span&gt;

&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;报错：
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;checking&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;zlib.h...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;yes
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;checking&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;zlib&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;version&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.2.5...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;yes
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;checking&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;whether&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;zlib&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;support&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;suffices...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;yes
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;checking&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mmap&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;support&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;zlib...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;yes
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;checking&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;BZ2_bzlibVersion&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-lbz2...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;yes
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;checking&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bzlib.h&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;usability...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;yes
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;checking&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bzlib.h&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;presence...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;yes
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;checking&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bzlib.h...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;yes
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;checking&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bzip2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;version&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.0.6...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;no
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;checking&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;whether&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bzip2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;support&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;suffices...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;configure:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;error:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bzip2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;library&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;and&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;headers&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;are&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;required
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;## zlib 版本已经符合要求，bzip2 版本要求 &amp;gt;= 1.0.6&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;bzip2-or-libbz2&#34;&gt;bzip2 or libbz2&lt;a class=&#34;headerlink&#34; href=&#34;#bzip2-or-libbz2&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;根据《&lt;a href=&#34;https://cran.r-project.org/doc/manuals/r-release/R-admin.html#Essential-programs-and-libraries&#34;&gt;R Installation and Administration: A.1 Essential programs and libraries&lt;/a&gt;》官方文档, libbz2 (version 1.0.6 or later: called bzip2-libs/bzip2-devel or libbz2-1.0/libbz2-dev by some Linux distributions)，至少需要 1.0.6 及以上版本.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;wget&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;http://www.bzip.org/1.0.6/bzip2-1.0.6.tar.gz
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tar&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;zvxf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bzip2-1.0.6.tar.gz
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bzip2-1.0.6
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-f&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Makefile-libbz2_so
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;clean
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;PREFIX&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/Bioinfo/SoftWare/NewLibs/bzip2-1.0.6
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;重新安装 R-3.6.0:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;../R-3.6.0
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;./configure&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/Bioinfo/SoftWare/R-3.6.0&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;--enable-R-shlib&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;LDFLAGS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;-L/Bioinfo/SoftWare/NewLibs/zlib-1.2.6/lib -L/Bioinfo/SoftWare/NewLibs/bzip2-1.0.6/lib&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;CPPFLAGS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;-I/Bioinfo/SoftWare/NewLibs/zlib-1.2.6/include -I/Bioinfo/SoftWare/NewLibs/bzip2-1.0.6/include&amp;quot;&lt;/span&gt;

&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;报错：
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;checking&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bzip2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;version&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.0.6...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;yes
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;checking&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;whether&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bzip2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;support&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;suffices...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;yes
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;checking&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;lzma_version_number&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-llzma...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;yes
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;checking&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;lzma.h&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;usability...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;yes
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;checking&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;lzma.h&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;presence...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;yes
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;checking&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;lzma.h...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;yes
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;checking&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;lzma&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;version&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;5&lt;/span&gt;.0.3...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;yes
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;checking&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pcre_fullinfo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-lpcre...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;no
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;checking&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;whether&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;PCRE&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;support&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;suffices...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;configure:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;error:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pcre&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;8&lt;/span&gt;.10&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;library&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;and&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;headers&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;are&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;required
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;## 要求 pcre &amp;gt;= 8.10 (同时要求 pcre &amp;lt; 10.0, 否则再次安装 R-3.6.0 时报错)&lt;/span&gt;

&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 安装 pcre-8.12，configure 编译 R-3.6.0 时报错:&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;checking&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pcre/pcre.h...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;no
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;checking&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;PCRE&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;version&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;8&lt;/span&gt;.10,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;lt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;10&lt;/span&gt;.0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;and&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;has&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;UTF-8&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;support...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;no
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;checking&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;whether&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;PCRE&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;support&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;suffices...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;configure:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;error:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pcre&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;8&lt;/span&gt;.10&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;library&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;and&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;headers&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;are&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;required
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# PCRE 安装需要 --enable-utf8，同时版本 &amp;gt;= 8.10 且 &amp;lt; 10.0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;pcre&#34;&gt;PCRE&lt;a class=&#34;headerlink&#34; href=&#34;#pcre&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;在《&lt;a href=&#34;https://cran.r-project.org/doc/manuals/r-release/R-admin.html#Essential-programs-and-libraries&#34;&gt;R Installation and Administration: A.1 Essential programs and libraries&lt;/a&gt;》官方文档中要求, PCRE 版本最好在  8.32 及以上.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Either PCRE1 (version 8.32 or later, formerly known as just PCRE) or PCRE2 is required: PCRE2 is preferred and using PCRE1 requires configure option &amp;ndash;with-pcre1. Only the 8-bit library and headers are needed if these are packaged separately. JIT support (optional) is desirable for the best performance. For PCRE2 &amp;gt;= 10.30 (which is desirable as matching has been re-written not to use recursion and the Unicode tables were updated to version 10).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 源码安装 PCRE1&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;wget&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://ftp.pcre.org/pub/pcre/pcre-8.40.tar.gz&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--no-check-certificate
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tar&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;zvxf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pcre-8.40.tar.gz
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pcre-8.40
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;./configure&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/Bioinfo/SoftWare/NewLibs/pcre-8.40&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--enable-utf8
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-j3&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install

&lt;span class=&#34;c1&#34;&gt;# root 安装 PCRE1&lt;/span&gt;
yum&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pcre&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pcre-devel

&lt;span class=&#34;c1&#34;&gt;# 源码的方式安装 PCRE2，这里不介绍，跟源码安装 PCRE1 原理是一样的，自己去谷歌就好&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# root 安装 PCRE2&lt;/span&gt;
yum&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pcre2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pcre2-devel
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;注意:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;R-3.4.2 要求 pcre 版本(&amp;gt;= 8.20, &amp;lt; 10.0)；&lt;/li&gt;
&lt;li&gt;R-4.0.1 要求 PCRE &amp;gt;= 8.32 with UTF-8 support；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;configure: error: PCRE2 library and headers are required, or use &amp;ndash;with-pcre1 and PCRE &amp;gt;= 8.32 with UTF-8 support&lt;/strong&gt;。R-4.0 以上在 configure 时，需要增加一个 &lt;code&gt;--with-pcre1&lt;/code&gt; 参数；或者安装 &lt;strong&gt;PCRE2！&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;重新安装 R-3.6.0:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;../R-3.6.0
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;./configure&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/Bioinfo/SoftWare/R-3.6.0&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;--enable-R-shlib&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;LDFLAGS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;-L/Bioinfo/SoftWare/NewLibs/zlib-1.2.6/lib -L/Bioinfo/SoftWare/NewLibs/bzip2-1.0.6/lib -L/Bioinfo/SoftWare/NewLibs/pcre-8.40/lib&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;CPPFLAGS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;-I/Bioinfo/SoftWare/NewLibs/zlib-1.2.6/include -I/Bioinfo/SoftWare/NewLibs/bzip2-1.0.6/include -I/Bioinfo/SoftWare/NewLibs/pcre-8.40/include&amp;quot;&lt;/span&gt;

&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;报错：
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;checking&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;curl/curl.h&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;usability...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;yes
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;checking&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;curl/curl.h&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;presence...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;yes
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;checking&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;curl/curl.h...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;yes
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;checking&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;libcurl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;is&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;version&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;7&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;and&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;7&lt;/span&gt;.28.0...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;no
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;configure:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;error:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;libcurl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;7&lt;/span&gt;.28.0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;library&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;and&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;headers&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;are&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;required&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;support&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 需要安装 curl &amp;gt;= 7.28.0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;curl-or-libcurl&#34;&gt;curl or libcurl&lt;a class=&#34;headerlink&#34; href=&#34;#curl-or-libcurl&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;在《R Installation and Administration: &lt;a href=&#34;https://cran.r-project.org/doc/manuals/r-release/R-admin.html#Essential-programs-and-libraries&#34;&gt;A.1 Essential programs and libraries&lt;/a&gt;》要求, libcurl 大于或等于  7.22.0 版本。&lt;strong&gt;Library libcurl (version 7.22.0 or later) is required, with at least 7.28.0 being desirable.&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;wget&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://curl.haxx.se/download/curl-7.64.1.tar.gz&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--no-check-certificate
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tar&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;zvxf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;curl-7.64.1.tar.gz
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;curl-7.64.1

&lt;span class=&#34;c1&#34;&gt;## 不指定证书&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;./configure&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/Bioinfo/SoftWare/NewLibs/curl-7.64.1

&lt;span class=&#34;c1&#34;&gt;## 指定证书(推荐)&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;wget&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://curl.haxx.se/ca/cacert.pem&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-O&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/Bioinfo/SoftWare/certs/ca-bundle.crt&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--no-check-certificate
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;./configure&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/Bioinfo/SoftWare/NewLibs/curl-7.64.1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--with-ca-bundle&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/Bioinfo/SoftWare/certs/ca-bundle.crt

$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;如果你有管理员的权限，你也可以使用 root 的方法直接安装 libcurl：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# CentOS 7.6 自带的 libcurl 最新版本应该是 7.29.0-59.el7_9.1&lt;/span&gt;
yum&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;libcurl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;libcurl-devel
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;注意:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;有些情况下，R 在链接一些在线数据库，或者下载某些特殊包时，可能导致 SSL certificate problem: unable to get local issuer certificate 异常，这种情况可以通过 &lt;code&gt;--with-ca-bundle&lt;/code&gt;  指定证书来解决。&lt;/li&gt;
&lt;li&gt;参考下面的内容。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;a href=&#34;https://www.yuque.com/shenweiyan/cookbook/r-ssl-certificate?view=doc_embed&#34;&gt;R 语言关于 SSL 证书异常处理笔记&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;重新安装 R-3.6.0:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;./configure&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/Bioinfo/SoftWare/R-3.6.0&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;--enable-R-shlib&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;LDFLAGS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;-L/Bioinfo/SoftWare/NewLibs/zlib-1.2.6/lib -L/Bioinfo/SoftWare/NewLibs/bzip2-1.0.6/lib -L/Bioinfo/SoftWare/NewLibs/pcre-8.40/lib -L/Bioinfo/SoftWare/NewLibs/curl-7.64.1/lib&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;CPPFLAGS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;-I/Bioinfo/SoftWare/NewLibs/zlib-1.2.6/include -I/Bioinfo/SoftWare/NewLibs/bzip2-1.0.6/include -I/Bioinfo/SoftWare/NewLibs/pcre-8.40/include -I/Bioinfo/SoftWare/NewLibs/curl-7.64.1/include&amp;quot;&lt;/span&gt;

$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make

&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;报错：
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;/Bioinfo/SoftWare/NewLibs/bzip2-1.0.6/lib/libbz2.a:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;could&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;read&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;symbols:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Bad&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;value
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;collect2:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ld&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;returned&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;exit&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;status
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;make&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;***&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;libR.so&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Error&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;make&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Leaving&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;directory&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;/home/shenweiyan/inst/R-3.6.0/src/main&lt;span class=&#34;s1&#34;&gt;&amp;#39;&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;    make[2]: *** [R] Error 2&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;    make[2]: Leaving directory `/home/shenweiyan/inst/R-3.6.0/src/main&amp;#39;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;make&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;***&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;R&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Error&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;make&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Leaving&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;directory&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;/home/shenweiyan/inst/R-3.6.0/src&lt;span class=&#34;err&#34;&gt;&amp;#39;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;make:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;***&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;R&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Error&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 需要使用64位元的方法重新编译 bzip2&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;重装 bzip2-1.0.6, 如下所示, 首先修改 bzip2-1.0.6 的 Makefile 文件:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;CC&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;gcc&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fPIC&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;AR&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ar&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;RANLIB&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ranlib&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;LDFLAGS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;BIGFILES&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D_FILE_OFFSET_BITS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;64&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;然后, 重新编译 bzip2-1.0.6:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;clean
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;PREFIX&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/Bioinfo/SoftWare/NewLibs/bzip2-1.0.6
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;liblzma&#34;&gt;liblzma&lt;a class=&#34;headerlink&#34; href=&#34;#liblzma&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;在编译过程中发现: &lt;strong&gt;&amp;ldquo;configure: error: &amp;ldquo;liblzma library and headers are required&amp;rdquo;&lt;/strong&gt;, 需要安装  xz, 对应主页: &lt;a href=&#34;https://tukaani.org/xz/&#34;&gt;https://tukaani.org/xz/&lt;/a&gt;, 安装如下:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;wget&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://nchc.dl.sourceforge.net/project/lzmautils/xz-5.2.3.tar.gz
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tar&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;zvxf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;xz-5.2.3.tar.gz
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;xz-5.2.3/
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;./configure&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/Bioinfo/SoftWare/NewLibs/xz-5.2.3
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-j3
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;libtiff&#34;&gt;libtiff&lt;a class=&#34;headerlink&#34; href=&#34;#libtiff&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;R shell 中使用 &lt;strong&gt;capabilities()&lt;/strong&gt; 可以查看 R 已经编译支持的功能, 对于画图可以增加下面几个参数, 使 R 支持对应格式的图片保存, 与此同时要确保对应库已经安装.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;--with-cairo&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;use&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;cairo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;and&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pango&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;available&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;yes&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
--with-libpng&lt;span class=&#34;w&#34;&gt;           &lt;/span&gt;use&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;libpng&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;library&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;available&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;yes&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
--with-jpeglib&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;use&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;jpeglib&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;library&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;available&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;yes&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
--with-libtiff&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;use&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;libtiff&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;library&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;available&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;yes&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;以 tiff 为例, 需要安装 libtiff 库:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The bitmapped graphics devices jpeg(),  png() and tiff() need the appropriate headers and libraries installed: jpeg (version 6b or later, or libjpeg-turbo) or libpng (version 1.2.7 or later) and zlib or libtiff(versions 4.0.[5-10] have been tested) respectively.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;wget&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ftp://download.osgeo.org/libtiff/tiff-4.0.9.zip
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;unzip&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tiff-4.0.9.zip
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tiff-4.0.9
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;./configure&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/Bioinfo/SoftWare/NewLibs/tiff-4.0.9
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;如果你有管理员权限，你也可以直接使用 root 直接安装 libtiff：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# CentOS 7.6 自带的 libcurl 最新版本应该是 4.0.3-35.el7&lt;/span&gt;
yum&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;libtiff&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;libtiff-devel
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;然后重新编译 R-3.6.0:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;./configure&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/Bioinfo/SoftWare/R-3.6.0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--enable-R-shlib&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--with-libtiff&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;LDFLAGS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;-L/Bioinfo/SoftWare/NewLibs/tiff-4.0.9/lib&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;CPPFLAGS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;-I/Bioinfo/SoftWare/NewLibs/tiff-4.0.9/include&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;如果 tiff 无法使用, 可以考虑在 \~/.bashrc 中添加 libtiff 库路径, 然后重新再编译 R .&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;LD_LIBRARY_PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/Bioinfo/SoftWare/NewLibs/tiff-4.0.9/lib:&lt;span class=&#34;nv&#34;&gt;$LD_LIBRARY_PATH&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;PKG_CONFIG_PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/Bioinfo/SoftWare/NewLibs/tiff-4.0.9/lib/pkgconfig:&lt;span class=&#34;nv&#34;&gt;$PKG_CONFIG_PATH&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;libjpeg-and-libpng16&#34;&gt;libjpeg and libpng16&lt;a class=&#34;headerlink&#34; href=&#34;#libjpeg-and-libpng16&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;R 安装完以后, 使用 plot 进行画图, 如果出现如下错误:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;plot&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Error&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;display&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;height&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pointsize&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;gamma&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;X11&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;module&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cannot&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;be&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;loaded&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;In&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;addition&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Warning&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;message&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;
&lt;span class=&#34;nf&#34;&gt;In &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;display&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;height&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pointsize&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;gamma&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;unable&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;to&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;load&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;shared&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;object&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;/Bioinfo/SoftWare/R-3.6.0/lib64/R/modules//R_X11.so&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;libjpeg.so.9&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cannot&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;open&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;shared&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;object&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;No&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;such&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;or&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;directory&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;quit&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Save&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;workspace&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;image&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;?&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;n&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;使用 &lt;strong&gt;ldd&lt;/strong&gt; 命令如果看到  libjpeg.so.9、libpng16.so.16 not found，则可以考虑手动安装这两个包：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/Bioinfo/SoftWare/R-3.6.0/bin/R&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;CMD&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ldd&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/Bioinfo/SoftWare/R-3.6.0/lib64/R/modules//R_X11.so
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;linux-vdso.so.1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007fff3c79b000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libtiff.so.5&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/Bioinfo/SoftWare/NewLibs/tiff-4.0.9/lib/libtiff.so.5&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007f75369dc000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libjpeg.so.9&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;found
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libpng16.so.16&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;found
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libpangocairo-1.0.so.0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/lib64/libpangocairo-1.0.so.0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007f75367ba000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libpango-1.0.so.0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/lib64/libpango-1.0.so.0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007f753656e000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libgobject-2.0.so.0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/lib64/libgobject-2.0.so.0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007f7536322000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;......
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;libjpeg.so.9, libpng16.so.16 安装步骤如下:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;wget&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;http://www.ijg.org/files/jpegsrc.v9c.tar.gz
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tar&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;zvxf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;jpegsrc.v9c.tar.gz
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;jpeg-9c
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;./configure&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/Bioinfo/SoftWare/NewLibs/jpeg-9c
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install

$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;wget&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://download.sourceforge.net/libpng/libpng-1.6.37.tar.gz
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tar&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;zvxf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;libpng-1.6.37.tar.gz
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;libpng-1.6.37
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;./configure&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/Bioinfo/SoftWare/NewLibs/libpng-1.6.37
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://libjpeg.sourceforge.net/&#34;&gt;http://libjpeg.sourceforge.net/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;4-完整编译安装命令&#34;&gt;4. 完整编译安装命令&lt;a class=&#34;headerlink&#34; href=&#34;#4-完整编译安装命令&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;如果使用了自定义安装的 gcc/c++ 进行编译, 需要在 configure 时候使用 CC/CXX 进行指定, 否则使用系统默认的 gcc/c++，由于 CentOS-6.5 默认的 gcc==4.4.7, 该版本的 gcc 会导致 R&amp;gt;=3.5.0 编译出现各种错误，非 root 用户手动升级 gcc 可以参考：
&lt;a href=&#34;https://www.yuque.com/shenweiyan/cookbook/linux-gcc-install?view=doc_embed&#34;&gt;非 root 用户手动编译安装 GCC&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;最后，CentOS 下 R 源码安装的完整 configure 命令如下（同样适用于 Ubuntu/Debian）：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 粘贴到命令行时，请把 \ 去掉，连成一行命令再回车执行&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;./configure&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/Bioinfo/SoftWare/R-3.6.0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;CC&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/Bioinfo/SoftWare/gcc-4.8.5/bin/gcc&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;CXX&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/Bioinfo/SoftWare/gcc-4.8.5/bin/c++&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;--enable-R-shlib&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--with-libtiff&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--with-libpng&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--with-jpeglib&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;--with-x&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--with-cairo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--with-pcre1&lt;span class=&#34;se&#34;&gt;\&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;LDFLAGS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;-L/Bioinfo/SoftWare/NewLibs/zlib-1.2.6/lib \&lt;/span&gt;
&lt;span class=&#34;s2&#34;&gt;  -L/Bioinfo/SoftWare/NewLibs/bzip2-1.0.6/lib \&lt;/span&gt;
&lt;span class=&#34;s2&#34;&gt;  -L/Bioinfo/SoftWare/NewLibs/pcre-8.40/lib \&lt;/span&gt;
&lt;span class=&#34;s2&#34;&gt;  -L/Bioinfo/SoftWare/NewLibs/curl-7.64.1/lib \&lt;/span&gt;
&lt;span class=&#34;s2&#34;&gt;  -L/Bioinfo/SoftWare/NewLibs/tiff-4.0.9/lib \&lt;/span&gt;
&lt;span class=&#34;s2&#34;&gt;  -L/Bioinfo/SoftWare/NewLibs/jpeg-9c/lib \&lt;/span&gt;
&lt;span class=&#34;s2&#34;&gt;  -L/Bioinfo/SoftWare/NewLibs/libpng-1.6.37/lib&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;CPPFLAGS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;-I/Bioinfo/SoftWare/NewLibs/zlib-1.2.6/include \&lt;/span&gt;
&lt;span class=&#34;s2&#34;&gt;  -I/Bioinfo/SoftWare/NewLibs/bzip2-1.0.6/include \&lt;/span&gt;
&lt;span class=&#34;s2&#34;&gt;  -I/Bioinfo/SoftWare/NewLibs/pcre-8.40/include \&lt;/span&gt;
&lt;span class=&#34;s2&#34;&gt;  -I/Bioinfo/SoftWare/NewLibs/curl-7.64.1/include \&lt;/span&gt;
&lt;span class=&#34;s2&#34;&gt;  -I/Bioinfo/SoftWare/NewLibs/tiff-4.0.9/include \&lt;/span&gt;
&lt;span class=&#34;s2&#34;&gt;  -I/Bioinfo/SoftWare/NewLibs/jpeg-9c/include \&lt;/span&gt;
&lt;span class=&#34;s2&#34;&gt;  -I/Bioinfo/SoftWare/NewLibs/libpng-1.6.37/include&amp;quot;&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# configure 的所有配置信息，都会保存在 ./Makeconf 文件中&lt;/span&gt;
checking&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;build&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;system&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;type...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;x86_64-pc-linux-gnu
checking&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;host&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;system&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;type...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;x86_64-pc-linux-gnu
loading&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;site&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;script&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;./config.site&amp;#39;&lt;/span&gt;
......
config.status:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;executing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;libtool&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;commands
config.status:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;executing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;stamp-h&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;commands

R&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;is&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;now&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;configured&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;x86_64-pc-linux-gnu

&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Source&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;directory:&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;.
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Installation&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;directory:&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;/Bioinfo/SoftWare/R-3.6.0

&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;C&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;compiler:&lt;span class=&#34;w&#34;&gt;                  &lt;/span&gt;gcc&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-std&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;gnu99&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-g&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-O2
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Fortran&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;fixed-form&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;compiler:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;gfortran&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-g&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-O2

&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Default&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;C++&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;compiler:&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;g++&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-std&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;gnu++11&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-g&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-O2
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;C++14&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;compiler:
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;C++17&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;compiler:
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;C++20&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;compiler:
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Fortran&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;free-form&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;compiler:&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;gfortran&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;-g&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-O2
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Obj-C&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;compiler:

&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Interfaces&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;supported:&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;X11,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tcltk
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;External&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;libraries:&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;pcre2,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;readline,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;curl
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Additional&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;capabilities:&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;PNG,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;JPEG,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;TIFF,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;NLS,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;cairo,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ICU
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Options&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;enabled:&lt;span class=&#34;w&#34;&gt;             &lt;/span&gt;shared&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;R&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;library,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;shared&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;BLAS,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;R&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;profiling

&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Capabilities&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;skipped:
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Options&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;enabled:&lt;span class=&#34;w&#34;&gt;         &lt;/span&gt;memory&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;profiling

&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Recommended&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;packages:&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;yes

configure:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;WARNING:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;you&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;cannot&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;build&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;info&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;or&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;HTML&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;versions&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;R&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;manuals
configure:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;WARNING:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;neither&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;inconsolata.sty&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;nor&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;zi4.sty&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;found:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;PDF&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;vignettes&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;and&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;package&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;manuals&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;will&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;be&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;rendered&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;optimally
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;注意：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;--with-x&lt;/code&gt;，&lt;code&gt;--with-cairo&lt;/code&gt; 是开启 X11 图形化的参数，应该增加一下。&lt;/li&gt;
&lt;li&gt;R-4.0 以上需要增加一个 &lt;code&gt;--with-pcre1&lt;/code&gt; 参数，或者直接使用 PCRE2。&lt;/li&gt;
&lt;li&gt;最后关于 HTML 的 WARNING 不会影响 R 的安装和使用，可以忽略。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;最后，使用 make 和 make install 完成安装。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h1 id=&#34;5-设置环境变量&#34;&gt;5. 设置环境变量&lt;a class=&#34;headerlink&#34; href=&#34;#5-设置环境变量&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;最后, 把安装完成的 R 添加至环境变量:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;R_HOME&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;path-to-R
&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;R_LIBS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$R_HOME&lt;/span&gt;/lib64/R/library
&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;LD_LIBRARY_PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$R_HOME&lt;/span&gt;/lib:&lt;span class=&#34;nv&#34;&gt;$LD_LIBRARY_PATH&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$R_HOME&lt;/span&gt;/bin:&lt;span class=&#34;nv&#34;&gt;$PATH&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;R_LIBS&lt;/strong&gt; 的作用是 python 的 rpy2 调用安装的 R 包时，根据该变量寻找对应的包；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;LD_LIBRARY_PATH&lt;/strong&gt; 则是相关动态依赖库需要查找的路径；&lt;/li&gt;
&lt;li&gt;环境变量设置中比较容易漏掉的是  &lt;strong&gt;PATH&lt;/strong&gt;  和  &lt;strong&gt;LD_LIBRARY_PATH&lt;/strong&gt;，如果是用 root 安装，可能会没有问题，如果安装到个人目录下，不添加这两个变量的话，就无法正确寻找需要的动态链接库，如下：&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;err&#34;&gt;$&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;python&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Python&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;2.7.14&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;default&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Mar&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;9&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2018&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;08&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;39&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;GCC&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;4.8.5&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;20150623&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Red&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Hat&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;4.8.5&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;16&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;linux2&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Type&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;help&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;copyright&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;credits&amp;quot;&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;or&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;license&amp;quot;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;more&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;information&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;rpy2&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;rpy2.robjects&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;as&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;robjects&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Error&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;package&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;or&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;namespace&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;load&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;failed&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;‘&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;stats&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;’&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dyn&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;load&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;DLLpath&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;DLLpath&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;...&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
 &lt;span class=&#34;n&#34;&gt;unable&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;to&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;load&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;shared&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;object&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;/Bioinfo/SoftWare/R-3.6.0/lib64/R/library/stats/libs/stats.so&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
  &lt;span class=&#34;n&#34;&gt;libRlapack&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;so&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cannot&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;open&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;shared&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;object&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;No&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;such&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;file&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;or&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;directory&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;During&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;startup&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;ne&#34;&gt;Warning&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;message&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;package&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;‘&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;stats&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;’&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;options&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;defaultPackages&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;was&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;found&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;robjects&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;r&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;library(splines)&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Error&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;package&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;or&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;namespace&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;load&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;failed&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;‘&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;splines&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;’&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dyn&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;load&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;DLLpath&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;DLLpath&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;...&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
 &lt;span class=&#34;n&#34;&gt;unable&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;to&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;load&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;shared&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;object&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;/Bioinfo/SoftWare/R-3.6.0/lib64/R/library/stats/libs/stats.so&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
  &lt;span class=&#34;n&#34;&gt;libRlapack&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;so&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cannot&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;open&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;shared&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;object&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;No&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;such&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;file&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;or&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;directory&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;Traceback&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;most&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;recent&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;call&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;last&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
  &lt;span class=&#34;n&#34;&gt;File&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;&amp;lt;stdin&amp;gt;&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;line&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;module&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
  &lt;span class=&#34;n&#34;&gt;File&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;/Bioinfo/SoftWare/Python-2.7.14/lib/python2.7/site-packages/rpy2/robjects/__init__.py&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;line&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;269&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;fm&#34;&gt;__call__&lt;/span&gt;
    &lt;span class=&#34;n&#34;&gt;res&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;eval&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
  &lt;span class=&#34;n&#34;&gt;File&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;/Bioinfo/SoftWare/Python-2.7.14/lib/python2.7/site-packages/rpy2/robjects/functions.py&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;line&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;170&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;fm&#34;&gt;__call__&lt;/span&gt;
    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;super&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SignatureTranslatedFunction&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;fm&#34;&gt;__call__&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;**&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;kwargs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
  &lt;span class=&#34;n&#34;&gt;File&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;/Bioinfo/SoftWare/Python-2.7.14/lib/python2.7/site-packages/rpy2/robjects/functions.py&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;line&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;fm&#34;&gt;__call__&lt;/span&gt;
    &lt;span class=&#34;n&#34;&gt;res&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;super&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Function&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;fm&#34;&gt;__call__&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;new_args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;**&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;new_kwargs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;rpy2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rinterface&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;RRuntimeError&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Error&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;package&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;or&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;namespace&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;load&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;failed&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;‘&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;splines&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;’&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dyn&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;load&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;DLLpath&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;DLLpath&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;...&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
 &lt;span class=&#34;n&#34;&gt;unable&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;to&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;load&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;shared&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;object&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;/Bioinfo/SoftWare/R-3.6.0/lib64/R/library/stats/libs/stats.so&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
  &lt;span class=&#34;n&#34;&gt;libRlapack&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;so&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cannot&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;open&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;shared&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;object&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;No&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;such&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;file&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;or&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;directory&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ldd&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/Bioinfo/SoftWare/R-3.6.0/lib64/R/library/stats/libs/stats.so
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;linux-vdso.so.1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007fffd65ba000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libRlapack.so&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;found
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libRblas.so&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;found
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libgfortran.so.3&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/lib64/libgfortran.so.3&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007fed38cbb000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libm.so.6&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/lib64/libm.so.6&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007fed389b9000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libquadmath.so.0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/lib64/libquadmath.so.0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007fed3877c000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libR.so&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;found
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libgomp.so.1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/lib64/libgomp.so.1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007fed38556000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libpthread.so.0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/lib64/libpthread.so.0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007fed38339000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libc.so.6&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/lib64/libc.so.6&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007fed37f76000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libgcc_s.so.1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/lib64/libgcc_s.so.1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007fed37d60000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;/lib64/ld-linux-x86-64.so.2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00005561aa2c3000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;解决方法:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;LD_LIBRARY_PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;/Bioinfo/SoftWare/R-3.6.0/lib64/R/lib:&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$LD_LIBRARY_PATH&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;

$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ldd&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/Bioinfo/SoftWare/R-3.5.0/lib64/R/library/stats/libs/stats.so
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;linux-vdso.so.1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007ffd0f3af000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libRlapack.so&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/Bioinfo/SoftWare/R-3.6.0/lib64/R/lib/libRlapack.so&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007f6509c47000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libRblas.so&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/Bioinfo/SoftWare/R-3.6.0/lib64/R/lib/libRblas.so&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007f6509a19000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libgfortran.so.3&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/lib64/libgfortran.so.3&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007f65096ee000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libm.so.6&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/lib64/libm.so.6&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007f65093ec000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libquadmath.so.0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/lib64/libquadmath.so.0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007f65091af000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libR.so&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/Bioinfo/SoftWare/R-3.6.0/lib64/R/lib/libR.so&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007f6508b81000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libgomp.so.1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/lib64/libgomp.so.1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007f650895b000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libpthread.so.0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/lib64/libpthread.so.0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007f650873e000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libc.so.6&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/lib64/libc.so.6&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007f650837b000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libgcc_s.so.1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/lib64/libgcc_s.so.1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007f6508165000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;/lib64/ld-linux-x86-64.so.2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x000055583c2da000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libreadline.so.6&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/lib64/libreadline.so.6&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007f6507f1e000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libpcre.so.1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/lib64/libpcre.so.1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007f6507cbc000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;liblzma.so.5&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/lib64/liblzma.so.5&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007f6507a96000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libbz2.so.1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/lib64/libbz2.so.1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007f6507885000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libz.so.1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/lib64/libz.so.1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007f650766f000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;librt.so.1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/lib64/librt.so.1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007f6507467000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libdl.so.2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/lib64/libdl.so.2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007f6507262000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;libtinfo.so.5&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/lib64/libtinfo.so.5&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0x00007f6507038000&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;以上就是普通用户源码编译安装最新版本 R 的全部内容, &lt;strong&gt;总的一句话就是缺什么安装什么, 从最基本的 gcc 编译器开始到 R 所需要的各种依赖库&lt;/strong&gt;，直至最终安装完成.。&lt;/p&gt;
&lt;h1 id=&#34;6-参考资料&#34;&gt;6. 参考资料&lt;a class=&#34;headerlink&#34; href=&#34;#6-参考资料&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;R 官方文档，《&lt;a href=&#34;https://cran.r-project.org/doc/manuals/r-release/R-admin.html&#34;&gt;R Installation and Administration&lt;/a&gt;》，CRAN&lt;/li&gt;
&lt;li&gt;沈维燕，《&lt;a href=&#34;https://www.yuque.com/shenweiyan/cookbook/linux-gcc-install&#34;&gt;非 root 用户手动编译安装 GCC&lt;/a&gt;》，语雀&lt;/li&gt;
&lt;li&gt;沈维燕，《&lt;a href=&#34;https://www.yuque.com/shenweiyan/cookbook/r-ssl-certificate&#34;&gt;R 语言关于 SSL 证书异常处理笔记&lt;/a&gt;》，语雀&lt;/li&gt;
&lt;/ul&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/R/2019-07-01-install-latest-r-from-source/</link>
      <pubDate>Mon, 01 Jul 2019 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/R/2019-07-01-install-latest-r-from-source/</guid>
      
    </item>
    
    <item>
      <title>推荐一个由 AI 生成 LOGO 的网站</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2019-07-01&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2019-07-01T00:00:00&#39;&gt;2019-07-01&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-06-25&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-06-25T10:47:18&#39;&gt;2021-06-25&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;在创建项目时，有时需要根据一些文案，设计 LOGO，既要美观大方，又要突出主题。当然，朋友较多的人，去找做 UI 设计的朋友来帮忙，像我这样的&amp;rdquo;孤独患者&amp;rdquo;，就只能寻求 AI 的帮助了。&lt;/p&gt;
&lt;p&gt;本文推荐一个使用 AI 技术制作 LOGO 的平台 Brand Mark：&lt;a href=&#34;https://app.brandmark.io/v2/&#34;&gt;https://app.brandmark.io/v2/&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Brand Mark：为你的业务，创造一个唯一的、专业的 LOGO！&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Brand Mark 网站的使用方式，也非常简单，完全傻瓜式，比如说，我们做一个&amp;rdquo;美图视觉技术部&amp;rdquo;的 LOGO 吧，嗯，这是一个技术很强的部门！
&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FtFLFKnoKUtw4UdFz5EgntKWfd1l.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;第一步，输入品牌名称（Brand Name）和标语（Tagline），如&amp;rdquo;美图视觉技术部&amp;rdquo;和 &amp;ldquo;MeituCloudVision&amp;rdquo;。
&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fk_KsSiltmHkpxUZ1bOXiLl5-pQe.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;第二步，输入一些关键词，确定 LOGO 的风格，比如 computer vision、beautiful、deep learning、cloud 等等。
&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FvcfK0IIHHx5ILOavI4m9vJTJonw.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;第三步，根据喜欢的颜色风格，选择色系，例如活力的 &amp;ldquo;vibrant&amp;rdquo;、热情的 &amp;ldquo;intense&amp;rdquo; 的明亮色系。
&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FvMIoLsVxdZ10tbl6ebvVBdrGAf7.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;第四步，稍等一会，AI 正在处理中&amp;hellip;，最终，算法会创建出各式各样的 LOGO。当然，也可以选择风格，包括 Modern 现代的、Vintage 复古的、Playful 有趣的、Hand writing 手写的等 4 种风格。
&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FqkmOCQWYR2yxNmGCSQ_LvJEMKvQ.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;这样，LOGO 设计完成，业余设计不求人，All with AI！That&amp;rsquo;s all! Enjoy it!&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/Windows/2019-07-01-ai-logo-desig/</link>
      <pubDate>Mon, 01 Jul 2019 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/Windows/2019-07-01-ai-logo-desig/</guid>
      
    </item>
    
    <item>
      <title>CentOS Linux 7 配置 nginx 支持 CGI</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2019-07-01&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2019-07-01T00:00:00&#39;&gt;2019-07-01&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-06-25&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-06-25T10:52:36&#39;&gt;2021-06-25&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Nginx 本身不能执行外部程序，Nginx 处理 PHP 是通过 PHP 的 fastcgi 管理器（php-fpm）进行处理，然后 nginx 再将结果返回给用户；所以如果我们需要通过 cgi 程序（shell、perl、c/c++ 等）来编写网站后台的话，就需要使用 fcgiwrap 这个通用的 fastcgi 进程管理器来帮助 nginx 处理 cgi。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;对于 PHP：只建议使用 PHP-FPM，因为这是官方的解决方案，性能和稳定性肯定是最好的。&lt;/li&gt;
&lt;li&gt;对于其它 CGI 程序：如 Shell、Perl、C/C++、Python，推荐使用 fcgiwrap，这是一个通用的 FCGI 管理器。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;写这篇博客的主要目的也是为了让 Nginx 执行 Shell、Perl、C/C++、Python 程序，因为作为一个生信出身的伪 IT 工作者，Shell、Perl、Python 永远都是我们最熟悉的，用这些语言来编写网站后台可以更加节省我们的时间，效率更高。&lt;/p&gt;
&lt;h1 id=&#34;一概念&#34;&gt;一、概念&lt;a class=&#34;headerlink&#34; href=&#34;#一概念&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id=&#34;1-cgi-与-fastcgi&#34;&gt;1. CGI 与 FastCGI&lt;a class=&#34;headerlink&#34; href=&#34;#1-cgi-与-fastcgi&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;CGI 全称是&amp;rdquo;公共网关接口&amp;rdquo;(Common Gateway Interface)，HTTP 服务器与你的或其它机器上的程序进行 &amp;ldquo;交谈&amp;rdquo; 的一种工具，其程序须运行在网络服务器上。它和 FastCGI（快速通用网关接口）都是语言无关的协议。CGI 诞生已经非常久远了，由于它每次在处理一个请求（连接）时都要重新启动脚本（可执行文件），重新传递所有的环境变量（其中非常多是完全一样的），导致性能非常低下。虽然性能较低，但功不可没，后来出现了性能更高的  &lt;a href=&#34;https://en.wikipedia.org/wiki/FastCGI&#34;&gt;FastCGI&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;FastCGI（简称 FCGI）是 CGI 的增强版本，FCGI 可以简单的理解为 CGI + 多进程模型。FCGI 的工作模式有点类似于 Nginx，一个 Master 进程和多个 Worker 进程。Master 进程主要用来监控 Worker 进程的运行情况，当某个 Worker 进程意外退出时，Master 进程会随即启动一个新的 Worker 进程；Worker 进程则是真正干活的进程，用来执行 CGI 程序（传递环境变量、标准输入），获取 CGI 程序的标准输出，再将其返回为 Web 服务器（如 Apache、Nginx）。Worker 进程处理完请求后不会结束运行，而是继续等待下一个请求的到来，直到我们手动关闭它们。&lt;/p&gt;
&lt;h2 id=&#34;2-spawn-fcgi-与-fcgiwrap&#34;&gt;2. Spawn-FCGI 与  FcgiWrap&lt;a class=&#34;headerlink&#34; href=&#34;#2-spawn-fcgi-与-fcgiwrap&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Spawn-FCGI 是一个通用的 FastCGI 管理服务器，它是 lighttpd 中的一部份，很多人都用 Lighttpd 的 Spawn-FCGI 进行 FastCGI 模式下的管理工作。之前一直以为 Nginx 执行 CGI 程序需要 spawn-fcgi 和 fcgiwrap 两个东西（网上很多文档都是抄来抄去，搞得我也一头雾水，只好照做），但是实际上只需要 fcgiwrap，spawn-fcgi 的作用仅仅是启动和配置 fcgiwrap，这个工作完全可以由 fcgiwrap 自己来完成，所以 spawn-fcgi 不安装也不会影响 fcgiwrap 的使用。&lt;/p&gt;
&lt;p&gt;Spawn-FCGI 目前已经独成为一个项目，更加稳定一些，也给很多 Web 站点的配置带来便利。已经有不少站点将它与 nginx 搭配来解决动态网页。目前 Spawn-FCGI 的下载地址是：&lt;a href=&#34;http://redmine.lighttpd.net/projects/spawn-fcgi&#34;&gt;http://redmine.lighttpd.net/projects/spawn-fcgi&lt;/a&gt;，最新版本是：&lt;a href=&#34;http://download.lighttpd.net/spawn-fcgi/releases-1.6.x/spawn-fcgi-1.6.4.tar.gz&#34;&gt;http://download.lighttpd.net/spawn-fcgi/releases-1.6.x/spawn-fcgi-1.6.4.tar.gz&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/gnosek/fcgiwrap&#34;&gt;FcgiWrap&lt;/a&gt;：Simple FastCGI wrapper for CGI scripts。首先这个东西的作用。它为那些不支持直接运行 CGI 脚本的 Web 服务器提供一种运行 CGI 脚本的方式。&lt;a href=&#34;http://nginx.org/&#34;&gt;NGINX&lt;/a&gt;  就是一个只支持 FastCGI，不支持 CGI 的 HTTP（Web）服务器之一。也是我用得最多最熟悉的 Web 服务器。虽然 Apache 支持直接跑 CGI，但从来没用过它的我对它并不感冒，这里也就不再讨论了。&lt;/p&gt;
&lt;h1 id=&#34;二安装与配置&#34;&gt;二、安装与配置&lt;a class=&#34;headerlink&#34; href=&#34;#二安装与配置&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id=&#34;21-安装-fcgiwrap&#34;&gt;2.1  安装 fcgiwrap&lt;a class=&#34;headerlink&#34; href=&#34;#21-安装-fcgiwrap&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;安装依赖：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;yum&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-y&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;autoconf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;automake&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;libtool&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;fcgi&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;fcgi-devel&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;spawn-fcgi
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;安装 fcgiwrap：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;git&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;clone&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://github.com/gnosek/fcgiwrap
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;fcgiwrap
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;autoreconf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-i
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;./configure&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# fcgiwrap 默认安装到 /usr/local/sbin/fcgiwrap&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;22-配置-spawn-fcgi&#34;&gt;2.2 配置 spawn-fcgi&lt;a class=&#34;headerlink&#34; href=&#34;#22-配置-spawn-fcgi&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;通过 &lt;code&gt;yum install spawn-fcgi&lt;/code&gt;  方式安装的 spawn-fcgi 配置文件默认为：/etc/sysconfig/spawn-fcgi，编辑该文件：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;vi&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/etc/sysconfig/spawn-fcgi

&lt;span class=&#34;c1&#34;&gt;# You must set some working options before the &amp;quot;spawn-fcgi&amp;quot; service will work.&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# If SOCKET points to a file, then this file is cleaned up by the init script.&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;#&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# See spawn-fcgi(1) for all possible options.&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;#&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# Example :&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;#SOCKET=/var/run/php-fcgi.sock&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;#OPTIONS=&amp;quot;-u apache -g apache -s $SOCKET -S -M 0600 -C 32 -F 1 -P /var/run/spawn-fcgi.pid -- /usr/bin/php-cgi&amp;quot;&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;FCGI_SOCKET&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/var/run/fcgiwrap.sock
&lt;span class=&#34;nv&#34;&gt;FCGI_PROGRAM&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/sbin/fcgiwrap
&lt;span class=&#34;nv&#34;&gt;FCGI_USER&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;nginx
&lt;span class=&#34;nv&#34;&gt;FCGI_GROUP&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;nginx
&lt;span class=&#34;nv&#34;&gt;FCGI_EXTRA_OPTIONS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;-M 0777&amp;quot;&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;OPTIONS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;-u &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$FCGI_USER&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; -g &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$FCGI_GROUP&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; -s &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$FCGI_SOCKET&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; -S &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$FCGI_EXTRA_OPTIONS&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; -F 1 -P /var/run/spawn-fcgi.pid -- &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$FCGI_PROGRAM&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;23-启动-spawn-fcgi-服务&#34;&gt;2.3 启动 spawn-fcgi 服务&lt;a class=&#34;headerlink&#34; href=&#34;#23-启动-spawn-fcgi-服务&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@ecs-steven&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conf&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# systemctl enable spawn-fcgi  # 添加开机启动（或者：chkconfig spawn-fcgi on）&lt;/span&gt;
spawn-fcgi.service&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;is&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;a&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;native&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;service,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;redirecting&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/sbin/chkconfig.
Executing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/sbin/chkconfig&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;spawn-fcgi&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;on

$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;systemctl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;start&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;spawn-fcgi&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 启动 spawn-fcgi 服务（或者：service spawn-fcgi start）&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;spawn-fcgi 启动出现下面报错：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@ecs-steven&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# service spawn-fcgi start&lt;/span&gt;
Starting&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;spawn-fcgi&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;via&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;systemctl&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;:&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Job&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;spawn-fcgi.service&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;failed&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;because&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;control&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;process&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;exited&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;error&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;code.&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;See&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;systemctl status spawn-fcgi.service&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;and&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;journalctl -xe&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;details.
&lt;span class=&#34;w&#34;&gt;                                                           &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;FAILED&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;

&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@ecs-steven&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# systemctl status spawn-fcgi.service&lt;/span&gt;
●&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;spawn-fcgi.service&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;LSB:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Start&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;and&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;stop&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FastCGI&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;processes
&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;Loaded:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;loaded&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;/etc/rc.d/init.d/spawn-fcgi&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bad&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;vendor&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;preset:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;disabled&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;Active:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;failed&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;Result:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;exit-code&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;since&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Fri&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2019&lt;/span&gt;-04-26&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;08&lt;/span&gt;:31:51&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;CST&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;9min&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ago
&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;Docs:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;man:systemd-sysv-generator&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;8&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Process:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;7069&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;ExecStart&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/etc/rc.d/init.d/spawn-fcgi&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;start&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;code&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;exited,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;status&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;/FAILURE&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;

Apr&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;26&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;08&lt;/span&gt;:31:51&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ecs-steven&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;systemd&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Starting&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;LSB:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Start&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;and&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;stop&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FastCGI&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;processes...
Apr&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;26&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;08&lt;/span&gt;:31:51&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ecs-steven&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;spawn-fcgi&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;7069&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Starting&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;spawn-fcgi:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;spawn-fcgi:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;can&lt;span class=&#34;err&#34;&gt;&amp;#39;&lt;/span&gt;t&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;find&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;user&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;name&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;nginx
Apr&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;26&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;08&lt;/span&gt;:31:51&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ecs-steven&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;spawn-fcgi&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;7069&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;FAILED&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
Apr&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;26&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;08&lt;/span&gt;:31:51&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ecs-steven&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;systemd&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;spawn-fcgi.service:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;control&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;process&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;exited,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;code&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;exited&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;status&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
Apr&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;26&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;08&lt;/span&gt;:31:51&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ecs-steven&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;systemd&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Failed&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;start&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;LSB:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Start&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;and&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;stop&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;FastCGI&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;processes.
Apr&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;26&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;08&lt;/span&gt;:31:51&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ecs-steven&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;systemd&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Unit&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;spawn-fcgi.service&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;entered&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;failed&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;state.
Apr&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;26&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;08&lt;/span&gt;:31:51&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ecs-steven&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;systemd&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;spawn-fcgi.service&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;failed.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;这种情况我们需要创建 nginx 用户，然后启动  spawn-fcgi.service：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@ecs-steven&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conf&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# /usr/sbin/useradd nginx -s /bin/false&lt;/span&gt;

&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@ecs-steven&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conf&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# service spawn-fcgi start&lt;/span&gt;
Starting&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;spawn-fcgi&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;via&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;systemctl&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;:&lt;span class=&#34;w&#34;&gt;                       &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;OK&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;24-配置-nginx&#34;&gt;2.4 配置 Nginx&lt;a class=&#34;headerlink&#34; href=&#34;#24-配置-nginx&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@ecs-steven&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conf&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# vim nginx.conf&lt;/span&gt;

user&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;nginx&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;nginx&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
worker_processes&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;

error_log&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;logs/error.log&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
pid&lt;span class=&#34;w&#34;&gt;                 &lt;/span&gt;logs/nginx.pid&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;

events&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;worker_connections&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1024&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;

http&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;include&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;mime.types&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;default_type&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;application/octet-stream&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;

&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;log_format&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;main&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;$remote_addr - $remote_user [$time_local] &amp;quot;$request&amp;quot; &amp;#39;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;                      &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;$status $body_bytes_sent &amp;quot;$http_referer&amp;quot; &amp;#39;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;                      &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;quot;$http_user_agent&amp;quot; &amp;quot;$http_x_forwarded_for&amp;quot;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;

&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;access_log&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;logs/access.log&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;main&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;

&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;sendfile&lt;span class=&#34;w&#34;&gt;                    &lt;/span&gt;on&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;#tcp_nopush                 on;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;client_max_body_size&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;50m&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;

&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;keepalive_timeout&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;65&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;gzip&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;on&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;

&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;server&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;listen&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;80&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;server_name&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;localhost&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;

&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;location&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;root&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;html&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;index&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;index.html&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;index.htm&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;error_page&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;500&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;502&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;503&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;504&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;/50x.html&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;location&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/50x.html&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;root&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;html&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;

&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;include&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sites-available/*.conf&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;在 Nginx 目录下添加  sites-available/fcgi.conf：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@ecs-steven&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conf&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# cat sites-available/fcgi.conf&lt;/span&gt;
server&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;listen&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;80&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;

&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;access_log&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;logs/fcgi_access.log&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;error_log&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;logs/fcgi_error.log&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;debug&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;

&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 开启 SSL 配置&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;#listen  443;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;#ssl on;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;#server_name tools.shenweiyan.com;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;#ssl_certificate   ../cert/tools/tools.shenweiyan.com.pem;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;#ssl_certificate_key  ../cert/tools/tools.shenweiyan.com.key;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;#ssl_session_timeout 5m;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;#ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;#ssl_protocols TLSv1 TLSv1.1 TLSv1.2;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;#ssl_prefer_server_ciphers on;&lt;/span&gt;

&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;root&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/apps/tools&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;

&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;location&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;index&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;index.html&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;index.htm&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;

&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;location&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;.*&lt;span class=&#34;se&#34;&gt;\.&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;pl&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;py&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;cgi&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;?$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;include&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;/usr/local/software/nginx/conf/fastcgi_params&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;fastcgi_pass&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;unix:/var/run/fcgiwrap.sock&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;fastcgi_index&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;index.cgi&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;fastcgi_param&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;SCRIPT_FILENAME&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/apps/tools/&lt;span class=&#34;nv&#34;&gt;$fastcgi_script_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;最后，重启 Nginx：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;service&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;nginx&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;reload

或者：
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;systemctl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;restart&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;nginx
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h1 id=&#34;三添加-cgi-程序&#34;&gt;三、添加 CGI 程序&lt;a class=&#34;headerlink&#34; href=&#34;#三添加-cgi-程序&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;编写 CGI 测试程序：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;vim&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/apps/tools/test.cgi

&lt;span class=&#34;c1&#34;&gt;#!/usr/bin/perl -w&lt;/span&gt;
print&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;Content-type: text/html\n\n&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
print&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&amp;lt;html&amp;gt;&amp;lt;head&amp;gt;&amp;lt;title&amp;gt;Hello World!&amp;lt;/title&amp;gt;&amp;lt;/head&amp;gt;\n&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
print&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&amp;lt;body&amp;gt;&amp;lt;h1&amp;gt;Hello world, CGI work!&amp;lt;/h1&amp;gt;&lt;/span&gt;
&lt;span class=&#34;s2&#34;&gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;\n&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;设定权限：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nv&#34;&gt;$chmod&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0755&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/apps/tools/test.cgi
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;chown&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;nginx.nginx&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/apps/tools/test.cgi
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;最后，利用 firefox/chrome 测试！&lt;a href=&#34;http://192.168.xxx.xxx/test.cgi&#34;&gt;http://192.168.xxx.xxx/test.cgi&lt;/a&gt; 访问出现 &amp;ldquo;&lt;strong&gt;Hello world, CGI work!&lt;/strong&gt;&amp;rdquo; 即说明配置部署成功。&lt;/p&gt;
&lt;h1 id=&#34;四参考资料&#34;&gt;四、参考资料&lt;a class=&#34;headerlink&#34; href=&#34;#四参考资料&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;Linux 无限，《&lt;a href=&#34;http://linux.onlinedoc.tw/2017/01/centos7rhel7-nginx-perl-cgi.html&#34;&gt;在 CentOS7/RHEL7 上，為 Nginx 加上 Perl CGI 模組&lt;/a&gt;》，博客&lt;/li&gt;
&lt;li&gt;陪她去流浪，《&lt;a href=&#34;https://blog.twofei.com/642/&#34;&gt;fcgiwrap 的简单使用&lt;/a&gt;》，博客&lt;/li&gt;
&lt;li&gt;Otokaze，《&lt;a href=&#34;https://www.zfl9.com/nginx-fcgi.html&#34;&gt;nginx fastcgi 配置&lt;/a&gt;》，Otokaze&amp;rsquo;s blog&lt;/li&gt;
&lt;li&gt;《&lt;a href=&#34;https://stackoverflow.com/questions/31746462/perl-nginx-403-errors-again&#34;&gt;Perl + nginx 403 errors again&lt;/a&gt;》，Stack Overflow&lt;/li&gt;
&lt;li&gt;《&lt;a href=&#34;https://www.server-world.info/en/note?os=CentOS_6&amp;amp;p=nginx&amp;amp;f=6&#34;&gt;Nginx - Use Perl Script&lt;/a&gt;**》，**Server World&lt;/li&gt;
&lt;li&gt;shouhou2581314，《&lt;a href=&#34;https://blog.51cto.com/thedream/1718527&#34;&gt;nginx 调用 cgi 脚本&lt;/a&gt;》，51CTO 博客&lt;/li&gt;
&lt;/ul&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E5%90%8E%E7%AB%AF/2019-07-01-centos-7-nginx-cgi/</link>
      <pubDate>Mon, 01 Jul 2019 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E5%90%8E%E7%AB%AF/2019-07-01-centos-7-nginx-cgi/</guid>
      
    </item>
    
    <item>
      <title>Windows server 2008 开启端口</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2019-07-01&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2019-07-01T00:00:00&#39;&gt;2019-07-01&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2023-07-19&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2023-07-19T15:15:03&#39;&gt;2023-07-19&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id=&#34;1-问题&#34;&gt;1. 问题&lt;a class=&#34;headerlink&#34; href=&#34;#1-问题&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;将项目部署到 Windows server 2008 服务器上，开启了 http/https 之后，在用服务器本身的浏览器访问：&lt;a href=&#34;http://domain.com&#34;&gt;http://domain.com&lt;/a&gt;  就可以访问，可是在外用其他电脑就访问相同的 url 就不能够访问。&lt;/p&gt;
&lt;h2 id=&#34;2-原因&#34;&gt;2. 原因&lt;a class=&#34;headerlink&#34; href=&#34;#2-原因&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;造成以上问题，很大部分的原因在于服务器的防火墙限制了 80、443 对外的端口，也就是说没有开放这个端口给外部客户端访问。&lt;/p&gt;
&lt;h2 id=&#34;3-开启端口&#34;&gt;3. 开启端口&lt;a class=&#34;headerlink&#34; href=&#34;#3-开启端口&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;windows server 2008 大多数端口都是默认关闭的，这里我们使用 httpd 的 80 端口为例，演示如何开启一个端口。&lt;/p&gt;
&lt;p&gt;&amp;ldquo;&lt;strong&gt;开始&lt;/strong&gt;&amp;rdquo; -&amp;gt; &amp;ldquo;&lt;strong&gt;控制面板&lt;/strong&gt;&amp;rdquo; -&amp;gt;&amp;rdquo;&lt;strong&gt;Windows 防火墙&lt;/strong&gt;&amp;rdquo; -&amp;gt; &amp;ldquo;&lt;strong&gt;高级设置&lt;/strong&gt;&amp;rdquo; -&amp;gt; &amp;ldquo;&lt;strong&gt;入站规则&lt;/strong&gt;&amp;ldquo;：&lt;/p&gt;
&lt;p&gt;选择 &amp;ldquo;&lt;strong&gt;Windows 防火墙&lt;/strong&gt;&amp;ldquo;：
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FuU4mCyOX_sp8wjLIexY2Q3lWL3U.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;选择&amp;rdquo;&lt;strong&gt;高级设置&lt;/strong&gt;&amp;ldquo;：
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FrNz2UBGthK-zZ1Vr7hxBLzyYe2y.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;选择 &amp;ldquo;入站规则&amp;rdquo; → &amp;ldquo;新建规则&amp;rdquo;：
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fn41UCaM6TpIMcc7H6ndGhgpqUkf.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;点击端口：
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Frp1_rWXCD9zjDkpufmBnl0esfLx.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;添加 80 端口：
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fnfc6xDDg6Qq5H907V4kbo7HSpnv.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FjY5C9XEtMxXi9kKRNlnb8AhWbbx.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FjefYCTty1rTBy28IK6ocbBiVeoM.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FsnM5HeP5caLsiAxIMMfoY9QAIsM.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;这样我们就可以访问我们的主机 apache 服务了。&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E5%90%8E%E7%AB%AF/2019-07-01-windows-ports/</link>
      <pubDate>Mon, 01 Jul 2019 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E5%90%8E%E7%AB%AF/2019-07-01-windows-ports/</guid>
      
    </item>
    
    <item>
      <title>Python 中 tkinter 源码安装使用与中文乱码</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2019-07-01&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2019-07-01T00:00:00&#39;&gt;2019-07-01&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2023-06-09&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2023-06-09T14:43:56&#39;&gt;2023-06-09&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id=&#34;_tkinter-not-found&#34;&gt;_tkinter not found&lt;a class=&#34;headerlink&#34; href=&#34;#_tkinter-not-found&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Python 3 源码编译安装，执行 &lt;code&gt;make&lt;/code&gt; 过程中提示 &lt;code&gt;_tkinter not found&lt;/code&gt;，如下：
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make
......
Python&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;build&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;finished&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;successfully!
The&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;necessary&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bits&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;build&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;these&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;optional&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;modules&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;were&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;found:
_tkinter&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;h2 id=&#34;中文乱码&#34;&gt;中文乱码&lt;a class=&#34;headerlink&#34; href=&#34;#中文乱码&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;使用 Anaconda 3（conda 4.5.11）的 tkinter python 包（conda install -c conda-forge tk）开发 GUI 界面程序过程中，发现 UI 界面出现的中文 Unicode 乱码一直没办法解决。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;#-*- coding: utf-8 -*-&lt;/span&gt;

&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;sys&lt;/span&gt;

&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;tkinter&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;top&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Tk&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;top&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;wm_title&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;菜单&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;top&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;geometry&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;800x600+300+100&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# 创建一个菜单项，类似于导航栏&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;menubar&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Menu&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;top&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# 创建菜单项&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;fmenu1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Menu&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;top&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# 如果该菜单时顶层菜单的一个菜单项，则它添加的是下拉菜单的菜单&lt;/span&gt;
&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;item&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;新建文件&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;打开文件&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;结果保存&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt;
    &lt;span class=&#34;n&#34;&gt;fmenu1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;add_command&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;label&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;item&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;fmenu2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Menu&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;top&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;item&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;程序设置&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;程序运行&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt;
    &lt;span class=&#34;n&#34;&gt;fmenu2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;add_command&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;label&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;item&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;fmenu3&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Menu&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;top&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;item&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;使用教程&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;版权信息&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;检查更新&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt;
    &lt;span class=&#34;n&#34;&gt;fmenu3&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;add_command&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;label&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;item&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# add_cascade 的一个很重要的属性就是 menu 属性，它指明了要把那个菜单级联到该菜单项上&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# 当然，还必不可少的就是 label 属性，用于指定该菜单项的名称&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;menubar&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;add_cascade&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;label&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;文件&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;menu&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fmenu1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;menubar&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;add_cascade&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;label&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;程序&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;menu&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fmenu2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;menubar&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;add_cascade&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;label&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;帮助&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;menu&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fmenu3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# 最后可以用窗口的 menu 属性指定我们使用哪一个作为它的顶层菜单&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;top&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;menu&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;menubar&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;top&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mainloop&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fh22i487OzvY-uSXvAuFs6rEXXvu.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;一些参考资料：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Python3.x 中文编码转换的问题：&lt;a href=&#34;https://bbs.bccn.net/thread-479560-1-1.html&#34;&gt;https://bbs.bccn.net/thread-479560-1-1.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Python 2.6 Tk 中文乱码解決方法：&lt;a href=&#34;http://blogkrogh.blogspot.com/2011/03/python-26-tk.html&#34;&gt;http://blogkrogh.blogspot.com/2011/03/python-26-tk.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;tkinter 乱码，pyqt4 乱码：&lt;a href=&#34;http://aboutweb.lofter.com/post/11743e_6f7e4a5&#34;&gt;http://aboutweb.lofter.com/post/11743e_6f7e4a5&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;上面几种方法测试后，问题依然存在。在 google 上一番搜索和来回测试之后，发现了几点信息：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;有人说，可能是 tcl/tk 安装不完整造成的。&lt;/li&gt;
&lt;li&gt;tcl/tk 重装后需要对 Python 重新编译 tkinter 才能起作用。&lt;/li&gt;
&lt;li&gt;conda install -c conda-forge tk，虽然没有任何报错，python2 中 import tkinter 也正常，但 conda 的软件安装就像一个黑盒子，无法确认 tcl/tk 是否完整安装。&lt;/li&gt;
&lt;li&gt;python 的 PyPI 仓库中是没有 tkinter 包的，想要使用 &lt;code&gt;pip install tkinter&lt;/code&gt; 卸载或者重装都是行不通的。&lt;/li&gt;
&lt;li&gt;网上也有人说可以使用 &lt;code&gt;yum install python3-tk/python-tk&lt;/code&gt; 解决，但对于本人来说，没用。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;什么是-tcl-tk-tkinter&#34;&gt;什么是 tcl, tk, tkinter&lt;a class=&#34;headerlink&#34; href=&#34;#什么是-tcl-tk-tkinter&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;The &lt;a href=&#34;https://docs.python.org/3.6/library/tkinter.html#module-tkinter&#34;&gt;tkinter&lt;/a&gt; package (“Tk interface”) is the standard Python interface to the Tk GUI toolkit. Both Tk and &lt;a href=&#34;https://docs.python.org/3.6/library/tkinter.html#module-tkinter&#34;&gt;tkinter&lt;/a&gt; are available on most Unix platforms, as well as on Windows systems. (Tk itself is not part of Python; it is maintained at ActiveState.)&lt;/p&gt;
&lt;p&gt;Running &lt;code&gt;python -m tkinter&lt;/code&gt; from the command line should open a window demonstrating a simple Tk interface, letting you know that &lt;a href=&#34;https://docs.python.org/3.6/library/tkinter.html#module-tkinter&#34;&gt;tkinter&lt;/a&gt; is properly installed on your system, and also showing what version of Tcl/Tk is installed, so you can read the Tcl/Tk documentation specific to that version.&lt;/p&gt;
&lt;p&gt;From &lt;a href=&#34;https://docs.python.org/3/library/tkinter.html&#34;&gt;https://docs.python.org/3/library/tkinter.html&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Tcl 是&amp;rdquo;工具控制语言（Tool Control Language）&amp;rdquo;的缩写。Tk 是 Tcl &amp;ldquo;图形工具箱&amp;rdquo; 的扩展，它提供各种标准的 GUI 接口项，以利于迅速进行高级应用程序开发。&lt;/p&gt;
&lt;p&gt;tkinter 包（&amp;rdquo;Tk 接口&amp;rdquo;）是 Tk GUI 工具包的标准 Python 接口。 Tk 和  tkinter 在大多数 Unix 平台以及 Windows 系统上都可用（Tk 本身不是 Python 的一部分，它在 ActiveState 中维护）。您可以通过从命令行运行  &lt;code&gt;python -m tkinter&lt;/code&gt;来检查  tkinter 是否已正确安装在系统上。如果已经安装该命令会打开一个简单的 Tk 界面，该界面除了让我们知道 tkinter 已正确安装，并且还显示安装了哪个版本的 Tcl/Tk，因此我们可以阅读特定于该版本的 Tcl/Tk 文档。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FpWx6rSTKaQ1BXXPQJzchNbviKYd.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;如果  tkinter  没有安装，则会提示找不到该包（注意在 Python 2 中该包包名为 Tkinter，Python 3 中为 tkinter）：&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FrRwzLFA1tIq2VfwS4p7i0dVLTjP.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;接下来我们将尝试在 Python 2/3 中安装 Tcl/Tk，并重新编译 Python 2/3，已完成 Tkinter 安装（tkinter 为 Python 的标准库，标准库的安装需要重新编译 Python ？）。&lt;/p&gt;
&lt;h2 id=&#34;activetcl-安装&#34;&gt;ActiveTcl 安装&lt;a class=&#34;headerlink&#34; href=&#34;#activetcl-安装&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;ActiveTcl 是 ActiveState 发布的关于 Tcl/Tk 的发行版本，该发行版本包含了最新版本的 Tk 和 Tcl 程序，我们下载其免费的社区版本进行安装即可。&lt;/p&gt;
&lt;p&gt;参考下载链接：&lt;a href=&#34;https://www.activestate.com/products/activetcl/downloads/&#34;&gt;https://www.activestate.com/products/activetcl/downloads/&lt;/a&gt;
参考安装教程：&lt;a href=&#34;https://tkdocs.com/tutorial/install.html&#34;&gt;https://tkdocs.com/tutorial/install.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;以下为 CentOS 7 下 &lt;strong&gt;ActiveTcl-8.6.8.0&lt;/strong&gt; 的一些安装记录，仅作参考。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;wget&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://downloads.activestate.com/ActiveTcl/releases/8.6.8.0/ActiveTcl-8.6.8.0-x86_64-linux-glibc-2.5.tar.gz
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tar&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;zvxf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ActiveTcl-8.6.8.0-x86_64-linux-glibc-2.5.tar.gz
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ActiveTcl-8.6.8.0-x86_64-linux-glibc-2.5-28eabcbe7
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;./install.sh
Welcome&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to

&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;ActiveTcl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Community&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Edition&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Linux/x86_64

Supported&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Packages:

&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;Tcl&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;8&lt;/span&gt;.6&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;Thread&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;.7.3
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;Tk&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;8&lt;/span&gt;.6&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;trofs&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;.4.9

Extra&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Packages:

&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;zlib&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.2.11
&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;libiconv&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.15

&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;...

&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;Cancel&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;C
&lt;span class=&#34;nv&#34;&gt;Next&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;RET&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;【Enter&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;回车】

&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;...

Cancel&lt;span class=&#34;w&#34;&gt;         &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;no&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;RET&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
Accept&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;License&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;yes&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;A&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;yes

Please&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;specify&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;installation&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;directory.
Path&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;/opt/ActiveTcl-8.6&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/local/software/ActiveTcl-8.6

Please&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;specify&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;directory&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;demos.
Path&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;/usr/local/software/ActiveTcl-8.6/demos&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;【Enter&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;回车】

...

Installing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ActiveTcl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;...
Installing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;demos&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;...
Done&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;...
Finishing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;installation
Patching&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;shells&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;and&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;libraries&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;new&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;location&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;...
*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/local/software/ActiveTcl-8.6/bin/tclsh8.6&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;...
*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/local/software/ActiveTcl-8.6/bin/wish8.6&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;...

...

For&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;a&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;csh&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;or&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;compatible&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;perform
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;setenv&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;PATH&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;/usr/local/software/ActiveTcl-8.6/bin:&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PATH&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;

For&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;a&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sh&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;or&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;similar&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;perform
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;/usr/local/software/ActiveTcl-8.6/bin:&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PATH&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;PATH

Some&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;shells&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;bash&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;example&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;allow
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;/usr/local/software/ActiveTcl-8.6/bin:&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PATH&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;

Similar&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;changes&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;are&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;required&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;MANPATH
Finish&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;gt;&amp;gt;

Do&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;you&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;want&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;download&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;a&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;free&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;trial&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Komodo&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;IDE?&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;Y/n&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;ActiveTcl 安装完成后，需要把 path 添加至环境变量（\~/.bashrc）:
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;export PATH=&amp;quot;/usr/local/software/ActiveTcl-8.6/bin:$PATH&amp;quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;h2 id=&#34;python-重新编译安装&#34;&gt;Python 重新编译安装&lt;a class=&#34;headerlink&#34; href=&#34;#python-重新编译安装&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;参考：&lt;a href=&#34;https://docs.python.org/3/whatsnew/3.11.html&#34;&gt;What’s New In Python 3.11&lt;/a&gt; - doc.python.org&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;📢 &lt;strong&gt;注意：&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Python 3.11.x 起（如 Python-3.11.3）中的 &lt;code&gt;configure&lt;/code&gt; 已经把 &lt;code&gt;--with-tcltk-includes&lt;/code&gt;和&lt;code&gt;--with-tcltk-libs&lt;/code&gt;这两个参数移除！并使用 &lt;code&gt;TCLTK_CFLAGS&lt;/code&gt; 和 &lt;code&gt;TCLTK_LIBS&lt;/code&gt; ！！！&lt;/li&gt;
&lt;li&gt;Python 3.10.x (及以下版本，如 Python-3.9.16) 以及 Python 2.x.x 在 &lt;code&gt;configure&lt;/code&gt; 中 &lt;code&gt;--with-tcltk-includes&lt;/code&gt;和&lt;code&gt;--with-tcltk-libs&lt;/code&gt;都是有的！而且通过这两个参数的确可以解决 Tkinter 的问题！！&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;python-3&#34;&gt;Python 3&lt;a class=&#34;headerlink&#34; href=&#34;#python-3&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;这里以 Python-3.11.6 为例，参考 &lt;a href=&#34;https://github.com/pyenv/pyenv/issues/2499&#34;&gt;Python 3.11.0 install doesn’t recognize homebrew Tcl/Tk due to &amp;ndash;with-tcltk-libs, &amp;ndash;with-tcltk-includes switches being removed from 3.11 - pyenv#2499&lt;/a&gt;，在编译安装过程中使用 &lt;code&gt;TCLTK_CFLAGS&lt;/code&gt; 和 &lt;code&gt;TCLTK_LIBS&lt;/code&gt; 解决 &lt;code&gt;_tkinter&lt;/code&gt; 缺失的问题。
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;export TCLTK_LIBS=&amp;quot;-L/usr/local/software/ActiveTcl-8.6/lib -ltcl8.6 -ltk8.6&amp;quot;
export TCLTK_CFLAGS=&amp;quot;-I/usr/local/software/ActiveTcl-8.6/include&amp;quot;

cd Python-3.11.6
/configure --prefix=/usr/local/software/python-3.11.6 ......
make &amp;amp;&amp;amp; make install
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;python3-confiigure-tkinter-yes&#34; src=&#34;https://slab-1251708715.cos.ap-guangzhou.myqcloud.com/KGarden/2023/python-3-tkinter.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;python-2&#34;&gt;Python 2&lt;a class=&#34;headerlink&#34; href=&#34;#python-2&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;想要在 Python 2.7 安装 Tkinter，需要在编译过程中通过 &lt;code&gt;--with-tcltk-includes&lt;/code&gt; 和 &lt;code&gt;--with-tcltk-libs&lt;/code&gt; 中指定 ActiveTcl 的头文件以及库所在路径。&lt;/p&gt;
&lt;p&gt;如果在执行编译安装过程中，出现无法找到 libXss.so.1 共享动态库报错：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tar&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;zvxf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Python-2.7.15.tgz
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Python-2.7.15
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;./configure&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/software/python-2.7&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--with-tcltk-includes&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;-I/usr/local/software/ActiveTcl-8.6/include&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--with-tcltk-libs&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;/usr/local/software/ActiveTcl-8.6/lib/libtcl8.6.so /usr/local/software/ActiveTcl-8.6/lib/libtk8.6.so&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--enable-optimizations
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make

......

warning:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;building&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bundled&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;copy&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;libffi&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;is&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;deprecated&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;on&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;this&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;platform.&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;It&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;will&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;be&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;distributed&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Python&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;.7
***&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;WARNING:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;renaming&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;_tkinter&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;since&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;importing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;it&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;failed:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;libXss.so.1:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;cannot&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;open&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;shared&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;object&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;No&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;such&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;or&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;directory

Python&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;build&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;finished&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;successfully!
The&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;necessary&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bits&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;build&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;these&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;optional&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;modules&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;were&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;found:
_dbm&lt;span class=&#34;w&#34;&gt;                  &lt;/span&gt;_gdbm
To&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;find&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;necessary&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bits,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;look&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;setup.py&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;detect_modules&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;module&lt;span class=&#34;err&#34;&gt;&amp;#39;&lt;/span&gt;s&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;name.

The&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;following&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;modules&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;found&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;by&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;detect_modules&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;setup.py,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;have&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;been
built&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;by&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Makefile&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;instead,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;as&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;configured&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;by&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Setup&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;files:
atexit&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;pwd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;                   &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;time&lt;/span&gt;

Following&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;modules&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;built&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;successfully&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;but&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;were&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;removed&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;because&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;they&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;could&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;be&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;imported:
_tkinter

running&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;build_scripts

......
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;CentOS 下请参考以下解决方法：
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$ sudo yum install libXScrnSaver libXScrnSaver-devel
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;h2 id=&#34;调用-tkinter&#34;&gt;调用 Tkinter&lt;a class=&#34;headerlink&#34; href=&#34;#调用-tkinter&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Python 2 重新编译完后，执行&lt;code&gt;python2 -m Tkinter&lt;/code&gt; 显示 Tk 的 ui 界面，以及相应的 Tcl/Tk 版本。
&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FgBtb14ZgZFZXIRhOdt6efbYz7fd.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;这时候，我们重新运行开头的 GUI 界面程序，可以看到中文已经正常显示：
&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FqRHUXczPdHrQjFUXNQr_Cg_j2B4.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;参考资料&#34;&gt;参考资料&lt;a class=&#34;headerlink&#34; href=&#34;#参考资料&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Download And Install Tcl: ActiveTcl，&lt;a href=&#34;https://www.activestate.com/products/activetcl/downloads/&#34;&gt;https://www.activestate.com/products/activetcl/downloads/&lt;/a&gt;
Installing Tk，&lt;a href=&#34;https://tkdocs.com/tutorial/install.html&#34;&gt;https://tkdocs.com/tutorial/install.html&lt;/a&gt;
Python 下&amp;rdquo;No module named _tkinter&amp;rdquo;问题解决过程分析，&lt;a href=&#34;https://www.jianshu.com/p/0baa9657377f&#34;&gt;https://www.jianshu.com/p/0baa9657377f&lt;/a&gt;
Python GUI 编程(Tkinter)文件对话框，&lt;a href=&#34;https://my.oschina.net/u/2245781/blog/661533&#34;&gt;https://my.oschina.net/u/2245781/blog/661533&lt;/a&gt;&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E5%9B%BE%E5%83%8F%E4%B8%8EGUI/2019-07-01-tkinter-unicode-issues/</link>
      <pubDate>Mon, 01 Jul 2019 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E5%9B%BE%E5%83%8F%E4%B8%8EGUI/2019-07-01-tkinter-unicode-issues/</guid>
      
    </item>
    
    <item>
      <title>从 Blast2GO 到 MySQL 源码编译安装</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2019-07-01&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2019-07-01T00:00:00&#39;&gt;2019-07-01&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-06-25&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-06-25T10:38:23&#39;&gt;2021-06-25&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Blast2GO 是一个基于序列相似性搜索的 GO 注释和功能分析工具，它可以直接统计分析基因功能信息，并可视化 GO 有向非循环图（DAG）上的相关功能特征，分析 BLAST、GO-mapping、GO 注释分析和富集分析结果。&lt;/p&gt;
&lt;p&gt;Blast2GO Command Line (CLI) 的使用需要满足 Java 与 MySQL 的预安装。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Blast2GO Command Line (CLI) is a Java application and can be run on Mac, Linux and Windows 64-bit systems. It is always necessary to have Java 64-bit (version 1.6 or higher preferably from Sun/Oracle) installed, at least 1GB of RAM is recommended. The Blast2GO Command Line needs a Blast2GO database (DB) to perform the mapping step. This DB can be generated with the CLI itself; however the previous installation and configuration of a MySQL server (GPL license) is necessary.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;From：&lt;a href=&#34;https://www.blast2go.com/images/b2g_pdfs/blast2go_cli_manual.pdf&#34;&gt;Blast2GO Command Line User Manual&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;作为 Blast2GO 本地化所依赖的数据库，下面我们介绍一下 MySQL 的安装配置、存储位置修改及新版中低级密码设置不允许的解决方法。&lt;/p&gt;
&lt;h1 id=&#34;一mysql-各个版本区别&#34;&gt;一、MySQL 各个版本区别&lt;a class=&#34;headerlink&#34; href=&#34;#一mysql-各个版本区别&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;MySQL 的官网下载地址 &lt;a href=&#34;https://www.mysql.com/downloads/&#34;&gt;https://www.mysql.com/downloads/&lt;/a&gt; 的界面会有几个版本的选择，这几个版本的区别如下。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Oracle MySQL Cloud Service (commercial)。
  基于 MySQL 企业版构建的  Oracle MySQL 云服务，由 Oracle Cloud 提供技术支持，提供企业级的 MySQL 数据库服务，需付费。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;MySQL Enterprise Edition (commercial)。
  MySQL 企业版本，包含了最全面的 MySQL 高级特性和管理工具。需付费，可以试用 30 天。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;MySQL Cluster CGE (commercial)。
  MySQL 高级集群版，是一个实时开源事务数据库，专为在高吞吐量条件下快速，永久地访问数据而设计。需付费。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;MySQL Community Edition (GPL)。
  MySQL 社区版本，开源免费，但不提供官方技术支持。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;MySQL Community Edition(社区免费版，&lt;a href=&#34;https://dev.mysql.com/downloads/&#34;&gt;https://dev.mysql.com/downloads/&lt;/a&gt;) 又分为 MySQL Community Server、MySQL Cluster、MySQL Router、MySQL Shell、MySQL Workbench、MySQL on Windows、&amp;hellip;、MySQL SUSE Repository 等根据不同的操作系统平台细分为多个版本。其中 MySQL Community Server 是开源免费的，这也是我们通常用的 MySQL 的版本。&lt;/p&gt;
&lt;h1 id=&#34;二mysql-免安装版&#34;&gt;二、MySQL 免安装版&lt;a class=&#34;headerlink&#34; href=&#34;#二mysql-免安装版&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;MySQL 提供了 rpm、源码、免安装等多种安装方式，其中通过源码编译安装是比较耗时，过程相对复杂的一个过程。对于不想使用源码编译安装的童鞋，MySQL 提供了免安装直接解压可用的版本。
&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fh5NUAWJ25GUb2vn7p982emfFEMd.png&#34; /&gt;
&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FoWgUlawC4kF4iH8tajp8oE2fFNM.png&#34; /&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;wget&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://cdn.mysql.com/archives/mysql-8.0/mysql-8.0.12-el7-x86_64.tar.gz
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h1 id=&#34;三mysql-源码包下载&#34;&gt;三、MySQL 源码包下载&lt;a class=&#34;headerlink&#34; href=&#34;#三mysql-源码包下载&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;我们以 CentOS/RedHat 平台为例来说明。进入 MySQL Community Server 下载页面 &lt;a href=&#34;https://dev.mysql.com/downloads/mysql/&#34;&gt;https://dev.mysql.com/downloads/mysql/&lt;/a&gt; ，在适合 Linux 系统的 Source Code 源码中选择带有 Boost 头的压缩包（MySQL 需要 Boost C++ 库构建）进行下载。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Source Code：源代码下载&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Generic Linux (Architecture Independent)：通用的 Linux（独立结构）。
  &lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FtDJUdcOkvmSrWsdwxDiNp_PbMLE.png&#34; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;点击下载，需要注册 Oracle 账号，这里不细说。
  &lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FvhmYBnQMuo7TS6r3G-BWkPSMZou.png&#34; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;wget&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-boost-8.0.12.tar.gz
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;其他下载版本&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果想要下载其他版本的 MySQL，可以在 &lt;a href=&#34;https://downloads.mysql.com/archives/community/&#34;&gt;https://downloads.mysql.com/archives/community/&lt;/a&gt; 选择符合自己服务器的版本进行下载。
&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FsNFOVdmpE8AX7AQf5GWHNtDwF5I.png&#34; /&gt;&lt;/p&gt;
&lt;h1 id=&#34;四mysql-源码编译安装&#34;&gt;四、MySQL 源码编译安装&lt;a class=&#34;headerlink&#34; href=&#34;#四mysql-源码编译安装&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id=&#34;1-安装依赖包&#34;&gt;1. 安装依赖包&lt;a class=&#34;headerlink&#34; href=&#34;#1-安装依赖包&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@ecs-steven&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# yum -y install gcc gcc-c++ ncurses ncurses-devel cmake bison doxygen&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;2-新建-mysql-用户和用户组&#34;&gt;2. 新建 MySQL 用户和用户组&lt;a class=&#34;headerlink&#34; href=&#34;#2-新建-mysql-用户和用户组&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@ecs-steven&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# groupadd -r mysql &amp;amp;&amp;amp; useradd -r -g mysql -s /sbin/nologin -M mysql&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;3-新建-mysql-数据库数据文件目录&#34;&gt;3. 新建 MySQL 数据库数据文件目录&lt;a class=&#34;headerlink&#34; href=&#34;#3-新建-mysql-数据库数据文件目录&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@ecs-steven&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# mkdir /usr/local/software/mysql&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# mysql-8.0.12 中可以不用新建数据保存的路径，在初始化 MySQL 数据库时可通过 --datadir 参数自动生成&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@ecs-steven&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# mkdir /usr/local/software/mysql/{log,data} -p&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Tip：真实的生产环境一般来说会把数据独立放在根目录下，方便磁盘挂载上去。&lt;/p&gt;
&lt;h2 id=&#34;4-执行预编译&#34;&gt;4. 执行预编译&lt;a class=&#34;headerlink&#34; href=&#34;#4-执行预编译&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@ecs-steven&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mysql-8.0.12&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/software/mysql \&lt;/span&gt;
-DMYSQL_DATADIR&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/software/mysql/data&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&lt;/span&gt;
-DWITH_BOOST&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;./boost&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&lt;/span&gt;
-DSYSCONFDIR&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/etc&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&lt;/span&gt;
-DWITH_INNOBASE_STORAGE_ENGINE&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&lt;/span&gt;
-DWITH_FEDERATED_STORAGE_ENGINE&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&lt;/span&gt;
-DWITH_BLACKHOLE_STORAGE_ENGINE&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&lt;/span&gt;
-DWITH_ARCHIVE_STORAGE_ENGINE&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&lt;/span&gt;
-DWITH_MYISAM_STORAGE_ENGINE&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&lt;/span&gt;
-DWITH_PARTITION_STORAGE_ENGINE&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&lt;/span&gt;
-DENABLED_LOCAL_INFILE&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&lt;/span&gt;
-DDEFAULT_CHARSET&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;utf8mb4&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&lt;/span&gt;
-DDEFAULT_COLLATION&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;utf8mb4_general_ci&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&lt;/span&gt;
-DWITH_EMBEDDED_SERVER&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&lt;/span&gt;
-DEXTRA_CHARSETS&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;all&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&lt;/span&gt;
-DMYSQL_TCP_PORT&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3306&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&lt;/span&gt;
-DWITH_SSL&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;system&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&lt;/span&gt;
-DMYSQL_UNIX_ADDR&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/software/mysql/mysqld.sock
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;各个参数解释：(详细说明，参考 MySQL 8.0 Reference Manual - &lt;a href=&#34;https://dev.mysql.com/doc/refman/8.0/en/source-configuration-options.html&#34;&gt;2.8.4 MySQL Source-Configuration Options&lt;/a&gt;)&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;-DCMAKE_INSTALL_PREFIX&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/software/mysql&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;//安装路径
-DMYSQL_DATADIR&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/software/mysql/data&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;//数据文件存放位置
-DWITH_BOOST&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;./boost&lt;span class=&#34;w&#34;&gt;                              &lt;/span&gt;//指定&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;boost&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;的位置
-DSYSCONFDIR&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/etc&lt;span class=&#34;w&#34;&gt;                                 &lt;/span&gt;//设置&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;my.cnf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;配置文件的所在目录，默认为安装目录
-DWITH_INNOBASE_STORAGE_ENGINE&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;                  &lt;/span&gt;//安装&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;InnoDB&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;引擎
-DWITH_BLACKHOLE_STORAGE_ENGINE&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;                 &lt;/span&gt;//安装&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;blackhole&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;存储引擎
-DWITH_ARCHIVE_STORAGE_ENGINE&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;                   &lt;/span&gt;//安装&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;archive&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;存储引擎
-DWITH_MYISAM_STORAGE_ENGINE&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;                    &lt;/span&gt;//安装&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;myisam&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;存储引擎
-DWITH_PARTITION_STORAGE_ENGINE&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;                 &lt;/span&gt;//安装支持数据库分区
-DENABLED_LOCAL_INFILE&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;                          &lt;/span&gt;//允许从本地导入数据
-DDEFAULT_CHARSET&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;utf8mb4&lt;span class=&#34;w&#34;&gt;                         &lt;/span&gt;//存储&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;emoji&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;时使用&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;utf8&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;数据会出错，建议使用完全兼容&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;utf8&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;的&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;utf8mb4
-DDEFAULT_COLLATION&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;utf8mb4_general_ci&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;//设置默认校对规则
-DWITH_EMBEDDED_SERVER&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;                          &lt;/span&gt;//嵌入式服务器，MySQL&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;8&lt;/span&gt;.0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;起该参数已经被移除
-DEXTRA_CHARSETS&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;all&lt;span class=&#34;w&#34;&gt;                              &lt;/span&gt;//安装所有扩展字符集
-DMYSQL_TCP_PORT&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3306&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;                             &lt;/span&gt;//指定&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;TCP&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;端口为&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3306&lt;/span&gt;
-DWITH_SSL&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;system&lt;span class=&#34;w&#34;&gt;                                 &lt;/span&gt;//启用系统&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;OpenSSL&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;库支持（yes&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;等同于&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;system&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;）
-DMYSQL_UNIX_ADDR&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/software/mysql/mysqld.sock&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;//指定&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mysql.sock&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;路径
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;5-编译安装&#34;&gt;5. 编译安装&lt;a class=&#34;headerlink&#34; href=&#34;#5-编译安装&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@ecs-steven&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mysql-8.0.12&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# make -j `grep processor /proc/cpuinfo | wc -l`&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;#编译很消耗系统资源，小内存可能编译通不过&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@ecs-steven&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mysql-8.0.12&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# make install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;6-配置-mycnf-文件&#34;&gt;6. 配置 my.cnf 文件&lt;a class=&#34;headerlink&#34; href=&#34;#6-配置-mycnf-文件&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;MySQL 服务器有许多操作参数，我们可以使用命令行选项或配置文件（option files）在服务器启动时更改这些参数。&lt;/p&gt;
&lt;p&gt;在 Windows 上，MySQL 安装程序会在基本安装目录中创建名为 my.ini 的文件作为默认选项文件（没有的话，可以自行创建）。在 Linux 中，MySQL 服务会依次从 /etc/my.cnf、/etc/mysql/my.cnf、/usr/local/mysql/etc/my.cnf、\~/.my.cnf 读取默认的 my.cnf 配置文件；在命令行下可使用 mysqld &amp;ndash;verbose &amp;ndash;help 命令查看 MySQL 读取配置文件后启动的参数。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@ecs-steven&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;etc&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# cat /etc/my.cnf&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;client&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;port&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3306&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;socket&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/local/software/mysql/mysqld.sock

&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;mysqld&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;port&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3306&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;socket&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/local/software/mysql/mysqld.sock
&lt;span class=&#34;nv&#34;&gt;basedir&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/local/software/mysql
&lt;span class=&#34;nv&#34;&gt;datadir&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/local/software/mysql/data
pid-file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/local/software/mysql/data/mysql.pid
&lt;span class=&#34;nv&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mysql
bind-address&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;.0.0.0
server-id&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
init-connect&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;SET NAMES utf8mb4&amp;#39;&lt;/span&gt;
character-set-server&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;utf8mb4
&lt;span class=&#34;nv&#34;&gt;back_log&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;300&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;max_connections&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1000&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;max_connect_errors&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;6000&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;open_files_limit&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;65535&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;table_open_cache&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;128&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;max_allowed_packet&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;4M
&lt;span class=&#34;nv&#34;&gt;binlog_cache_size&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;1M
&lt;span class=&#34;nv&#34;&gt;max_heap_table_size&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;8M
&lt;span class=&#34;nv&#34;&gt;tmp_table_size&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;16M
&lt;span class=&#34;nv&#34;&gt;read_buffer_size&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;2M
&lt;span class=&#34;nv&#34;&gt;read_rnd_buffer_size&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;8M
&lt;span class=&#34;nv&#34;&gt;sort_buffer_size&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;8M
&lt;span class=&#34;nv&#34;&gt;join_buffer_size&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;8M
&lt;span class=&#34;nv&#34;&gt;key_buffer_size&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;4M
&lt;span class=&#34;nv&#34;&gt;thread_cache_size&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;8&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;ft_min_word_len&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;log_bin&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mysql-bin
&lt;span class=&#34;nv&#34;&gt;binlog_format&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mixed
&lt;span class=&#34;nv&#34;&gt;log_error&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/local/software/mysql/data/mysql-error.log
&lt;span class=&#34;nv&#34;&gt;slow_query_log&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;long_query_time&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;slow_query_log_file&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/local/software/mysql/data/mysql-slow.log
&lt;span class=&#34;nv&#34;&gt;performance_schema&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;
explicit_defaults_for_timestamp
skip-external-locking
&lt;span class=&#34;nv&#34;&gt;default_storage_engine&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;InnoDB
&lt;span class=&#34;c1&#34;&gt;#default-storage-engine = MyISAM&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;innodb_file_per_table&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;innodb_open_files&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;500&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;innodb_buffer_pool_size&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;64M
&lt;span class=&#34;nv&#34;&gt;innodb_write_io_threads&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;innodb_read_io_threads&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;innodb_thread_concurrency&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;innodb_purge_threads&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;innodb_flush_log_at_trx_commit&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;innodb_log_buffer_size&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;2M
&lt;span class=&#34;nv&#34;&gt;innodb_log_file_size&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;32M
&lt;span class=&#34;nv&#34;&gt;innodb_log_files_in_group&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;innodb_max_dirty_pages_pct&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;90&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;innodb_lock_wait_timeout&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;120&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;bulk_insert_buffer_size&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;8M
&lt;span class=&#34;nv&#34;&gt;myisam_sort_buffer_size&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;8M
&lt;span class=&#34;nv&#34;&gt;myisam_max_sort_file_size&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;10G
&lt;span class=&#34;nv&#34;&gt;myisam_repair_threads&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;interactive_timeout&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;28800&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;wait_timeout&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;28800&lt;/span&gt;

&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;mysqldump&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
quick
&lt;span class=&#34;nv&#34;&gt;max_allowed_packet&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;16M

&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;myisamchk&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;key_buffer_size&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;8M
&lt;span class=&#34;nv&#34;&gt;sort_buffer_size&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;8M
&lt;span class=&#34;nv&#34;&gt;read_buffer&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;4M
&lt;span class=&#34;nv&#34;&gt;write_buffer&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;4M
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;7-初始化-mysql-数据库&#34;&gt;7. 初始化 MySQL 数据库&lt;a class=&#34;headerlink&#34; href=&#34;#7-初始化-mysql-数据库&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@ecs-steven&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mysql-5.7.13&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# /usr/local/software/mysql/bin/mysqld  --defaults-file=/etc/my.cnf --initialize-insecure --user=mysql --basedir=/usr/local/software/mysql --datadir=/usr/local/software/mysql/data&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;8-mysql-服务启动与关闭&#34;&gt;8. MySQL 服务启动与关闭&lt;a class=&#34;headerlink&#34; href=&#34;#8-mysql-服务启动与关闭&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;mysqld_safe is the recommended way to start a mysqld server on Unix. mysqld_safe adds some safety features such as restarting the server when an error occurs and logging runtime information to an error log.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;From &lt;a href=&#34;https://dev.mysql.com/doc/refman/8.0/en/mysqld-safe.html&#34;&gt;4.3.2 mysqld_safe — MySQL Server Startup Script&lt;/a&gt;, MySQL 8.0 Reference Manual&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 启动&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@ecs-steven&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mysql-8.0.12&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# /usr/local/software/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf --user=mysql &amp;amp;&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;19351&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@ecs-steven&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mysql-8.0.12&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# Logging to &amp;#39;/usr/local/software/mysql/data/mysql-error.log&amp;#39;.&lt;/span&gt;
&lt;span class=&#34;m&#34;&gt;2018&lt;/span&gt;-09-21T08:51:39.325794Z&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mysqld_safe&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Starting&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mysqld&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;daemon&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;databases&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/local/software/mysql/data

&lt;span class=&#34;c1&#34;&gt;# 关闭&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@ecs-steven&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# /usr/local/software/mysql/bin/mysqladmin shutdown&lt;/span&gt;
&lt;span class=&#34;m&#34;&gt;2018&lt;/span&gt;-09-22T01:48:11.500105Z&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mysqld_safe&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mysqld&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pid&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/local/software/mysql/data/mysql.pid&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ended
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;9-登陆数据库&#34;&gt;9. 登陆数据库&lt;a class=&#34;headerlink&#34; href=&#34;#9-登陆数据库&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/local/software/mysql/bin/mysql&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-uroot
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;MySQL 第一次安装完成后，是没有设置 root 密码的，直接回车 Enter 即可登陆：
&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fpuu6dEhzbjLu__GrRbGu3sS_dDG.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;10-数据库其他配置&#34;&gt;10. 数据库其他配置&lt;a class=&#34;headerlink&#34; href=&#34;#10-数据库其他配置&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&#34;101-修改-root-账号密码&#34;&gt;10.1 修改 root 账号密码&lt;a class=&#34;headerlink&#34; href=&#34;#101-修改-root-账号密码&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;mysql&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-u&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;root
mysql&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;use&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mysql&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
mysql&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ALTER&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;USER&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;root&amp;#39;&lt;/span&gt;@&lt;span class=&#34;s1&#34;&gt;&amp;#39;localhost&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;IDENTIFIED&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;BY&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;your password&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
Query&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;OK,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;rows&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;affected&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;.01&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sec&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# 我们也可以通过该命令直接重置 root 账号密码&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;102-查看目前的用户账号&#34;&gt;10.2 查看目前的用户账号&lt;a class=&#34;headerlink&#34; href=&#34;#102-查看目前的用户账号&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;n&#34;&gt;mysql&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;select&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;host&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mysql&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;------------------+-----------+&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;             &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;host&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;|&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;------------------+-----------+&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mysql&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;infoschema&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;localhost&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;|&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mysql&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;session&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;localhost&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;|&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mysql&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sys&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;localhost&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;|&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;root&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;             &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;localhost&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;|&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;------------------+-----------+&lt;/span&gt;
&lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;rows&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;00&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sec&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;mysql&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;103-忘记-root-账号密码&#34;&gt;10.3 忘记 root 账号密码&lt;a class=&#34;headerlink&#34; href=&#34;#103-忘记-root-账号密码&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;① mysqladmin 关闭失败&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@ecs-steven&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# /usr/local/software/mysql/bin/mysqladmin shutdown&lt;/span&gt;
mysqladmin:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;connect&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;server&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;at&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;localhost&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;failed
error:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Access denied for user &amp;#39;&lt;/span&gt;root&lt;span class=&#34;s1&#34;&gt;&amp;#39;@&amp;#39;&lt;/span&gt;localhost&lt;span class=&#34;s1&#34;&gt;&amp;#39; (using password: NO)&amp;#39;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;② 停止 mysql 服务&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@ecs-steven&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# /usr/local/software/mysql/bin/mysqld stop  # 不起作用&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@ecs-steven&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# kill -9 processes&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;③ 安全模式启动&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@ecs-steven&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# /usr/local/software/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf --user=mysql --skip-grant-tables &amp;amp;&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;26389&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@ecs-steven&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 2018-11-15T03:10:48.938826Z mysqld_safe Logging to &amp;#39;/usr/local/software/mysql/data/mysql-error.log&amp;#39;.&lt;/span&gt;
&lt;span class=&#34;m&#34;&gt;2018&lt;/span&gt;-11-15T03:10:48.973639Z&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mysqld_safe&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Starting&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mysqld&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;daemon&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;databases&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/local/software/mysql/data
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;④ 无密码 root 帐号登陆&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@ecs-steven&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# /usr/local/software/mysql/bin/mysql -uroot&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;#在下面的要求你输入密码的时候，你不用管，直接回车键一敲就过去了&lt;/span&gt;
Welcome&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;MySQL&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;monitor.&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Commands&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;end&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;or&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\g&lt;/span&gt;.
Your&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;MySQL&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;connection&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;id&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;is&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;7&lt;/span&gt;
Server&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;version:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;8&lt;/span&gt;.0.12&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Source&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;distribution

Copyright&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;c&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2000&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2018&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Oracle&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;and/or&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;its&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;affiliates.&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;All&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;rights&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;reserved.

Oracle&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;is&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;a&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;registered&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;trademark&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Oracle&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Corporation&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;and/or&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;its
affiliates.&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Other&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;names&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;may&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;be&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;trademarks&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;their&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;respective
owners.

Type&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;help;&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;or&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;\h&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;help.&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Type&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;\c&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;clear&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;current&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;input&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;statement.

mysql&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;⑤ 修改密码，重新登陆&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;mysql&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;use&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mysql&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
Reading&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;table&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;information&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;completion&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;table&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;and&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;column&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;names
You&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;can&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;turn&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;off&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;this&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;feature&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;get&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;a&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;quicker&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;startup&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-A

Database&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;changed
mysql&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;flush&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;privileges&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
Query&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;OK,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;rows&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;affected&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;.00&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sec&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;

mysql&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ALTER&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;USER&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;root&amp;#39;&lt;/span&gt;@&lt;span class=&#34;s1&#34;&gt;&amp;#39;localhost&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;IDENTIFIED&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;BY&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;your new password&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
Query&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;OK,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;rows&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;affected&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;.01&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sec&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;

mysql&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\q&lt;/span&gt;
Bye

&lt;span class=&#34;c1&#34;&gt;# 重新登陆测试&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@ecs-steven&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# /usr/local/software/mysql/bin/mysql -uroot -p&lt;/span&gt;
Enter&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;password:
Welcome&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;MySQL&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;monitor.&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Commands&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;end&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;or&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\g&lt;/span&gt;.
Your&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;MySQL&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;connection&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;id&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;is&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;14&lt;/span&gt;
Server&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;version:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;8&lt;/span&gt;.0.12&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Source&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;distribution

Copyright&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;c&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2000&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2018&lt;/span&gt;,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Oracle&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;and/or&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;its&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;affiliates.&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;All&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;rights&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;reserved.

Oracle&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;is&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;a&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;registered&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;trademark&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Oracle&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Corporation&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;and/or&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;its
affiliates.&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Other&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;names&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;may&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;be&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;trademarks&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;their&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;respective
owners.

Type&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;help;&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;or&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;\h&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;help.&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Type&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;\c&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;clear&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;current&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;input&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;statement.

mysql&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;⑥ 正常重新启动&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@ecs-steven&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mysql&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# /usr/local/software/mysql/bin/mysqladmin shutdown -uroot -p&lt;/span&gt;
Enter&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;password:
&lt;span class=&#34;m&#34;&gt;2018&lt;/span&gt;-11-15T06:48:33.125907Z&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mysqld_safe&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mysqld&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pid&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;file&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/local/software/mysql/data/mysql.pid&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ended
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;+&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;Done&lt;span class=&#34;w&#34;&gt;                    &lt;/span&gt;/usr/local/software/mysql/bin/mysqld_safe&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--defaults-file&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/etc/my.cnf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--user&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;mysql&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;wd:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;wd&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;now:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/local/software/mysql&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@ecs-steven&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# /usr/local/software/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf --user=mysql &amp;amp;&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;29368&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@ecs-steven&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 2018-11-15T03:36:28.876747Z mysqld_safe Logging to &amp;#39;/usr/local/software/mysql/data/mysql-error.log&amp;#39;.&lt;/span&gt;
&lt;span class=&#34;m&#34;&gt;2018&lt;/span&gt;-11-15T03:36:28.910624Z&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mysqld_safe&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Starting&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mysqld&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;daemon&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;databases&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/local/software/mysql/data
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h1 id=&#34;五设置启动脚本开机自启动&#34;&gt;五、设置启动脚本，开机自启动&lt;a class=&#34;headerlink&#34; href=&#34;#五设置启动脚本开机自启动&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;注意：如果是使用免安装版本的 MySQL，需要补充 mysql.server 中的 basedir 和 datadir：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nv&#34;&gt;basedir&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/software/mysql
&lt;span class=&#34;nv&#34;&gt;datadir&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/software/mysql/data
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;设置 MySQL 开机启动&lt;/strong&gt;：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@ecs-steven&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# ls -lrt /usr/local/software/mysql&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@ecs-steven&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# cp /usr/local/software/mysql/support-files/mysql.server /etc/init.d/mysqld&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@ecs-steven&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# chmod +x /etc/init.d/mysqld&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@ecs-steven&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# systemctl enable mysqld&lt;/span&gt;
mysqld.service&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;is&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;not&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;a&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;native&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;service,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;redirecting&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/sbin/chkconfig.
Executing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/sbin/chkconfig&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mysqld&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;on
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;启动数据库：&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@ecs-steven&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# systemctl start mysqld&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;root@ecs-steven&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# systemctl status mysqld&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;查看 MySQL 服务进程和端口：&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;[root@ecs-steven ~]# ps -ef | grep mysql
[root@ecs-steven ~]# netstat -tunpl | grep 3306
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h1 id=&#34;参考资料&#34;&gt;参考资料&lt;a class=&#34;headerlink&#34; href=&#34;#参考资料&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://www.blast2go.com/images/b2g_pdfs/blast2go_cli_manual_1.1.pdf&#34;&gt;Blast2GO Command Line User Manual&lt;/a&gt; - Version 1.1 October 2015&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;anlan，&lt;a href=&#34;http://www.biotrainee.com/thread-1773-1-1.html&#34;&gt;blast2go 本地化&lt;/a&gt;，生信技能树&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;蜗牛，&lt;a href=&#34;http://www.cnblogs.com/alan-lin/p/9950389.html&#34;&gt;CentOS 7 安装并配置 MySQL 5.6&lt;/a&gt;，博客园&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;JagoWang，&lt;a href=&#34;https://gist.github.com/JagoWang/4544489&#34;&gt;mysql 重置 root 密码及相关问题&lt;/a&gt;，GitHub&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Mariana Monteiro，&lt;a href=&#34;https://www.blast2go.com/support/blog/22-blast2goblog/110-local-blast2go-database-installation&#34;&gt;Local Blast2GO Database Installation&lt;/a&gt;，Blast2GO Blog&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://dev.mysql.com/doc/refman/8.0/en/default-privileges.html&#34;&gt;2.10.4 Securing the Initial MySQL Account&lt;/a&gt;，MySQL 8.0 Reference Manual&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://dev.mysql.com/doc/refman/8.0/en/resetting-permissions.html&#34;&gt;B.5.3.2 How to Reset the Root Password&lt;/a&gt;，MySQL 8.0 Reference Manual&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;黄杉，&lt;a href=&#34;https://blog.csdn.net/mchdba/article/details/10630701&#34;&gt;MySQL root 密码重置报错：mysqladmin: connect to server at &amp;lsquo;localhost&amp;rsquo; failed 的解决方案&lt;/a&gt;，CSDN&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E6%95%B0%E6%8D%AE%E5%BA%93/2019-07-01-install-mysql-from-source/</link>
      <pubDate>Mon, 01 Jul 2019 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E6%95%B0%E6%8D%AE%E5%BA%93/2019-07-01-install-mysql-from-source/</guid>
      
    </item>
    
    <item>
      <title>生信服务器基本配置：防火墙</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2019-07-01&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2019-07-01T00:00:00&#39;&gt;2019-07-01&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-07-26&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-07-26T10:48:19&#39;&gt;2021-07-26&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;主要介绍一下 CentOS 7 的防火墙基本配置知识，CentOS 6 的后续如果有需要再进行补充。&lt;/p&gt;
&lt;p&gt;Centos7 默认安装了 firewalld，如果没有安装的话，则需要 YUM 命令安装；firewalld 真的用不习惯，与之前的 iptable 防火墙区别太大，但毕竟是未来主流讲究慢慢磨合它的设置规则。&lt;/p&gt;
&lt;h2 id=&#34;安装-firewall-命令&#34;&gt;安装 Firewall 命令&lt;a class=&#34;headerlink&#34; href=&#34;#安装-firewall-命令&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;yum&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;firewalld&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;firewalld-config
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;firewall-开启常见端口命令&#34;&gt;Firewall 开启常见端口命令&lt;a class=&#34;headerlink&#34; href=&#34;#firewall-开启常见端口命令&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;firewall-cmd&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--zone&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;public&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--add-port&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;80&lt;/span&gt;/tcp&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--permanent
firewall-cmd&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--zone&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;public&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--add-port&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;443&lt;/span&gt;/tcp&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--permanent
firewall-cmd&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--zone&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;public&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--add-port&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;22&lt;/span&gt;/tcp&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--permanent
firewall-cmd&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--zone&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;public&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--add-port&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;21&lt;/span&gt;/tcp&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--permanent
firewall-cmd&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--zone&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;public&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--add-port&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;53&lt;/span&gt;/udp&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--permanent
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;firewall-关闭常见端口命令&#34;&gt;Firewall 关闭常见端口命令&lt;a class=&#34;headerlink&#34; href=&#34;#firewall-关闭常见端口命令&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;firewall-cmd&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--zone&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;public&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--remove-port&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;80&lt;/span&gt;/tcp&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--permanent
firewall-cmd&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--zone&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;public&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--remove-port&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;443&lt;/span&gt;/tcp&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--permanent
firewall-cmd&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--zone&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;public&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--remove-port&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;22&lt;/span&gt;/tcp&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--permanent
firewall-cmd&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--zone&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;public&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--remove-port&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;21&lt;/span&gt;/tcp&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--permanent
firewall-cmd&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--zone&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;public&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--remove-port&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;53&lt;/span&gt;/udp&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--permanent
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;批量添加区间端口&#34;&gt;批量添加区间端口&lt;a class=&#34;headerlink&#34; href=&#34;#批量添加区间端口&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;firewall-cmd&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--zone&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;public&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--add-port&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4400&lt;/span&gt;-4600/udp&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--permanent
firewall-cmd&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--zone&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;public&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--add-port&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4400&lt;/span&gt;-4600/tcp&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--permanent
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;开启防火墙命令&#34;&gt;开启防火墙命令&lt;a class=&#34;headerlink&#34; href=&#34;#开启防火墙命令&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;systemctl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;start&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;firewalld.service
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;重启防火墙命令&#34;&gt;重启防火墙命令&lt;a class=&#34;headerlink&#34; href=&#34;#重启防火墙命令&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;firewall-cmd&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--reload&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;或者&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;service&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;firewalld&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;restart
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;查看端口列表&#34;&gt;查看端口列表&lt;a class=&#34;headerlink&#34; href=&#34;#查看端口列表&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;firewall-cmd&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--permanent&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--list-port
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;禁用防火墙&#34;&gt;禁用防火墙&lt;a class=&#34;headerlink&#34; href=&#34;#禁用防火墙&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;systemctl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;stop&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;firewalld
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;设置开机启动&#34;&gt;设置开机启动&lt;a class=&#34;headerlink&#34; href=&#34;#设置开机启动&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;systemctl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;enable&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;firewalld
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;停止并禁用开机启动&#34;&gt;停止并禁用开机启动&lt;a class=&#34;headerlink&#34; href=&#34;#停止并禁用开机启动&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;systemctl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;disable&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;firewalld
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;查看防火墙状态&#34;&gt;查看防火墙状态&lt;a class=&#34;headerlink&#34; href=&#34;#查看防火墙状态&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;systemctl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;status&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;firewalld&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;或者&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;firewall-cmd&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--state
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%85%8D%E7%BD%AE%E4%BD%BF%E7%94%A8/2019-07-01-centos-firewall/</link>
      <pubDate>Mon, 01 Jul 2019 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%85%8D%E7%BD%AE%E4%BD%BF%E7%94%A8/2019-07-01-centos-firewall/</guid>
      
    </item>
    
    <item>
      <title>CentOS Linux 7 安全基线设置</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2019-07-01&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2019-07-01T00:00:00&#39;&gt;2019-07-01&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-06-30&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-06-30T09:34:53&#39;&gt;2021-06-30&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;作为一个生信人，不管是日常的数据分析还是其他工具应用的开发，服务器的安全始终是一个无法避免的话题。尤其是当我们拿到一台新的服务器，我们需要怎样才能确保它是安全可靠，并最小限度降低它被攻击的可能性？&lt;/p&gt;
&lt;p&gt;下面我们就来分享一份关于 CentOS Linux 7 安全的基线设置指南，希望对服务器管理的童鞋有所帮助。&lt;/p&gt;
&lt;p&gt;① 设置用户权限配置文件的权限。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;chown&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;root:root&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/etc/passwd&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/etc/shadow&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/etc/group&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/etc/gshadow
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;chmod&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0644&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/etc/group
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;chmod&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0644&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/etc/passwd
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;chmod&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0400&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/etc/shadow
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;chmod&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0400&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/etc/gshadow
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;② 确保 SSH LogLevel 设置为 INFO，记录登录和注销活动。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 编辑 /etc/ssh/sshd_config 文件以按如下方式设置参数(取消注释):&lt;/span&gt;
LogLevel&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;INFO
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;③ 设置 SSH 空闲超时退出时间，可降低未授权用户访问其他用户 ssh 会话的风险。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 编辑 /etc/ssh/sshd_config，将 ClientAliveInterval 设置为 300 到 900，即 5-15 分钟，将 ClientAliveCountMax 设置为 0。&lt;/span&gt;
ClientAliveInterval&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;900&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ClientAliveCountMax&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;④ SSHD 强制使用 V2 安全协议。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 编辑 /etc/ssh/sshd_config 文件以按如下方式设置参数：&lt;/span&gt;
Protocol&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;⑤ 确保 SSH MaxAuthTries 设置为 3 到 6 之间。设置较低的 Max AuthTrimes 参数将降低 SSH 服务器被暴力攻击成功的风险。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 在 /etc/ssh/sshd_config 中取消 MaxAuthTries 注释符号 #，设置最大密码尝试失败次数 3-6，建议为 4：&lt;/span&gt;
MaxAuthTries&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;⑥ 设置密码修改最小间隔时间，限制密码更改过于频繁。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 在 /etc/login.defs 中将 PASS_MIN_DAYS 参数设置为7-14之间,建议为7：&lt;/span&gt;
PASS_MIN_DAYS&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;7&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# 需同时执行命令为 root 用户设置：&lt;/span&gt;
chage&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--mindays&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;7&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;root
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;⑦ 设置密码失效时间，强制定期修改密码，减少密码被泄漏和猜测风险，使用非密码登陆方式(如密钥对)请忽略此项。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;# 使用非密码登陆方式如密钥对，请忽略此项。

# 在 /etc/login.defs 中将 PASS_MAX_DAYS 参数设置为 60-180之间，如:
PASS_MAX_DAYS 90

# 需同时执行命令设置 root 密码失效时间：
chage --maxdays 90 root
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;⑧ 禁止 SSH 空密码用户登录。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 编辑文件 /etc/ssh/sshd_config ，将 PermitEmptyPasswords 配置为 no:&lt;/span&gt;
PermitEmptyPasswords&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;no
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;⑨ 密码复杂度检查，检查密码长度和密码是否使用多种字符类型。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 编辑 /etc/security/pwquality.conf，把 minlen（密码最小长度）设置为 9-32 位。&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# 把 minclass（至少包含小写字母、大写字母、数字、特殊字符等4类字符中等3类或4类）设置为 3 或 4。&lt;/span&gt;
&lt;span class=&#34;nv&#34;&gt;minlen&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;minclass&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;⑩ 确保密码到期警告天数为 7 或更多。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 在 /etc/login.defs 中将 PASS_WARN_AGE 参数设置为7-14之间，建议为7：&lt;/span&gt;
PASS_WARN_AGE&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;7&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# 同时执行命令使 root 用户设置生效：&lt;/span&gt;
chage&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--warndays&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;7&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;root
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;⑪ 确保 root 是唯一的 UID 为 0 的帐户，除 root 以外其他 UID 为 0 的用户都应该删除，或者为其分配新的 UID。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 除 root 以外其他 UID 为 0 的用户(查看命令如下)都应该删除，或者为其分配新的 UID。&lt;/span&gt;
cat&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/etc/passwd&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;awk&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-F:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;($3 == 0) { print $1 }&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;grep&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-v&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;^root$&amp;#39;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;⑫ 开启地址空间布局随机化，它将进程的内存空间地址随机化来增大入侵者预测目的地址难度，从而降低进程被成功入侵的风险。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 执行命令：&lt;/span&gt;
sysctl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-w&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;kernel.randomize_va_space&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;⑬ 检查系统空密码账户。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;# 为用户设置一个非空密码
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;⑭ 访问控制配置文件的权限设置。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 运行以下4条命令：&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;chown&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;root:root&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/etc/hosts.allow
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;chown&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;root:root&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/etc/hosts.deny
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;chmod&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;644&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/etc/hosts.deny
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;chmod&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;644&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/etc/hosts.allow
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;⑮ 确保 rsyslog 服务已启用，记录日志用于审计。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 运行以下命令启用rsyslog服务:&lt;/span&gt;
systemctl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;enable&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;rsyslog
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;⑯ 检查密码重用是否受限制，强制用户不重用最近使用的密码，降低密码猜测攻击风险。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 在 /etc/pam.d/password-auth 和 /etc/pam.d/system-auth 中 password sufficient pam_unix.so 这行的末尾配置 remember 参数为5-24之间，原来的内容不用更改。&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# 如下面只在末尾加了 remember=5，即可限制不能重用最近5个密码。&lt;/span&gt;
password&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sufficient&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pam_unix.so&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;sha512&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;try_first_pass&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;remember&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;5&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;以上就是关于 CentOS Linux 7 安全的一些基本设置总结。服务器的安全与管理是一个庞大的工程，如果你有更好的建议，欢迎留言交流。&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%85%8D%E7%BD%AE%E4%BD%BF%E7%94%A8/2019-07-01-security-for-centos-7/</link>
      <pubDate>Mon, 01 Jul 2019 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%85%8D%E7%BD%AE%E4%BD%BF%E7%94%A8/2019-07-01-security-for-centos-7/</guid>
      
    </item>
    
    <item>
      <title>一次 SSH 攻击与处理记录</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2019-07-01&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2019-07-01T00:00:00&#39;&gt;2019-07-01&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-06-25&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-06-25T11:05:52&#39;&gt;2021-06-25&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;这是我在简书看到的一个作者经历，结合小编自己的一些实践，抛砖引玉，给大家分享一下。&lt;/p&gt;
&lt;p&gt;有段时间发现集群异常卡顿。担心的事情终于发生了，使用命令 &lt;code&gt;lastb&lt;/code&gt; 查看了一下，我的天呢，好多未知的 IP，我随便复制粘贴了一个到百度查询了一下，我日，美国的。后来还在网上的 IP 黑名单中发现了攻击我们服务器的 IP。下面是从发现到解决的一个过程。&lt;/p&gt;
&lt;h1 id=&#34;一查看记录错误登录的日志&#34;&gt;一、查看记录错误登录的日志&lt;a class=&#34;headerlink&#34; href=&#34;#一查看记录错误登录的日志&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;/var/log/btmp&lt;/strong&gt; 文件是记录错误登录的日志，就是说有很多人试图使用密码字典登录 ssh 服务，此日志需要使用 lastb 程序打开。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;lastb&lt;/code&gt; 查看的是 /var/log/btmp 中的内容，而 /var/log/btmp 是一个二进制的文件；
&lt;code&gt;last&lt;/code&gt; 查看的是 /var/log/wtmp 中的内容，而  /var/log/wtmp 也是一个二进制的文件；
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FheZchvExI1ORbh4j8LVpue1Kv0X.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;东北大学收集的发动 SSH 攻击的 IP 地址列表：&lt;a href=&#34;http://antivirus.neu.edu.cn/scan/ssh.php&#34;&gt;http://antivirus.neu.edu.cn/scan/ssh.php&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;我们可以简单统计 ip 出现的次数，然后针对这些 ip 进行处理：
&lt;code&gt;blastb | awk &#39;{print $3}&#39; |sort |uniq -c |sort -k 1 -n -r |head -20&lt;/code&gt;&lt;/p&gt;
&lt;h1 id=&#34;二处理-varlogsecure&#34;&gt;二、处理 /var/log/secure&lt;a class=&#34;headerlink&#34; href=&#34;#二处理-varlogsecure&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;/var/log/secure&lt;/strong&gt; 一般用来记录安全相关的信息，记录最多的是哪些用户登录服务器的相关日志，如果该文件很大，说明有人在破解你的 root 密码。&lt;/p&gt;
&lt;h1 id=&#34;三处理-ssh-攻击的基本流程&#34;&gt;三、处理 SSH 攻击的基本流程&lt;a class=&#34;headerlink&#34; href=&#34;#三处理-ssh-攻击的基本流程&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;首先，查看我们的服务器是否存在 SSH 攻击。&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;步骤一：使用命令 lastb -20 查看，如果有大量的未知 IP, 加上时间分析。极短时间内出现多次，则可以确定受到 SSH 攻击。&lt;/li&gt;
&lt;li&gt;步骤二：查看登陆失败的用户 IP，读取 /var/log/secure，查找关键字 Failed，如果是 SSH 攻击，会有很多的 IP 被列出来。&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;cat&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/var/log/secure&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;grep&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Failed password&amp;#39;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;其次，对目标 IP 进行黑白名单处理。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;在上面步骤一、步骤二的基础上我们开始编写脚本，检测多次尝试错误登陆的 IP，将那些有问题 IP 存放到 hosts.deny 黑名单下，并通过 crontab 来每分钟定时执行执行。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;/etc/hosts.allow&lt;/strong&gt;，这个文件是存放允许访问服务器的所有 IP 的内容，可以简单理解为白名单；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;/etc/hosts.deny&lt;/strong&gt;，这个文件存放的是不允许访问服务器的 IP 内容，简单理解为黑名单。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;① 创建存放实施攻击的 ip 的文本，命名为：denyhosts.txt（&lt;code&gt;/root/denyhosts/denyhosts.txt&lt;/code&gt;）。
② 创建定时脚本文件，命名为：denyhosts.sh（&lt;code&gt;/root/denyhosts/denyhosts.sh&lt;/code&gt;）。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;ch&#34;&gt;#!/bin/bash&lt;/span&gt;

cat&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/var/log/secure&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;awk&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;/Failed/{print $(NF-3)}&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;sort&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;uniq&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-c&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;awk&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;{print $2&amp;quot;=&amp;quot; $1;}&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;gt;/root/denyhosts/denyhosts.txt

&lt;span class=&#34;nv&#34;&gt;DEFINE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;5&amp;quot;&lt;/span&gt;

&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;i&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;cat&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/root/denyhosts/denyhosts.txt&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;
&lt;span class=&#34;k&#34;&gt;do&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;IP&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;awk&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-F&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;=&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;{print $1}&amp;#39;&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;NUM&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;awk&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-F&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;=&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;{print $2}&amp;#39;&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$NUM&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-gt&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$DEFINE&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;ipExists&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;grep&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$IP&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/etc/hosts.deny&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;grep&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-v&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;grep&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;wc&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-l&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$ipExists&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-lt&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;sshd:&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$IP&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/etc/hosts.deny
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;
&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;③ 脚本创建好之后，将脚本的权限更改为可执行权限： &lt;code&gt;chmod a+x denyhosts.sh&lt;/code&gt; 。
④ SSH 攻击是每时每刻都在发动攻击的，所以我们需要将脚本添加到定时任务中，定时的执行：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;cat&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/etc/crontab&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# 这个文本是存放定时脚本的文本&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;⑤ 将脚本添加到定时任务：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;crontab&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-e

&lt;span class=&#34;c1&#34;&gt;# 每分钟执行一次，执行用户是 root 执行的脚本是 /root/denyhosts/denyhosts.sh&lt;/span&gt;
*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;root&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/root/denyhosts/denyhosts.sh
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;⑥ 查看是否将脚本添加到定时任务：&lt;strong&gt;crontab -l&lt;/strong&gt;，如果出现我们的定时执行任务，则添加成功；后期如果需要删除此定时任务的话，通过：&lt;strong&gt;crontab -r&lt;/strong&gt; 取消。&lt;/p&gt;
&lt;p&gt;⑦ 使用命令  &lt;strong&gt;lastb -20&lt;/strong&gt; (查看尝试登录我们服务器，但是登陆失败的 IP)，成功的看到，那些之前一秒钟发动几十次攻击的 IP 不存在了。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;原因一是：脚本对 IP 进行筛选之后，将识别为攻击者 IP 的，都放入了黑名单中；&lt;/li&gt;
&lt;li&gt;原因二是：如果攻击者尝试用别的新的 IP ，也就是没有被写入到黑名单的 IP， 我们的脚本再次检测，将这些新的攻击 IP 也写入黑名单。这样，攻击者的 IP 会越来越少。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;除此之外，简单的办法就是改端口，ssh 攻击大部分都是批量扫 22 的，改了端口再改个不常用用户名和密码基本就没问题了，不知道大神还有没有更好的方式了！&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;原文&lt;/strong&gt;：昵称又重复，《SSH 攻击》，&lt;a href=&#34;https://www.jianshu.com/p/84d38d396629&#34;&gt;https://www.jianshu.com/p/84d38d396629&lt;/a&gt;，简书&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%85%8D%E7%BD%AE%E4%BD%BF%E7%94%A8/2019-07-01-ssh-attack/</link>
      <pubDate>Mon, 01 Jul 2019 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%85%8D%E7%BD%AE%E4%BD%BF%E7%94%A8/2019-07-01-ssh-attack/</guid>
      
    </item>
    
    <item>
      <title>癌症克隆种群结构分析软件 PyClone 安装</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2019-07-01&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2019-07-01T00:00:00&#39;&gt;2019-07-01&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-11-06&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-11-06T19:30:27&#39;&gt;2021-11-06&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;PyClone 是一种用于推断癌症中克隆种群结构的统计模型。 它是一种贝叶斯聚类方法，用于将深度测序的体细胞突变集分组到假定的克隆簇中，同时估计其细胞流行率（prevalences）并解释由于分段拷贝数变化（segmental copy-number changes）和正常细胞污染（normal-cell contamination）引起的等位基因失衡。 单细胞测序验证证明了 PyClone 的准确性。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The input data for PyClone consists of a set read counts from a deep sequencing experiment, the copy number of the genomic region containing the mutation and an estimate of tumour content.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id=&#34;简易安装&#34;&gt;简易安装&lt;a class=&#34;headerlink&#34; href=&#34;#简易安装&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;官方推荐使用 &lt;a href=&#34;https://conda.io/miniconda.html&#34;&gt;MiniConda&lt;/a&gt; 来安装 PyClone。为了保证环境的稳定，可为 PyClone 单独建立一个环境，因为 PyClone 基于 Python2.7。在这里，我们使用 Anaconda3(conda 4.5.11) 来安装 PyClone。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 创建基于 Python2.7 名字为 pyclone 独立环境&lt;/span&gt;
conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;create&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--name&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pyclone&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;python&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# 激活 pyclone 环境&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;activate&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pyclone

&lt;span class=&#34;c1&#34;&gt;# 退出 pyclone 环境&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;deactivate

&lt;span class=&#34;c1&#34;&gt;# 安装 PyClone&lt;/span&gt;
conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pyclone&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-c&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;aroth85
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Anaconda3 中安装完 PyClone，激活环境后，执行 &lt;code&gt;PyClone -h&lt;/code&gt; 出现 RuntimeWarning。同样的，我们在 pyclone 的环境中导入 pandas 模板，出现一样的 RuntimeWarning：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;(pyclone) shenweiyan@ecs-steven 13:38:25 /home/shenweiyan
$ PyClone -h
/usr/local/software/anaconda3/envs/pyclone/lib/python2.7/site-packages/pandas/_libs/__init__.py:4: RuntimeWarning: numpy.dtype size changed, may indicate binary incompatibility. Expected 96, got 88
  from .tslib import iNaT, NaT, Timestamp, Timedelta, OutOfBoundsDatetime
/usr/local/software/anaconda3/envs/pyclone/lib/python2.7/site-packages/pandas/__init__.py:26: RuntimeWarning: numpy.dtype size changed, may indicate binary incompatibility. Expected 96, got 88

......

  from pandas._libs import algos, lib, writers as libwriters
/usr/local/software/anaconda3/envs/pyclone/lib/python2.7/site-packages/statsmodels/nonparametric/kde.py:22: RuntimeWarning: numpy.dtype size changed, may indicate binary incompatibility. Expected 96, got 88
  from .linbin import fast_linbin
/usr/local/software/anaconda3/envs/pyclone/lib/python2.7/site-packages/statsmodels/nonparametric/smoothers_lowess.py:11: RuntimeWarning: numpy.dtype size changed, may indicate binary incompatibility. Expected 96, got 88
  from ._smoothers_lowess import lowess as _lowess
usage: PyClone [-h] [--version]
               {setup_analysis,run_analysis,run_analysis_pipeline,build_mutations_file,plot_clusters,plot_loci,build_table}
               ...

positional arguments:
  {setup_analysis,run_analysis,run_analysis_pipeline,build_mutations_file,plot_clusters,plot_loci,build_table}
    setup_analysis      Setup a config file and mutations files for a PyClone
                        analysis.
    run_analysis        Run an MCMC sampler to sample from the posterior of
                        the PyClone model.
    run_analysis_pipeline
                        Run a full PyClone analysis.
    build_mutations_file
                        Build a YAML format file with mutation data and states
                        prior to be used for PyClone analysis.
    plot_clusters       Plot features of the clusters.
    plot_loci           Plot features of the loci.
    build_table         Build results table which contains cluster ids and
                        (mean) cellular prevalence estimates.

optional arguments:
  -h, --help            show this help message and exit
  --version             show program&amp;#39;s version number and exit

(pyclone) shenweiyan@ecs-steven 14:47:17 /home/shenweiyan
$ python
Python 2.7.15 | packaged by conda-forge | (default, Oct 12 2018, 14:10:50)
[GCC 4.8.2 20140120 (Red Hat 4.8.2-15)] on linux2
Type &amp;quot;help&amp;quot;, &amp;quot;copyright&amp;quot;, &amp;quot;credits&amp;quot; or &amp;quot;license&amp;quot; for more information.
&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; import pandas
/usr/local/software/anaconda3/envs/pyclone/lib/python2.7/site-packages/pandas/_libs/__init__.py:4: RuntimeWarning: numpy.dtype size changed, may indicate binary incompatibility. Expected 96, got 88
  from .tslib import iNaT, NaT, Timestamp, Timedelta, OutOfBoundsDatetime
/usr/local/software/anaconda3/envs/pyclone/lib/python2.7/site-packages/pandas/__init__.py:26: RuntimeWarning: numpy.dtype size changed, may indicate binary incompatibility. Expected 96, got 88
  from pandas._libs import (hashtable as _hashtable,

......

/usr/local/software/anaconda3/envs/pyclone/lib/python2.7/site-packages/pandas/io/pytables.py:50: RuntimeWarning: numpy.dtype size changed, may indicate binary incompatibility. Expected 96, got 88
  from pandas._libs import algos, lib, writers as libwriters
&amp;gt;&amp;gt;&amp;gt; pandas.__version__
u&amp;#39;0.23.4&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;原因与解决：(参考 &lt;a href=&#34;https://github.com/ContinuumIO/anaconda-issues/issues/6678&#34;&gt;anaconda-issues：#6678&lt;/a&gt;、&lt;a href=&#34;https://github.com/numpy/numpy/issues/11628&#34;&gt;numpy issues：#11628&lt;/a&gt;)&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The pandas were build agains different version of numpy. we need to rebuild pandas agains the local numpy.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 方法一（耗时长）&lt;/span&gt;
pip&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--no-binary&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pandas&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-I&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pandas

&lt;span class=&#34;c1&#34;&gt;# 方法二（推荐使用）&lt;/span&gt;
conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;numpy&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.14.5&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--yes
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h1 id=&#34;手动安装&#34;&gt;手动安装&lt;a class=&#34;headerlink&#34; href=&#34;#手动安装&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;要手动安装 PyClone，请确保安装了必要的库（如下所列）。 之后就可以像任何其他 Python 包一样通过 &lt;code&gt;python setup.py install&lt;/code&gt; 安装 PyClone。&lt;/p&gt;
&lt;p&gt;PyClone 必须满足依赖包如下：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;PyDP &amp;gt;= 0.2.3
PyYAML &amp;gt;= 3.10
matplotlib &amp;gt;= 1.2.0 - Required for plotting.
numpy &amp;gt;= 1.6.2 - Required for plotting and clustering.
pandas &amp;gt;= 0.11 - Required for multi sample plotting.
scipy &amp;gt;= 0.11 - Required for plotting and clustering.
seaborn &amp;gt;= 0.6.0
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;手动安装 PyClone:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$ git clone https://github.com/aroth85/pyclone.git
$ cd pyclone
$ python setup.py install
running install
running bdist_egg
running egg_info
creating PyClone.egg-info
writing PyClone.egg-info/PKG-INFO

......

Installed /usr/local/software/python2.7/pyclone/lib/python2.7/site-packages/PyClone-0.13.1-py2.7.egg
Processing dependencies for PyClone==0.13.1
Finished processing dependencies for PyClone==0.13.1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;到这里，PyClone 就安装完成了，关于该软件具体的使用说明，请参考 &lt;code&gt;PyClone -h&lt;/code&gt; 或者 &lt;a href=&#34;https://bitbucket.org/aroth85/pyclone/wiki/Usage&#34;&gt;PyClone wiki: Usage&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FnW938o1bkVHlZD3xyWEMxiI4Xnq.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;参考资料：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;numpy issues，&lt;a href=&#34;https://github.com/numpy/numpy/issues/11628&#34;&gt;#11628&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;anaconda-issues，&lt;a href=&#34;https://github.com/ContinuumIO/anaconda-issues/issues/6678&#34;&gt;#6678&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/aroth85/pyclone&#34;&gt;aroth85/pyclone&lt;/a&gt;，GitHub&lt;/li&gt;
&lt;li&gt;YTer，&lt;a href=&#34;https://yantinger.com/2018/01/24/pyclone%E8%AF%B4%E6%98%8E/index.html?d=1541053376887&#34;&gt;Pyclone 说明&lt;/a&gt;，Hexo 个人博客&lt;/li&gt;
&lt;li&gt;用户 1680321，&lt;a href=&#34;https://cloud.tencent.com/developer/article/1111984&#34;&gt;安装使用 pyclone 进行克隆演化推断&lt;/a&gt;，yw 的数据分析&lt;/li&gt;
&lt;/ul&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E7%94%9F%E4%BF%A1%E5%B7%A5%E5%85%B7%E4%B8%8E%E5%BA%94%E7%94%A8/2019-07-01-pyclone-install/</link>
      <pubDate>Mon, 01 Jul 2019 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E7%94%9F%E4%BF%A1%E5%B7%A5%E5%85%B7%E4%B8%8E%E5%BA%94%E7%94%A8/2019-07-01-pyclone-install/</guid>
      
    </item>
    
    <item>
      <title>使用 RSS 打造你的科研资讯头条</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;h1 id=&#34;一什么是-rss&#34;&gt;一、什么是 RSS&lt;a class=&#34;headerlink&#34; href=&#34;#一什么是-rss&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2019-07-01&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2019-07-01T00:00:00&#39;&gt;2019-07-01&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-06-25&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-06-25T10:45:24&#39;&gt;2021-06-25&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;RSS 是站点用来和其他站点之间共享内容的一种简易方式（也叫聚合内容 Really Simple Syndication）。通常在时效性比较强的内容上使用 RSS 订阅能更快速获取信息，网站提供 RSS 输出，有利于让用户获取网站内容的最新更新。网络用户可以在客户端借助于支持 RSS 的聚合工具软件（例如 Inoreader, NewzCrawler, FeedDemon），在不打开网站内容页面的情况下阅读支持 RSS 输出的网站内容。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;简单的来说，RSS 就是一个收集箱（海报栏），一个 inbox ，通过不同的 feed 地址，将各种订阅源汇总到一起，在某个客户端中统一体现，每天刷一次，一切就像清空收件箱一样方便。&lt;/p&gt;
&lt;h1 id=&#34;二为什么需要-rss&#34;&gt;二、为什么需要 RSS&lt;a class=&#34;headerlink&#34; href=&#34;#二为什么需要-rss&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;举个例子，假如我们同时关注了知乎的某个专栏（如，R 语言中文社区）、简书某个专题（如，生物信息学与算法），以及其他一些生信大神的博客，除此之外我们还是 BBC、The Wall Street Journal 的读者。如果我们想要获取这些专栏、博客、网站的最新文章内容，按照以往的阅览模式，我们需要分别登录这些不同的网站把这些网站的内容浏览一遍才可以。这就意味着我们要每天至少分别打开上面所有网站的链接各一次，而且每次都要加载网站的动画、排版和文字内容，消耗大量的时间和流量。&lt;/p&gt;
&lt;p&gt;有了 RSS 系统，你只需要订阅各个网站的 RSS 链接，并在 RSS 阅读器内统一阅读自己订阅的文章就行了。RSS 阅读器可以自动检索和更新各网站最新的内容，你读过的文章也可以自动标记，非常方便。&lt;/p&gt;
&lt;h1 id=&#34;三如何开始我的-rss&#34;&gt;三、如何开始我的 RSS&lt;a class=&#34;headerlink&#34; href=&#34;#三如何开始我的-rss&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id=&#34;首先我们需要一个-rss-源即-feed&#34;&gt;首先，我们需要一个 RSS 源，即 Feed。&lt;a class=&#34;headerlink&#34; href=&#34;#首先我们需要一个-rss-源即-feed&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Feed 是为满足以某种形式持续得到自己更新的需求而提供的格式标准的信息出口。就是信源。信息发布网站将网站全部或者部分信息整合到一个 RSS 文件中，这个文件就被称之为 Feed 。信源中包含的数据都是标准的 XML 格式，不但能直接被其他站点调用，也能在其他的终端和服务中使用。RSS 订阅的过程中会用到的 &amp;ldquo;Feed&amp;rdquo;，便是表示这是用来接收该信息来源更新的接口。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;一般我们需要订阅的新闻或者博客网站中大部分主流网站会有专门的 RSS 链接方便用户订阅，如果没有也没关系，RSS 订阅服务通常会自动识别网站地址。或者我们可以使用专门的 RSS 生成器为没有 Feed 的网页生成 RSS 格式订阅源，如，Feed43、RSSHub 等等。&lt;/p&gt;
&lt;p&gt;关于常用的 RSS 源，这里推荐知乎的一个回答：&lt;a href=&#34;https://www.zhihu.com/question/19580096/answer/20490041&#34;&gt;你必读的 RSS 订阅源有哪些？&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;其次我们需要一个-rss-阅读器&#34;&gt;其次，我们需要一个 RSS 阅读器。&lt;a class=&#34;headerlink&#34; href=&#34;#其次我们需要一个-rss-阅读器&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;就像电子书需要电子书阅读器才能阅读一样，Feed 只是 RSS 的一个数据源，它本身是写给程序看的，必须经过阅读器转换，才能成为可以浏览的格式。&lt;/p&gt;
&lt;p&gt;RSS 阅读器多种多样，大致分为两种，一种是桌面型的，需要安装；另一种是在线型，直接使用浏览器进行阅读。&lt;/p&gt;
&lt;p&gt;目前，市面上能叫得出名字的 RSS 阅读器有数十款以上，我们无意对这些阅读器进行一一测评比较，今天只聊一聊个人感觉比较满意的一款 RSS 阅读器：Inoreader。&lt;/p&gt;
&lt;h2 id=&#34;最后介绍一款-rss-阅读器&#34;&gt;最后，介绍一款 RSS 阅读器。&lt;a class=&#34;headerlink&#34; href=&#34;#最后介绍一款-rss-阅读器&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Inoreader 是保加利亚一款基于网络内容和云服务的 RSS 聚合器，且支持移动设备 Android 和 iOS 端。它以统一的布局为用户编排整理定制来自在线资源的新闻源，并可与他人分享。Inoreader 由 Innologica 于 2013 年首次发布。截止 2018 年 7 月 30，Inoreader 最新版本为 5.3.26。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Google reader 是 RSS 订阅服务的鼻祖，但该业务在 2013 年被 Google 关闭了。Inoreader 是 Google reader 的继任者中做的比较好的，它的用户界面与 Google Reader 非常相似，支持中文界面，加载速度非常快，还不需要翻墙，支持快速导入，可以保留加星文章，有许多的快捷键，可订阅无限，支持分享到社交网络等等。&lt;/p&gt;
&lt;h3 id=&#34;1-inoreader-注册&#34;&gt;1. Inoreader 注册&lt;a class=&#34;headerlink&#34; href=&#34;#1-inoreader-注册&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;登陆 Inoreader 中文版官网，注册，现在可选注册有 facebook，tweeiter，或者其他邮箱。读者可自行选择在上面注册，注册成功后即可登陆网址。
&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fp7oA1iRTarIuLCHfpUD9r4ZkMzg.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;2-inoreader-登陆&#34;&gt;2. Inoreader 登陆&lt;a class=&#34;headerlink&#34; href=&#34;#2-inoreader-登陆&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;注册成功后即可登陆网址，显示首页。这里界面如下。如果是英文界面想要切换成中文：点击右上角齿轮图标 → Preferences → Interface → Language：简体中文 → 右下角点击 &amp;ldquo;Save&amp;rdquo;。
&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FuuzwZmZUZ05xVEij427Hjz0L8qv.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;3-inoreader-添加订阅&#34;&gt;3. Inoreader 添加订阅&lt;a class=&#34;headerlink&#34; href=&#34;#3-inoreader-添加订阅&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;常用订阅&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;可以通过点击 &amp;ldquo;&lt;a href=&#34;https://www.inoreader.com/folder/8648252&#34;&gt;https://www.inoreader.com/folder/8648252&lt;/a&gt;&amp;rdquo; 中的 &amp;ldquo;订阅&amp;rdquo; 把网友分享的 &amp;ldquo;我的必读订阅源&amp;rdquo; 添加到自己的 Inoreader（订阅后的源可以自定义增删）：
&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FojYPZewaCzWERChr2qtJ7GLDoJx.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;比如我们输入 &amp;ldquo;PLOS ONE&amp;rdquo; 关键词就可以看到该杂志的一系列订阅源，点击即可完成订阅。
&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fmi8KUPu6Ce55eaSkEgRIr_2Pe5M.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;这是一种比较详细的订阅方式，我们需要去各大数据库选择自己需要的，比如 pubmed，你打开之后，输入你想要的关键词，在搜索框下方有一个 &amp;ldquo;create RSS&amp;rdquo; 直接点击：
&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FgGVlLvVLWNm9_DvUMkmJ2EkHo-R.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;Inoreader 支持知乎专栏的 URL 搜索，比如我们要把知乎的 &amp;ldquo;R 语言中文社区&amp;rdquo; 专栏添加到 Inoreader，只需要把该专栏的 URL 粘贴到 Inoreader 搜索区，在找到的源中点击订阅即可。
&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FoTZAKYBkQBf1l_VuIGgNt3z8VYZ.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;简书默认是没有提供 RSS 输出的。因此我们想要添加简书专题、文集或者作者的订阅，需要借助简书 RSS 生成器，这里推荐一个神器：JianshuRSS（链接：&lt;a href=&#34;http://jianshu.milkythinking.com/）。&#34;&gt;http://jianshu.milkythinking.com/）。&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;首先，我们把简书的 &amp;ldquo;生物信息&amp;rdquo; 专题链接 &amp;ldquo;&lt;a href=&#34;https://www.jianshu.com/c/2e21055ceb0e&#34;&gt;https://www.jianshu.com/c/2e21055ceb0e&lt;/a&gt;&amp;rdquo; 粘贴到 JianshuRSS：
&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fj513Pf-Nt9OAqFQpe42Rshft9Ed.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;关于 Inoreader 的 RSS 源就写到这里了。对于普通大众而言，RSS 的上手门槛高确实有点高，需要自己找链接，也缺少互动，但是在知识爆炸的今天却很实用。&lt;/p&gt;
&lt;h3 id=&#34;4-inoreader-使用设置&#34;&gt;4. Inoreader 使用设置&lt;a class=&#34;headerlink&#34; href=&#34;#4-inoreader-使用设置&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;当我们完成订阅后，许多订阅源你可以对它进行整理，在 Inoreader 中右键即可实现。
&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Ft4Mf4V_RXsLc3qOw3-wqyAeLeCp.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;为了提高阅读效率，我们也可以选择切换视图。就是右上角那个很像眼睛的图标，选择杂志视图，即可如下。
&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FlZ14yPuIw4d1JN5m74FwacGLq63.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;当然 Inoreader 在左边下角提供其他的服务，如 Inoreader 下方还有统计数据，统计你一天看了多少，，快捷键大全，新手指导，联系客服，调整左栏项目等等。有兴趣的童鞋可以自行去体验一下。&lt;/p&gt;
&lt;p&gt;最后，提供几张 Inoreader 在安卓手机上使用的截图：
&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FjzyUDFZ6rxhOEgbgCzNq791m26g.jpeg&#34; /&gt;&lt;/p&gt;
&lt;h1 id=&#34;四参考资料&#34;&gt;四、参考资料&lt;a class=&#34;headerlink&#34; href=&#34;#四参考资料&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;Platycodon，《2018 年主流 RSS 服务选哪家？Feedly、Inoreader 和 NewsBlur 全面横评》，少数派，&lt;a href=&#34;https://sspai.com/post/44420&#34;&gt;https://sspai.com/post/44420&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;数据小冰，《inoreader 阅读器使用》，CSDN，&lt;a href=&#34;https://blog.csdn.net/mingyong_blog/article/details/40792687&#34;&gt;https://blog.csdn.net/mingyong_blog/article/details/40792687&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;阮一峰，《如何使用 RSS》，阮一峰的网络日志，&lt;a href=&#34;http://www.ruanyifeng.com/blog/2006/01/rss.html&#34;&gt;http://www.ruanyifeng.com/blog/2006/01/rss.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;哈尔滨工业大学学报编辑部，《RSS 订阅》，&lt;a href=&#34;http://swxxx.alljournals.cn/ch/reader/rss.aspx&#34;&gt;http://swxxx.alljournals.cn/ch/reader/rss.aspx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;程引，Alpha，等，《你必读的 RSS 订阅源有哪些》，知乎，&lt;a href=&#34;https://www.zhihu.com/question/19580096/answer/20490041&#34;&gt;https://www.zhihu.com/question/19580096/answer/20490041&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;爱因斯没有坦，《科研利&amp;ndash;inoreader 同步世界的资讯》，简书，&lt;a href=&#34;https://www.jianshu.com/p/66acd42a1fff&#34;&gt;https://www.jianshu.com/p/66acd42a1fff&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E7%9F%A5%E8%AF%86%E7%AE%A1%E7%90%86/2019-07-01-rss-for-top-news/</link>
      <pubDate>Mon, 01 Jul 2019 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E7%9F%A5%E8%AF%86%E7%AE%A1%E7%90%86/2019-07-01-rss-for-top-news/</guid>
      
    </item>
    
    <item>
      <title>非 root 用户手动编译安装 GCC</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2019-07-01&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2019-07-01T00:00:00&#39;&gt;2019-07-01&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2023-03-24&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2023-03-24T09:44:07&#39;&gt;2023-03-24&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;我们知道，关于 GCC 在 CentOS 下通过 yum 安装默认版本号，CentOS 5 是 4.1.2；CentOS 6 是 4.4.7；CentOS 7 是 4.8.3。很多时候在编译安装软件都需要高版本的 GCC，否则就会报错。那么如何升级 GCC 的版本呢？&lt;/p&gt;
&lt;p&gt;首先要确认升级到的 GCC 版本号。目前 GCC 的最新版已经到了 9.1（2019-05-03），而 CentOS 7 则依然使用其 4.8，所以基于兼容性考虑，可以选择升级到 4.8.5。GCC 官网：&lt;a href=&#34;https://gcc.gnu.org/&#34;&gt;https://gcc.gnu.org&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;需要注意，编译安装 GCC 内存不小于 1GB，Swap 不小于 1GB，硬盘最低不小于 10GB，否则极有可能会中途报错退出。编译安装完后，目录 GCC-4.8.5 将会有 5GB 之多。&lt;/p&gt;
&lt;h2 id=&#34;1-下载源码&#34;&gt;1. 下载源码&lt;a class=&#34;headerlink&#34; href=&#34;#1-下载源码&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;源码地址：&lt;a href=&#34;https://ftp.gnu.org/gnu/gcc/&#34;&gt;https://ftp.gnu.org/gnu/gcc/&lt;/a&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;wget&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ftp://ftp.gnu.org/gnu/gcc/gcc-4.8.5/gcc-4.8.5.tar.gz&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--no-check-certificate
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;2-下载依赖包&#34;&gt;2. 下载依赖包&lt;a class=&#34;headerlink&#34; href=&#34;#2-下载依赖包&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;编译安装 GCC 需要依赖 mpc，mpfr，gmp，isl 包。前四个包是 GNU 软件，使用 GCC 源码里自带脚本（&lt;strong&gt;./contrib/download_prerequisites&lt;/strong&gt;）可以轻松下载；对于下载不成功的，需要我们手动去下载。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tar&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;zxf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;gcc-4.8.5.tar.gz
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;gcc-4.8.5
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;./contrib/download_prerequisites
--2019-06-06&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;16&lt;/span&gt;:18:09--&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;ftp://gcc.gnu.org/pub/gcc/infrastructure/mpfr-2.4.2.tar.bz2
&lt;span class=&#34;w&#34;&gt;           &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;“mpfr-2.4.2.tar.bz2”
Resolving&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;gcc.gnu.org...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;209&lt;/span&gt;.132.180.131
Connecting&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;gcc.gnu.org&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;209&lt;/span&gt;.132.180.131&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;:21...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;connected.
Logging&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;as&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;anonymous&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Logged&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;!
&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;SYST&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;.&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;PWD&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;.
&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;TYPE&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;I&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;.&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;CWD&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/pub/gcc/infrastructure&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;.
&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;SIZE&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mpfr-2.4.2.tar.bz2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;1077886&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;PASV&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;.&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;RETR&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mpfr-2.4.2.tar.bz2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;.
Length:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1077886&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.0M&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;unauthoritative&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;m&#34;&gt;100&lt;/span&gt;%&lt;span class=&#34;o&#34;&gt;[=================================================================================&lt;/span&gt;&amp;gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;,077,886&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;249K/s&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4&lt;/span&gt;.2s

&lt;span class=&#34;m&#34;&gt;2019&lt;/span&gt;-06-06&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;16&lt;/span&gt;:18:19&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;249&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;KB/s&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;“mpfr-2.4.2.tar.bz2”&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;saved&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1077886&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;

--2019-06-06&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;16&lt;/span&gt;:18:20--&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;ftp://gcc.gnu.org/pub/gcc/infrastructure/gmp-4.3.2.tar.bz2
&lt;span class=&#34;w&#34;&gt;           &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;“gmp-4.3.2.tar.bz2”
Resolving&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;gcc.gnu.org...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;209&lt;/span&gt;.132.180.131
Connecting&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;gcc.gnu.org&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;209&lt;/span&gt;.132.180.131&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;:21...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;connected.
Logging&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;as&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;anonymous&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Logged&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;!
&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;SYST&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;.&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;PWD&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;.
&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;TYPE&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;I&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;.&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;CWD&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/pub/gcc/infrastructure&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;.
&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;SIZE&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;gmp-4.3.2.tar.bz2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;1897483&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;PASV&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;.&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;RETR&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;gmp-4.3.2.tar.bz2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;.
Length:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1897483&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.8M&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;unauthoritative&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;m&#34;&gt;100&lt;/span&gt;%&lt;span class=&#34;o&#34;&gt;[=================================================================================&lt;/span&gt;&amp;gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;,897,483&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;210K/s&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;7&lt;/span&gt;.7s

&lt;span class=&#34;m&#34;&gt;2019&lt;/span&gt;-06-06&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;16&lt;/span&gt;:18:30&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;239&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;KB/s&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;“gmp-4.3.2.tar.bz2”&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;saved&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1897483&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;

--2019-06-06&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;16&lt;/span&gt;:18:31--&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;ftp://gcc.gnu.org/pub/gcc/infrastructure/mpc-0.8.1.tar.gz
&lt;span class=&#34;w&#34;&gt;           &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;“mpc-0.8.1.tar.gz”
Resolving&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;gcc.gnu.org...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;209&lt;/span&gt;.132.180.131
Connecting&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;gcc.gnu.org&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;209&lt;/span&gt;.132.180.131&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;:21...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;connected.
Logging&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;as&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;anonymous&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Logged&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;!
&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;SYST&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;.&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;PWD&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;.
&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;TYPE&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;I&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;.&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;CWD&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/pub/gcc/infrastructure&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;.
&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;SIZE&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mpc-0.8.1.tar.gz&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;544950&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;PASV&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;.&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;RETR&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mpc-0.8.1.tar.gz&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;...&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;.
Length:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;544950&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;532K&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;unauthoritative&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;m&#34;&gt;100&lt;/span&gt;%&lt;span class=&#34;o&#34;&gt;[=================================================================================&lt;/span&gt;&amp;gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;544&lt;/span&gt;,950&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;286K/s&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.9s

&lt;span class=&#34;m&#34;&gt;2019&lt;/span&gt;-06-06&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;16&lt;/span&gt;:18:35&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;286&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;KB/s&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;“mpc-0.8.1.tar.gz”&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;saved&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;544950&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;

$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;wget&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;http://isl.gforge.inria.fr/isl-0.14.tar.gz
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;tar&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;zvxf&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;isl-0.14.tar.gz
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ln&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-s&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;lsl&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;isl-0.14
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;在此脚本里可以看到依赖包的版本号依次是 mpc-0.8.1，mpfr-2.4.2，gmp-4.3.2；另外我们下载 isl-0.14。&lt;/p&gt;
&lt;p&gt;在 GCC-7.3.0 中，所有的依赖包都可以通过 &lt;strong&gt;&lt;code&gt;./contrib/download_prerequisites&lt;/code&gt;&lt;/strong&gt; 一键完成下载。
&lt;img alt=&#34;image.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fm6vKB8MMGgGNgdn0wvGcoiSL5EF.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;3-编译安装&#34;&gt;3. 编译安装&lt;a class=&#34;headerlink&#34; href=&#34;#3-编译安装&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;为了避免在编译过程中，受原来系统自定义的一堆环境影响，建议先 &lt;strong&gt;unset&lt;/strong&gt; 这些环境设置：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nb&#34;&gt;unset&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;LIBRARY_PATH&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;CPATH&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;C_INCLUDE_PATH&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;PKG_CONFIG_PATH&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;CPLUS_INCLUDE_PATH&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;INCLUDE
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;参考：&lt;a href=&#34;https://stackoverflow.com/questions/12255058/g-4-7-1-compilation-error-conflicting-types-for-strsignal&#34;&gt;https://stackoverflow.com/questions/12255058/g-4-7-1-compilation-error-conflicting-types-for-strsignal&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;完整编译安装步骤如下：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;mkdir&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;gcc-build-4.8.5
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;gcc-build-4.8.5
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;unset&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;LIBRARY_PATH&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;CPATH&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;C_INCLUDE_PATH&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;PKG_CONFIG_PATH&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;CPLUS_INCLUDE_PATH&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;INCLUDE

$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;../configure&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-enable-checking&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;release&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-enable-languages&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;c,c++&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-disable-multilib&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/Bioinfo/SoftWare/gcc-4.8.5

&lt;span class=&#34;c1&#34;&gt;# 如果想升级 gfortran，切记加上fortran！！！&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;../configure&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-enable-checking&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;release&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-enable-languages&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;c,c++,fortran&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-disable-multilib&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/Bioinfo/SoftWare/gcc-4.8.5

$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;make&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install
.....
----------------------------------------------------------------------
Libraries&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;have&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;been&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;installed&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;:
&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;/Bioinfo/SoftWare/gcc-4.8.5/lib/../lib64

If&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;you&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ever&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;happen&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;want&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;link&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;against&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;installed&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;libraries
&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;a&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;given&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;directory,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;LIBDIR,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;you&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;must&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;either&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;use&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;libtool,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;and
specify&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;full&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pathname&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;of&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;library,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;or&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;use&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;-LLIBDIR&lt;span class=&#34;s1&#34;&gt;&amp;#39;&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;flag during linking and do at least one of the following:&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;   - add LIBDIR to the `LD_LIBRARY_PATH&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;environment&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;variable
&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;during&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;execution
&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;-&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;add&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;LIBDIR&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;LD_RUN_PATH&lt;span class=&#34;s1&#34;&gt;&amp;#39; environment variable&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;     during linking&lt;/span&gt;
&lt;span class=&#34;s1&#34;&gt;   - use the `-Wl,-rpath -Wl,LIBDIR&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;linker&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;flag
&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;-&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;have&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;your&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;system&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;administrator&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;add&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;LIBDIR&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;/etc/ld.so.conf&lt;span class=&#34;err&#34;&gt;&amp;#39;&lt;/span&gt;

See&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;any&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;operating&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;system&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;documentation&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;about&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;shared&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;libraries&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;
more&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;information,&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;such&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;as&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ld&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;and&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ld.so&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;8&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;manual&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;pages.
----------------------------------------------------------------------
......
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;⚠️ 注意：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;如果想升级 gfortran，configure 时切记加上 fortran！！！&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果需要重新 &lt;strong&gt;configure&lt;/strong&gt; 或在 &lt;strong&gt;make&lt;/strong&gt; 中途出错需要退出，最好把当前目录下的所有东西都删除干净。可以执行下面指令清空 编译目录下的相关文件，包括 makefile：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;make&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;distclean
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;4-配置环境变量&#34;&gt;4. 配置环境变量&lt;a class=&#34;headerlink&#34; href=&#34;#4-配置环境变量&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;GCC 安装完成后，需要包新安装的 gcc 添加到  &lt;code&gt;PATH&lt;/code&gt;  个人相应的 &lt;strong&gt;&lt;code&gt;LD_LIBRARY_PATH&lt;/code&gt;&lt;/strong&gt;：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/Bioinfo/SoftWare/gcc-4.8.5/bin:&lt;span class=&#34;nv&#34;&gt;$PATH&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;LD_LIBRARY_PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/Bioinfo/SoftWare/gcc-4.8.5/lib64:&lt;span class=&#34;nv&#34;&gt;$LD_LIBRARY_PATH&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;如果不想把新装 GCC 添加到 &lt;strong&gt;&lt;code&gt;~/.bashrc&lt;/code&gt;&lt;/strong&gt; 中的 &lt;strong&gt;&lt;code&gt;PATH&lt;/code&gt;&lt;/strong&gt; 和 &lt;strong&gt;&lt;code&gt;LD_LIBRARY_PATH&lt;/code&gt;&lt;/strong&gt; 让它永久起作用，但是在安装软件时又想使用新安装的高级版本的 GCC 来编译软件，可以：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在软件编译前先执行上面两个  &lt;strong&gt;export&lt;/strong&gt;  语句，再执行后面的编译安装命令；&lt;/li&gt;
&lt;li&gt;或者在软件编译安装时直接在编译参数中添加 gcc/g++ 和其动态库的路径就可以。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;到这里新版本的 GCC 就已经安装完了，在下一篇文章中我们将会跟大家分享一下怎么使用新版本的 GCC 在 Linux 下源码编译安装最新版本的 R-3.6.0。&lt;/p&gt;
&lt;h2 id=&#34;5-参考资料&#34;&gt;5. 参考资料&lt;a class=&#34;headerlink&#34; href=&#34;#5-参考资料&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;秋水逸冰，《&lt;a href=&#34;https://teddysun.com/432.html&#34;&gt;在 CentOS 下编译安装 GCC&lt;/a&gt;》，WorldPress 博客&lt;/li&gt;
&lt;li&gt;佚名，《&lt;a href=&#34;https://stackoverflow.com/questions/21685255/how-can-i-understand-these-dreadful-errors-when-building-gcc-4-8-2&#34;&gt;How can I understand these dreadful errors when building gcc-4.8.2?&lt;/a&gt;》，StackOverflow&lt;/li&gt;
&lt;li&gt;ljpwinxp，《&lt;a href=&#34;http://blog.51cto.com/191226139/2066137&#34;&gt;Centos 6.9 编译安装 gcc 4.8.5&lt;/a&gt;》，51CTO&lt;/li&gt;
&lt;li&gt;代码日志，《&lt;a href=&#34;https://codeday.me/bug/20190121/548141.html&#34;&gt;c – 构建 gcc-4.8.2 时如何理解这些可怕的错误？&lt;/a&gt;》, 博客&lt;/li&gt;
&lt;li&gt;Benjamin Berhault, 《&lt;a href=&#34;http://benjaminberhault.com//post/2018/06/22/install-gcc-on-rhel-centos-7.html&#34;&gt;Build and Install the Last GCC on RHEL/CentOS 7&lt;/a&gt;》，Ben&amp;rsquo;s Jekyll Blog&lt;/li&gt;
&lt;/ol&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E7%B3%BB%E7%BB%9F%E4%B8%8E%E7%BC%96%E8%AF%91/2019-07-01-linux-gcc-install/</link>
      <pubDate>Mon, 01 Jul 2019 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E7%B3%BB%E7%BB%9F%E4%B8%8E%E7%BC%96%E8%AF%91/2019-07-01-linux-gcc-install/</guid>
      
    </item>
    
    <item>
      <title>基于云的六大 Jupyter Notebook 平台测评</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2019-07-01&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2019-07-01T00:00:00&#39;&gt;2019-07-01&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-06-30&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-06-30T09:38:08&#39;&gt;2021-06-30&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;作****者：&lt;/strong&gt;&lt;a href=&#34;https://twitter.com/justmarkham&#34;&gt;Kevin Markham&lt;/a&gt;
**编译：**Steven Shen
&lt;strong&gt;原文：&lt;/strong&gt;&lt;a href=&#34;https://www.dataschool.io/cloud-services-for-jupyter-notebook/&#34;&gt;https://www.dataschool.io/cloud-services-for-jupyter-notebook/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;1_oj36TMqOkHmi6u3kCSsr7Q.png&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FmI-XQJskzKJrjXg9rD0pZPaF0g0.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;有许多方法可以与其他人共享静态 Jupyter 笔记本，例如把它发布在 GitHub 上或通过 nbviewer 链接进行分享。 但是，如果接收人已经安装了 Jupyter Notebook 环境，那么他们只能通过笔记本文件进行交互。&lt;/p&gt;
&lt;p&gt;但是，如果您想分享一个不需要安装任何东西的全交互式 Jupyter 笔记，该怎么办？ 或者，您只想要创建一个自己的 Jupyter 笔记但又不想在本地计算机上安装任何东西？&lt;/p&gt;
&lt;p&gt;在这篇文章中，我将回顾六种可以用来在云端轻松运行 Jupyter 笔记的服务。所有这些服务都具有以下特征：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;它们不需要在你的本地计算机上安装任何东西。&lt;/li&gt;
&lt;li&gt;它们都是完全免费的（或者它们有自己的免费计划）。&lt;/li&gt;
&lt;li&gt;它们都可以让你访问 Jupyter Notebook 环境（或类似 Jupyter 的环境）。&lt;/li&gt;
&lt;li&gt;它们都持 Python 语言（并且大多数支持其他语言）。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;由于所有的这些都是基于云的服务，如果您仅限于使用内部部署的数据，则它们都不适合您。&lt;/p&gt;
&lt;h2 id=&#34;比较标准&#34;&gt;比较标准&lt;a class=&#34;headerlink&#34; href=&#34;#比较标准&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;以下是我对六种服务进行比较的标准：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;支持的语言：&lt;/strong&gt;  此服务是否支持除 Python 以外的其他编程语言？&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;安装软件包：&lt;/strong&gt;  除了已安装的软件包，此服务是否允许您安装其他软件包（或特定版本的软件包）？&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;界面相似性：&lt;/strong&gt;  如果服务提供的是 &amp;ldquo;Jupyter-like&amp;rdquo; 界面（而不是原生的 Jupyter 界面），它与 Jupyter 的界面有多相似？ （这会使地已有的 Jupyter 用户更容易转换到该服务。）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;键盘快捷键：&lt;/strong&gt;  此服务是否使用了与 Jupyter Notebook 相同的键盘快捷键？&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;缺少的功能：&lt;/strong&gt;  在 Jupyter Notebook 中可以执行的操作，在此服务不支持？&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;新增的功能：&lt;/strong&gt; Jupyter Notebook 中不支持的操作，此服务可以实现支持吗？&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;数据集易用性：&lt;/strong&gt;  此服务可以轻松地使用您自己的数据集吗？&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;网络访问：&lt;/strong&gt;  此服务是否允许您从 Notebook 中访问 Internet，以便在必要时可以从 URL 读取数据？&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;保证工作私密性：&lt;/strong&gt;  这项服务是否能允许保持你工作的私密性？&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;公开分享：&lt;/strong&gt;  此服务是否能为您提供公开分享作品的方式？&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;协作能力：&lt;/strong&gt;  此服务是否允许您邀请某人在笔记本上进行协作，并且协作是否可以实时进行？&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;免费计划的性能表现：&lt;/strong&gt;  该服务提供哪些计算资源（RAM 和 CPU）？ 它是否允许您访问 GPU（这对深度学习很有用）？ 包含多少磁盘空间？ 会话可以运行多长时间？&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;性能升级：&lt;/strong&gt;  您是否可以为此服务付费以获取更多计算资源？&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;文档和技术支持：&lt;/strong&gt;  该服务是否有详细记录？ 如果遇到问题，你可以与某人取得联系吗？&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;1-binder&#34;&gt;1. Binder&lt;a class=&#34;headerlink&#34; href=&#34;#1-binder&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FglCc-7KKOQBnabvlJeE2wwrSFbg.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://mybinder.org/&#34;&gt;Binde&lt;/a&gt;r 是 Binder 项目提供的服务，它是 Project Jupyter 开源生态系统的一员。它允许您输入任何公共 Git 存储库的 URL，它将在本机的 Jupyter Notebook 界面中打开该存储库。您可以在存储库中运行任何笔记本，但您所做的任何更改都不会保存回存储库。您不必使用 Binder 创建帐户，也不需要是存储库的所有者，但你所使用的存储库必须包含指定其软件包要求的配置文件。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;支持的语言：&lt;/strong&gt;
支持  Python (2 and 3), R, Julia，以及  &lt;a href=&#34;https://github.com/jupyter/jupyter/wiki/Jupyter-kernels&#34;&gt;Jupyter 支持的其他任何语言&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;安装软件包：&lt;/strong&gt;
您可以使用&lt;a href=&#34;https://mybinder.readthedocs.io/en/latest/config_files.html&#34;&gt;配置文件&lt;/a&gt;（例如 environment.yml 或 requirements.txt）指定特定的包要求。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;界面相似度：&lt;/strong&gt; Binder 使用原生的 Jupyter Notebook 界面。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;键盘快捷键：&lt;/strong&gt; Binder 使用与 Jupyter 相同的所有键盘快捷键。&lt;/p&gt;
&lt;p&gt;**缺少的功能：**无。&lt;/p&gt;
&lt;p&gt;**新增的功能：**无。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;数据集易用性：&lt;/strong&gt;
如果您的数据集位于同一个 Git 存储库中，那么它将自动在 Binder 中可用。如果您的数据集不在该存储库中，但可以在任何公共 URL 上使用，那么您可以向存储库添加一个&lt;a href=&#34;https://github.com/binder-examples/getting-data&#34;&gt;特殊文件&lt;/a&gt;，告知 Binder 下载您的数据集。但是，Binder 不支持访问私有数据集。&lt;/p&gt;
&lt;p&gt;**网络访问：**支持。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;保证工作私密性：&lt;/strong&gt;  不，因为它只适用于公共 Git 存储库。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;公开分享：&lt;/strong&gt;
支持。您可以分享直接连接到你个人 Binder 的  &lt;a href=&#34;https://mybinder.org/v2/gh/justmarkham/pycon-2018-tutorial/master?filepath=tutorial.ipynb&#34;&gt;URL&lt;/a&gt;，其他人也可以使用 Binder 网站运行您的笔记本（只要他们知道您的 Git 存储库的 URL）。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;协作能力：&lt;/strong&gt;
不支持。如果您想与同一个笔记本上的某个人合作，而您的存储库托管在 GitHub 上，那么您可以使用普通的拉取请求工作流程的方式进行协作。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;免费计划的性能表现：&lt;/strong&gt;
您最多可以使用 2GB 的 RAM。虽然它们要求您不要包含 &amp;ldquo;非常大的文件&amp;rdquo;（超过几百兆字节），但磁盘空间量没有特定限制。Binder 的&lt;a href=&#34;https://mybinder.readthedocs.io/en/latest/faq.html#what-factors-influence-how-long-it-takes-a-binder-session-to-start&#34;&gt;启动速度很慢&lt;/a&gt;，尤其是当它在最近更新的存储库上运行时。会话将在 20 分钟不活动后关闭，但它们可以运行 12 小时或更长时间。Binder 还有其他使用指南，包括对任何给定了存储库的 100 个并发用户的限制等。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;性能升级：&lt;/strong&gt;
不支持。但是，您可以选择设置自己的  &lt;a href=&#34;https://binderhub.readthedocs.io/en/latest/&#34;&gt;BinderHub&lt;/a&gt;  部署，它可以提供与 Binder 相同的功能，同时允许您自定义环境（例如增加计算资源或允许私有文件）。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;文档和技术支持：&lt;/strong&gt; 
Binder 有大量&lt;a href=&#34;https://mybinder.readthedocs.io/en/latest/&#34;&gt;文档&lt;/a&gt;。它通过  &lt;a href=&#34;https://gitter.im/jupyterhub/binder&#34;&gt;Gitter&lt;/a&gt;  聊天和  &lt;a href=&#34;https://discourse.jupyter.org/&#34;&gt;Discourse&lt;/a&gt;  论坛提供社区支持，并在  &lt;a href=&#34;https://github.com/jupyterhub/binderhub/issues&#34;&gt;GitHub&lt;/a&gt;  上跟踪产品问题。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;结论：&lt;/strong&gt;
如果您的笔记本已经存储在公共 GitHub 中，Binder 是让其他人与它们进行交互的最简单方法。用户不必创建帐户，如果他们已经知道如何使用 Jupyter Notebook，他们会感到宾至如归。但是，您需要牢记 Binder 的性能限制和用户限制！&lt;/p&gt;
&lt;h2 id=&#34;2-kaggle-kernels&#34;&gt;2. Kaggle Kernels&lt;a class=&#34;headerlink&#34; href=&#34;#2-kaggle-kernels&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FiByayBnDfsViNwGuiruJCfJuotz.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.kaggle.com/&#34;&gt;Kaggle&lt;/a&gt;  是最着名的数据科学竞赛平台。但是，他们还提供可以独立于竞争对手使用，名为  &lt;a href=&#34;https://www.kaggle.com/kernels&#34;&gt;Kernels&lt;/a&gt;  的免费服务。创建 Kaggle 帐户（或使用 Google 或 Facebook 登录）后，您可以创建一个使用笔记本或脚本界面的内核，但我更专注于下面提到的的笔记本界面信息。&lt;/p&gt;
&lt;p&gt;**支持的语言：**只支持 Python3 和 R。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;安装软件包：&lt;/strong&gt;
Kaggle** **预先安装了数百个软件包，您可以使用 pip 或通过指定软件包的 GitHub 存储库来安装其他软件包。但是，您安装的任何其他软件包都需要在每个会话开始时重新安装。或者，您可以要求 Kaggle 在其默认安装中包含其他软件包。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;界面相似度：&lt;/strong&gt; 
在视觉上，Kernels 界面看起来与 Jupyter 界面完全不同。 屏幕顶部没有菜单栏或工具栏，右侧有可折叠的侧边栏，用于调整设置，并且笔记本下方有一个控制台。然而，在 Kernels 笔记本中工作实际上与在 Jupyter 笔记本中工作非常相似，特别是如果你对 Jupyter 的键盘快捷键感到满意的话。此外，请注意，&lt;a href=&#34;https://www.kaggle.com/product-feedback/83336&#34;&gt;重新设计的界面&lt;/a&gt;（如上面的屏幕截图所示）将很快发布，这更类似于 Jupyter 界面，并包含一个简单的菜单栏。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;键盘快捷键：&lt;/strong&gt;  内核使用了与 Jupyter 相同的所有键盘快捷键。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;缺少的功能：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;由于内核尚未包含菜单栏或工具栏，因此许多操作只能使用键盘快捷键或命令调色板完成。&lt;/li&gt;
&lt;li&gt;您无法将笔记本下载为其他有用的格式，如 Python 脚本，HTML 网页或 Markdown 文件。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;新增的功能：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;内核包括了一个轻量级的版本控制系统。每次要保存工作时，都会有一个 &amp;ldquo;提交&amp;rdquo; 按钮，从上到下运行整个笔记本，并为历史记录添加新版本。（您可以在此过程中继续工作，这对于长时间运行的笔记本来说非常重要。）虽然您无法命名版本，但您可以在任何两个版本之间显示&amp;rdquo;差异&amp;rdquo;。&lt;/li&gt;
&lt;li&gt;内核允许您有选择地隐藏任何代码单元的输入和/或输出，这样可以轻松自定义笔记本的演示文稿。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;数据集易用性：&lt;/strong&gt;  
您可以从本地计算机，URL 或  &lt;a href=&#34;https://www.kaggle.com/product-feedback/77211&#34;&gt;GitHub 存储库&lt;/a&gt;将数据集上传到 Kaggle，它将由另一个名为  &lt;a href=&#34;https://www.kaggle.com/datasets&#34;&gt;Datasets&lt;/a&gt;  的 Kaggle 服务免费托管。您可以将上传的数据集设为私有或公共。您上传的任何数据集以及其他 Kaggle 用户上传的任何公共数据集都可以被你的任何一个内核访问。每个数据集的最大大小为 20 GB，单个内核可以访问多个数据集。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;网络访问：&lt;/strong&gt;  允许。&lt;/p&gt;
&lt;p&gt;**保证工作私密性：**支持。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;公开分享：&lt;/strong&gt; 
支持。如果您选择&lt;a href=&#34;https://www.kaggle.com/justmarkham/tutorial&#34;&gt;公开您的内核&lt;/a&gt;，则任何人都可以在不创建 Kaggle 帐户的情况下访问它，任何拥有 Kaggle 帐户的人都可以对您的内核发表评论或将其复制到自己的帐户。此外，Kaggle 还为您提供了一个&lt;a href=&#34;https://www.kaggle.com/justmarkham&#34;&gt;公共的  profile page&lt;/a&gt;，其中显示了所有公共内核和数据集。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;协作能力：&lt;/strong&gt; 
支持。您可以保持内核私有，但可以邀请特定的 Kaggle 用户查看或编辑它。没有实时协作：它更像是在单独的内核副本上工作，除了所有提交都添加到相同的版本历史记录中。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;免费计划的性能表现：&lt;/strong&gt; 
您可以使用具有 17GB RAM 的 4 核 CPU，或具有 14GB RAM 和 GPU 的 2 核 CPU。虽然数据集使用的任何磁盘空间都不计入这些数字，但您将拥有 5 GB 的 &amp;ldquo;已保存&amp;rdquo; 磁盘空间和 17 GB 的 &amp;ldquo;临时&amp;rdquo; 磁盘空间。会话将在 60 分钟不活动后关闭，但它们可以运行长达 9 个小时。&lt;/p&gt;
&lt;p&gt;**性能升级：**支持。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;文档和技术支持：&lt;/strong&gt; Kaggle 内核有大量丰富的&lt;a href=&#34;https://www.kaggle.com/docs/kernels&#34;&gt;文档&lt;/a&gt;。用户可通过&lt;a href=&#34;https://www.kaggle.com/contact&#34;&gt;表格的联系方式&lt;/a&gt;和&lt;a href=&#34;https://www.kaggle.com/product-feedback&#34;&gt;论坛&lt;/a&gt;获得支持。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;结论：&lt;/strong&gt;
只要您对稍微混乱的界面（在重新设计中已得到改进）感到满意，您就可以访问高性能环境，在该环境中可以轻松使用数据集并公开分享您的工作 （或保持私密）。Kaggle 包含的版本控制和协作功能也是很好的功能补充，但两者都不是功能很齐全。&lt;/p&gt;
&lt;h2 id=&#34;3-google-colaboratory-colab&#34;&gt;3. Google Colaboratory (Colab)&lt;a class=&#34;headerlink&#34; href=&#34;#3-google-colaboratory-colab&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fi9errwbCxeyVLKqqSmQ8oPAGdbm.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://colab.research.google.com/&#34;&gt;Google Colaboratory&lt;/a&gt;，通常称为&amp;rdquo;Google Colab&amp;rdquo;，适用于拥有 Google 帐户的任何人。只要您已登录 Google，就可以快速开始创建空笔记本，上传现有笔记本或从任何公共 GitHub 存储库导入笔记本。您的 Colab 笔记本会自动保存 在 Google 云端硬盘中的特殊文件夹中，您甚至可以直接从云端硬盘创建新笔记本。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;支持的语言：&lt;/strong&gt; 
支持 Python（2 和 3）和 Swift（2019 年 1 月添加）。也可以为其他语言安装内核，但安装过程因语言而异，并且没有详细记录。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;安装软件包：&lt;/strong&gt;
已预先安装了数百个软件包，您可以使用  &lt;code&gt;pip&lt;/code&gt;  安装其他软件包。但是，您安装的任何其他软件包都需要在每个会话开始时重新安装。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;界面相似度：&lt;/strong&gt; 
在视觉上，Colab 界面看起来非常类似于 Jupyter 界面。然而，在 Colab 工作实际上感觉与在 Jupyter Notebook 中工作非常不同：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;大多数菜单项都不同。&lt;/li&gt;
&lt;li&gt;Colab 改变了一些标准术语（&amp;rdquo;kernel&amp;rdquo; 被替换成了 &amp;ldquo;runtime&amp;rdquo;，&amp;rdquo;markdown cell&amp;rdquo; 被替换成了 &amp;ldquo;text cell&amp;rdquo;，等）。&lt;/li&gt;
&lt;li&gt;Colab 发明了一些我们必须了解的新概念，例如 &amp;ldquo;playground mode&amp;rdquo;。&lt;/li&gt;
&lt;li&gt;Colab 中的命令模式和编辑模式与 Jupyter 中的工作方式不同。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;键盘快捷键：&lt;/strong&gt; 
虽然 Colab 允许您自定义快捷方式，但在 Colab 中，Jupyter 使用的大多数单字母键盘快捷键（例如使用 &amp;ldquo;a&amp;rdquo; 快捷键实现 &amp;ldquo;insert cell above&amp;rdquo;）都已经更改为多步骤的组合键（&amp;rdquo;Ctrl + m&amp;rdquo; 后跟 &amp;ldquo;a&amp;rdquo;）。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;缺少的功能：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;由于 Colab 菜单栏缺少某些条目，且工具栏保持非常简单，因此某些操作只能使用键盘快捷键完成。&lt;/li&gt;
&lt;li&gt;您无法将笔记本下载为其他有用的格式，例如 HTML 网页或 Markdown 文件（虽然您可以将其下载为 Python 脚本）。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;新增的功能：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Colab 包括了一个轻量级版本控制系统。它经常用于保存笔记本的当前状态，您可以浏览修订历史记录。但是，您无法在版本之间显示&amp;rdquo;差异&amp;rdquo;，这意味着各个版本之间的任何比较您都必须手动进行操作。&lt;/li&gt;
&lt;li&gt;Colab 允许您将&lt;a href=&#34;https://colab.research.google.com/notebooks/forms.ipynb&#34;&gt;表单字段&lt;/a&gt;添加到笔记本中，这使您能够以交互的方式参数化代码。但是，这些字段仅适用于 Colab。&lt;/li&gt;
&lt;li&gt;当您在笔记本中创建一个章节标题时，Colab 会使每个章节都可折叠，并在侧边栏中自动创建&amp;rdquo;目录&amp;rdquo;，这使得大型笔记本更容易导航。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;数据集易用性：&lt;/strong&gt; 
您可以上传数据集以在 Colab 笔记本中使用，但一旦结束会话，它将自动删除。或者，您可以允许 Colab 从您的 Google 云端硬盘读取文件，虽然它比较&lt;a href=&#34;https://colab.research.google.com/notebooks/snippets/drive.ipynb&#34;&gt;复杂&lt;/a&gt;。 Colab 还包括其他 Google 服务的连接器，例如 Google 表格和 Google 云端存储。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;网络访问：&lt;/strong&gt;  支持。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;保证工作私密性的能力：&lt;/strong&gt;  支持。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;公开分享的能力：&lt;/strong&gt;
支持。如果您选择公开您的笔记本并分享链接，则任何人都可以在不创建 Google 帐户的情况下访问该笔记本，并且拥有 Google 帐户的任何人都可以将其复制到他们自己的帐户。此外，您可以授权 Colab 将 笔记本的副本保存到 GitHub 或 Gist，然后从那里共享。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;协作能力：&lt;/strong&gt;
支持。您可以将笔记本设置为私密，但可以邀请特定人员查看或编辑它（使用 Google 熟悉的共享界面）。您和您的协作者可以同时编辑笔记本并查看彼此的更改，并为彼此添加注释（类似于 Google 文档），尽管在您在执行更改和合作者看到它们之间有 30 秒的延迟。此外，您实际上并未与协作者共享您的环境（意味着没有同步运行的代码），这极大地限制了近实时协作的有用性。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;免费计划的性能表现：&lt;/strong&gt;
Colab 可以让您访问  &lt;a href=&#34;https://colab.research.google.com/notebooks/gpu.ipynb&#34;&gt;GPU&lt;/a&gt;  或  &lt;a href=&#34;https://colab.research.google.com/notebooks/tpu.ipynb&#34;&gt;TPU&lt;/a&gt;。然而，Google 不会为其环境提供任何规范。如果您将 Colab 连接到 Google 云端硬盘，那么您将获得最多 15 GB 的磁盘空间来存储数据集。Colab  会话将在 60 分钟不活动后关闭，但它们可以运行长达 12 小时。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;性能升级：&lt;/strong&gt; 
不允许。但是，您可以选择连接到  &lt;a href=&#34;https://research.google.com/colaboratory/local-runtimes.html&#34;&gt;a local runtime&lt;/a&gt;，这允许您在本地硬件上执行代码并访问本地文件系统。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;文档和技术支持：&lt;/strong&gt;
Colab 拥有很少的文档，这些文档都包含在  &lt;a href=&#34;https://research.google.com/colaboratory/faq.html&#34;&gt;FAQ 页面&lt;/a&gt;和各种&lt;a href=&#34;https://colab.research.google.com/notebooks/welcome.ipynb&#34;&gt;示例笔记本&lt;/a&gt;中。用户可通过  &lt;a href=&#34;https://github.com/googlecolab/colabtools/issues&#34;&gt;GitHub issues&lt;/a&gt;，或者  &lt;a href=&#34;https://stackoverflow.com/questions/tagged/google-colaboratory&#34;&gt;Stack Overflow&lt;/a&gt;  社区获取支持。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;结论：&lt;/strong&gt;
Colab 的最大优势在于它易于上手，因为大多数人已经拥有 Google 帐户，并且共享笔记本很容易，因为共享功能与 Google Docs 相同。然而，繁琐的键盘快捷键和使用数据集的困难是显著的缺点。在同一笔记本上进行协作的能力很有用，但由于您没有共享环境，因此协作能力的作用也会有所降低。&lt;/p&gt;
&lt;h2 id=&#34;4-microsoft-azure-notebooks&#34;&gt;4. Microsoft Azure Notebooks&lt;a class=&#34;headerlink&#34; href=&#34;#4-microsoft-azure-notebooks&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Frcw6uwHZy_6OvfeZR2Zk0QFI5aI.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;要开始使用  &lt;a href=&#34;https://notebooks.azure.com/&#34;&gt;Azure 笔记本&lt;/a&gt;，请先使用 Microsoft 或 Outlook 帐户登录（或创建一个帐户）。然后是创建一个 &amp;ldquo;项目&amp;rdquo;，其结构与 GitHub 存储库相同：它可以包含一个或多个笔记本、Markdown 文件、数据集以及您要创建或上传的任何其他文件，所有这些都可以组织到文件夹中。与 GitHub 一样，您可以使用 README 文件初始化项目，该文件将自动显示在项目页面上。如果您的工作已存储在 GitHub 上，则可以将整个存储库直接导入到项目中。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;支持的语言：&lt;/strong&gt; Python (2 and 3), R, and F#.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;安装软件包：&lt;/strong&gt;
预先安装了数百个软件包，您可以使用  &lt;code&gt;pip&lt;/code&gt;  或  &lt;code&gt;conda&lt;/code&gt; &lt;a href=&#34;https://docs.microsoft.com/en-us/azure/notebooks/install-packages-jupyter-notebook&#34;&gt;安装其他软件包&lt;/a&gt;，并且可以使用&lt;a href=&#34;https://docs.microsoft.com/en-us/azure/notebooks/quickstart-create-jupyter-notebook-project-environment&#34;&gt;配置文件&lt;/a&gt;（例如  &lt;code&gt;environment.yml&lt;/code&gt;  或  &lt;code&gt;requirements.txt&lt;/code&gt; ）指定明确的软件包要求。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;界面相似度：&lt;/strong&gt;
Azure 使用原生的 Jupyter Notebook 界面。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;键盘快捷键：&lt;/strong&gt;
Azure 使用与 Jupyter 相同的所有键盘快捷键。&lt;/p&gt;
&lt;p&gt;**缺少的功能：**无。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;新增的功能：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;已预先安装  &lt;a href=&#34;https://rise.readthedocs.io/&#34;&gt;RISE&lt;/a&gt;  扩展程序，可让您立即将笔记本显示为基于 live.js 的幻灯片。&lt;/li&gt;
&lt;li&gt;已预先安装  &lt;a href=&#34;https://jupyter-contrib-nbextensions.readthedocs.io/&#34;&gt;jupyter_contrib_nbextensions&lt;/a&gt;  包，可让您轻松访问 50 多个 Jupyter Notebook 扩展的集合，以增强笔记本界面。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;数据集易用性：&lt;/strong&gt;
您可以从本地计算机或 URL 将数据集上传到项目中，并且项目中的任何笔记本都可以访问该数据集。Azure 还包括其他 Azure 服务的&lt;a href=&#34;https://docs.microsoft.com/en-us/azure/notebooks/access-data-resources-jupyter-notebooks&#34;&gt;连接器&lt;/a&gt;，例如 Azure 存储和各种 Azure 数据库。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;网络访问：&lt;/strong&gt;  支持。&lt;/p&gt;
&lt;p&gt;**保证工作私密性的能力：**支持。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;公开分享的能力：&lt;/strong&gt;
支持。如果您选择&lt;a href=&#34;https://notebooks.azure.com/justmarkham/projects/pycon-2018-tutorial&#34;&gt;公开您的项目&lt;/a&gt;，则任何人都可以在不创建 Microsoft 帐户的情况下访问它，任何拥有 Microsoft 帐户的人都可以将其复制到自己的帐户。此外，Azure 还为您提供了一个&lt;a href=&#34;https://notebooks.azure.com/justmarkham&#34;&gt;公共配置文件页面&lt;/a&gt;（非常类似于 GitHub 配置文件），它显示了所有公共项目。&lt;/p&gt;
&lt;p&gt;**协作能力：**暂不支持，虽然这是一个&lt;a href=&#34;https://github.com/Microsoft/AzureNotebooks/issues/6&#34;&gt;计划中的功能&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;免费计划的性能表现：&lt;/strong&gt;
您可以访问 4 GB 的 RAM 和 1 GB 的磁盘空间（每个项目）。会话将在 60 分钟不活动后关闭，但它们可以运行 8 小时或更长时间。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;性能升级：&lt;/strong&gt; 
支持。您可以为  &lt;a href=&#34;https://azure.microsoft.com/en-us/free/&#34;&gt;Azure 订阅付费&lt;/a&gt;，但&lt;a href=&#34;https://docs.microsoft.com/en-us/azure/notebooks/configure-manage-azure-notebooks-projects&#34;&gt;设置过程&lt;/a&gt;非常琐细且&lt;a href=&#34;https://azure.microsoft.com/en-us/pricing/details/virtual-machines/linux/&#34;&gt;价格计算&lt;/a&gt;很复杂。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;文档和技术支持：&lt;/strong&gt; 
Azure 提供了大量的&lt;a href=&#34;https://docs.microsoft.com/en-us/azure/notebooks/&#34;&gt;文档&lt;/a&gt;。用户也可通过  &lt;a href=&#34;https://github.com/microsoft/AzureNotebooks/issues&#34;&gt;GitHub issues&lt;/a&gt;  获得支持。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;结论：&lt;/strong&gt;
Azure Notebooks 的最大优势在于它的易用性：项目结构（从 GitHub 借用）使得使用多个笔记本和数据集变得简单，并且使用原生 Jupyter 界面意味着现有的 Jupyter 用户将拥有一个简单的过渡。但是，RAM 和磁盘空间并不是特别慷慨，缺乏协作是功能上的一个巨大差距。&lt;/p&gt;
&lt;h2 id=&#34;5-cocalc&#34;&gt;5. CoCalc&lt;a class=&#34;headerlink&#34; href=&#34;#5-cocalc&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FgYugeMt0L6WDKav-ZUCKhz-MozM.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://cocalc.com/&#34;&gt;CoCalc&lt;/a&gt;，是 &amp;ldquo;collaborative calculation&amp;rdquo; 的缩写，是用于 Python，R，Julia 和许多其他语言计算的在线工作空间。 它允许您创建和编辑 Jupyter 笔记本，Sage 工作表和 LaTeX 文档。创建 CoCalc 帐户后，第一步是创建一个 &amp;ldquo;项目&amp;rdquo;，其中可以包含一个或多个笔记本、Markdown 文件、数据集以及您要创建或上传的任何其他文件，并且所有这些文件都可以组织到文件夹中。项目界面起初有点让人应接不暇，但是一旦你创建或打开笔记本，它看起来就会更加熟悉。&lt;/p&gt;
&lt;p&gt;**支持的语言：**Python (2 and 3), R, Julia, 以及其他的语言。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;安装软件包：&lt;/strong&gt;
CoCalc  预先安装了数百个包。您可以使用  &lt;code&gt;pip&lt;/code&gt;  安装其他软件包，但在使用免费套餐时无法使用这个功能。或者，您可以要求 CoCalc 在其默认安装中包含其他软件包。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;界面相似度：&lt;/strong&gt;
虽然 CoCalc 没有使用原生的 Jupyter Notebook 界面（他们使用 React.js 重写了它），但界面与 Jupyter 非常相似，只有少许修改。您实际上可以从 CoCalc 中&lt;a href=&#34;https://doc.cocalc.com/jupyter.html#classical-versus-cocalc&#34;&gt;切换&lt;/a&gt;到使用原生的 Jupyter Notebook，但不建议这样做，因为您将无法访问最有价值的 CoCalc 功能（&amp;rdquo;time travel&amp;rdquo;  和实时协作，这将在下面讨论）。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;键盘快捷键：&lt;/strong&gt; 
CoCalc 几乎使用与 Jupyter 相同的所有键盘快捷键。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;缺少的功能：&lt;/strong&gt;
CoCalc &lt;a href=&#34;https://github.com/sagemathinc/cocalc/issues/1930&#34;&gt;目前不支持&lt;/a&gt;交互式小部件。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;新增的功能：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CoCalc 包含一个称为&lt;a href=&#34;https://cocalc.com/doc/jupyter-notebook.html#a-timetravel&#34;&gt;时间旅行&lt;/a&gt;的强大版本控制功能，可以精确记录笔记本中的所有更改，并允许您使用直观的滑块控件浏览这些更改。&lt;/li&gt;
&lt;li&gt;CoCalc 每隔几分钟就会保存所有项目文件的备份，这意味着您可以根据需要恢复旧版本的文件。&lt;/li&gt;
&lt;li&gt;CoCalc 包括&lt;a href=&#34;https://doc.cocalc.com/teaching-instructors.html&#34;&gt;教学的一些其他功能&lt;/a&gt;，例如分发和评分作业的能力，以及在学生工作和与学生分交流享任务时观察学生的能力。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;数据集易用性：&lt;/strong&gt;
您可以从本地计算机将数据集上传到项目中，并且项目中的任何笔记本都可以访问该数据集。&lt;/p&gt;
&lt;p&gt;**网络访问：**不，使用免费计划时无法使用此功能。&lt;/p&gt;
&lt;p&gt;**保证工作私密性的能力：**允许。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;公开分享的能力：&lt;/strong&gt;
允许。如果您选择公开您的笔记本并分享链接，则任何人都可以在不创建 CoCalc 帐户的情况下访问该笔记本，并且拥有 CoCalc 帐户的任何人都可以将其复制到自己的帐户。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;协作能力：&lt;/strong&gt;
允许。您可以将笔记本保密，但可以邀请特定人员进行编辑。您和您的协作者可以同时编辑笔记本，并实时查看彼此的更改（和游标），以及在笔记本旁边的窗口中聊天（使用文本或视频）。所有计算的状态和结果也是同步的，这意味着所涉及的每个人都将以相同的方式体验笔记本。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;免费计划的性能表现：&lt;/strong&gt;
您将可以使用具有 1 GB 共享 RAM 和 3 GB 磁盘空间（每个项目）的 1 核共享 CPU。会话将在 30 分钟不活动后关闭，但它们可以运行长达 24 小时。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;性能升级：&lt;/strong&gt;
支持。您可以为 CoCalc 支付&lt;a href=&#34;https://cocalc.com/policies/pricing.html&#34;&gt;订阅费用&lt;/a&gt;，起价为每月 14 美元。或者，您可以在自己的计算机上安装  &lt;a href=&#34;https://github.com/sagemathinc/cocalc-docker&#34;&gt;CoCalc Docker 镜像&lt;/a&gt;，这样您就可以免费运行多个私有用户的 CoCalc 服务器。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;文档和技术支持：&lt;/strong&gt;
CoCalc 拥有&lt;a href=&#34;https://doc.cocalc.com/&#34;&gt;大量文档&lt;/a&gt;。用户可通过电子邮件和联系列表获得支持，并在  &lt;a href=&#34;https://github.com/sagemathinc/cocalc/issues?q=is%3Aopen+is%3Aissue+label%3AA-jupyter&#34;&gt;GitHub&lt;/a&gt;  上跟踪产品问题。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;结论：&lt;/strong&gt;
使用 CoCalc 的最有吸引力是它的实时协作和  &amp;ldquo;time travel&amp;rdquo;  版本控制功能，以及课程管理功能（如果您是教练）。 虽然界面有点混乱，但现有的 Jupyter 用户可以相对轻松地过渡到 CoCalc。但是，免费计划确实存在一些重要的限制（无法安装其他软件包或访问 Internet），另外，免费计划的性能也不高。&lt;/p&gt;
&lt;h2 id=&#34;6-datalore&#34;&gt;6. Datalore&lt;a class=&#34;headerlink&#34; href=&#34;#6-datalore&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FqarRqe6A--JlmBCX2nycwxA6gzK.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://datalore.io/&#34;&gt;Datalore&lt;/a&gt;  是由 JetBrains，一个制作 PyCharm（一种流行的 Python IDE）的公司创建的。它的入门就像创建帐户或使用 Google 或 JetBrains 帐户登录一样简单。您可以创建新的 Datalore &amp;ldquo;工作簿(workbook)&amp;rdquo; 或上传现有的 Jupyter Notebook。 Datalore 工作簿以专有格式存储，但它支持导入和导出标准  &lt;code&gt;.ipynb&lt;/code&gt;  文件格式。&lt;/p&gt;
&lt;p&gt;**支持的语言：**只支持 Python 3。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;安装软件包：&lt;/strong&gt;
Datalore  预安装了数百个软件包，您可以使用  &lt;code&gt;pip&lt;/code&gt;  或  &lt;code&gt;conda&lt;/code&gt;  安装其他软件包，也可以通过指定软件包的 GitHub 存储库来安装。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;界面相似度：&lt;/strong&gt;
当你打开 Datalore 时，界面确实类似于 Jupyter 笔记本，因为有代码和 Markdown 单元格以及在这些单元格下方的输出。但是，Datalore 和 Jupyter 界面之间存在一些重要差异：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;单元格（Datalore 称之为 &amp;ldquo;blocks&amp;rdquo;）不会被编号，因为单元格已经被强制性进行了排序。 换句话说，所有代码都必须按照最终希望它运行的顺序编写。&lt;/li&gt;
&lt;li&gt;笔记本（Datalore 称之为 &amp;ldquo;workbook&amp;rdquo;）可以有多个工作表，类似于 Google 表 格，这是将长工作簿分解为逻辑部分的便捷方式。如果在工作簿中创建多个工作表，则所有工作表共享相同的环境。因为单元格顺序在 Datalore 中很重要，所以第二个工作表中的单元格被视为在第一个工作表中的单元格之后，第三个工作表在第二个工作表之后，依此类推。&lt;/li&gt;
&lt;li&gt;还有许多其他界面差异，这些差异在 &amp;ldquo;add features&amp;rdquo; 部分中进行了解释。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;键盘快捷键：&lt;/strong&gt;
键盘快捷键可用于 Datalore 中的大多数操作，但快捷方式与 Jupyter 使用的快捷方式截然不同。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;缺少的功能：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Datalore 不使用 IPython 内核，因此 IPython 魔术函数和 shell 命令不可用。（但是，对 IPython 内核的可选访问的功能已经在计划中。）&lt;/li&gt;
&lt;li&gt;由于 Datalore 菜单栏保持非常简单并且没有工具栏，因此许多操作只能使用键盘快捷键完成。&lt;/li&gt;
&lt;li&gt;您无法将工作簿下载为其他有用的格式，例如 Python 脚本，HTML 网页或 Markdown 文件。&lt;/li&gt;
&lt;li&gt;Datalore 不支持其 Markdown 单元格中所有常用的 Markdown 功能。（但是，改进的 Markdown 支持功能已经在计划中。）&lt;/li&gt;
&lt;li&gt;Datalore 不支持交互式小部件。&lt;/li&gt;
&lt;li&gt;Datalore 不包括多主机支持。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;新增的功能：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;单元格在您编写时自动运行，Datalore 称之为 &amp;ldquo;实时计算&amp;rdquo;。这实际上使您在编写代码时更容易调试代码，因为您可以立即查看代码的结果。（可以禁用实时计算，在这种情况下，您可以手动触发要运行的单元格。）&lt;/li&gt;
&lt;li&gt;由于单元格将始终按其排列顺序运行，因此 Datalor e 可以跟踪单元格依赖性。这意味着当编辑给定单元格时，Datalore 将确定其下面的哪些单元可能受到影响，并将立即重新运行这些单元格（假设启用了实时计算）。如果编辑在从属单元格中导致错误，则会立即标记这些错误。&lt;/li&gt;
&lt;li&gt;Datalore 允许您按顺序显示单元格输入和输出（就像在 Jupyter 中一样）或 &amp;ldquo;拆分视图(split view)&amp;rdquo;，在这种情况下，输入和输出位于两个单独的窗格中。使用顺序视图时，Datalore 还可以轻松隐藏所有输入或隐藏所有输出。&lt;/li&gt;
&lt;li&gt;在代码完成中，Datalore 包含比 Jupyter 更多的&amp;rdquo;智能&amp;rdquo;。&lt;/li&gt;
&lt;li&gt;在编写代码时，Datalore 会为您可能想要采取的操作提供上下文感知建议（称为&amp;rdquo;意图(intentions)&amp;rdquo;）。例如，在键入 DataFrame 的名称之后，意图可能包括 &amp;ldquo;drop string columns&amp;rdquo;、&amp;rdquo;histogram&amp;rdquo; 和 &amp;ldquo;train test split&amp;rdquo;。当您单击意图时，Datalore 实际上会为您生成代码，这可能是学习某些任务背后的代码的有用方法。&lt;/li&gt;
&lt;li&gt;Datalore 包括一个精心设计的版本控制系统。它常用于保存工作簿的当前状态，您可以快速浏览当前版本和任何过去版本之间的差异。您还可以选择在保存工作簿时添加消息，然后可以在版本列表筛选仅包含带消息的那些版本。&lt;/li&gt;
&lt;li&gt;通过 Datalore，您可以访问名为  &lt;code&gt;datalore.plot&lt;/code&gt;  的绘图库，它与 R 的  &lt;code&gt;ggplot2&lt;/code&gt;  非常相似，但您只能在 Datalore 中使用它。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;数据集易用性：&lt;/strong&gt;
您可以从本地计算机或 URL 将数据集上传到工作簿，但只能由该特定工作簿访问。如果您在许多工作簿中使用相同的数据集，这将是一个大的烦恼。（但是，在工作簿之间共享数据集是一项计划的功能。）&lt;/p&gt;
&lt;p&gt;**网络访问：**支持。&lt;/p&gt;
&lt;p&gt;**保证工作私密性的能力：**支持。&lt;/p&gt;
&lt;p&gt;**公开分享的能力：**不支持。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;协作能力：&lt;/strong&gt;
支持。您可以将工作簿保密，但可以邀请特定人员查看或编辑它。您和您的协作者可以同时编辑笔记本，并实时查看彼此的更改（和游标）。所有计算的状态和结果也是同步的，这意味着所涉及的每个人都将以相同的方式体验笔记本。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;免费计划的性能表现：&lt;/strong&gt;
您可以访问具有 4 GB RAM 和 10 GB 磁盘空间的 2 核 CPU。会话将在 60 分 钟不活动后关闭，但对各个会话的长度没有特定限制。您可以每月使用该服务长达 120 小时。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;性能升级：&lt;/strong&gt;
暂不支持，虽然很快就会有一个付费计划，它提供更多的磁盘空间和更强大的 CPU（或 GPU）。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;文档和技术支持：&lt;/strong&gt; 
Datalore 具有比较少的文档，包含在示例工作簿中。用户可通过  &lt;a href=&#34;https://forum.datalore.io/&#34;&gt;Discourse 论坛&lt;/a&gt;获得支持。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;结论：&lt;/strong&gt;
Datalore 不再是对 Jupyter 笔记本的改编，而是更像是对笔记本的重塑。它包括一个创新的功能集，包括实时计算，依赖关系跟踪，实时协作和内置版本控制。但是，现有的 Jupyter 用户可能难以过渡到 Datalore，特别是因为强制执行单元格排序并且所有键盘快捷方式都完全不同。同样，Datalore 目前还包含一些值得注意的限制，即工作簿无法公开共享，上传的数据集无法在工作簿之间共享等。&lt;/p&gt;
&lt;h2 id=&#34;如何选择合适的服务&#34;&gt;如何选择合适的服务&lt;a class=&#34;headerlink&#34; href=&#34;#如何选择合适的服务&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;在提出的六个选项中，没有一个明确的&amp;rdquo;赢家&amp;rdquo;。相反，正确的选择将取决于您的优先事项。以下是我根据您的特殊需求选择的建议。（注意：您也可以点击  &lt;a href=&#34;https://docs.google.com/spreadsheets/d/12thaaXg1Idr3iWST8QyASNDs08sjdPd6m9mbCGtHFn0/edit?usp=sharing&#34;&gt;comparison table&lt;/a&gt;  进行查看 。）&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;您使用 Python 以外的语言：&lt;/strong&gt;
Binder 和 CoCalc 都支持大量语言。Azure 支持 Python，R 和 F＃，Kernel 支持 Python 和 R，Colab 支持 Python 和 Swift，Datalore 仅支持 Python。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;您需要使用 Python 2：&lt;/strong&gt;
Binder，Colab，Azure 和 CoCalc 都支持 Python 2 和 3，而 Kernel 和 Datalore 仅支持 Python 3。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;您使用非标准软件包：&lt;/strong&gt;
Binder 和 Azure 允许您使用配置文件指定确切的软件包要求。CoCalc 和 Datalore 允许您安装其他软件包，这些软件包将在会话期间保持不变，尽管这不适用于 CoCalc 的免费计划。Kernels 和 Colab 还允许您安装其他软件包，但它们不会跨会话持续存在。Kernels  和 CoCalc 可以接受哪一些包应包含在其默认安装中的用户请求。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;您喜欢现有的 Jupyter Notebook 界面：&lt;/strong&gt;
Binder 和 Azure 使用原生的 Jupyter Notebook 界面，而 CoCalc 使用了几乎相同的界面。Kernels  在视觉上与 Jupyter 不同，但效果与此类似，而 Colab 在视觉上类似于 Jupyter，但不像它那样工作。Datalore 离现有的 Jupyter Notebook 相差最远。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;您是键盘快捷键的重度用户：&lt;/strong&gt;
Binder，Kernels 和 Azure 使用与 Jupyter 相同的键盘快捷键，而 CoCalc 几乎使用了所有相同的快捷键。Datalore 使用完全不同的键盘快捷键，Colab 使用繁琐的多步键盘快捷键（尽管可以自定义）。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;您更喜欢点击式界面：&lt;/strong&gt;
Binder，Azure 和 CoCalc 允许您通过指向和单击执行所有操作，而 Kernels，Colab 和 Datalore 要求您使用键盘快捷键执行某些操作。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;您需要集成版本控制系统：&lt;/strong&gt;
CoCalc 和 Datalore 为 版本控制提供了最佳接口。Kaggle 的版本控制系统有限，Colab 的系统的有限程度更大。 Binder 和 Azure 则不提供版本控制系统。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;您需要使用大量数据集：&lt;/strong&gt;
Kernels 与 Kaggle Datasets 无缝协作，Kaggle Datasets 是一个功能齐全（免费）的服务，用于托管每个最多 20 GB 的数据集。CoCalc 为每个项目提供 3 GB 的磁盘空间，您上传的任何数据集都可以被项目中的任何笔记本访问。Azure 具有类似的功能，但每个项目提供 1 GB 的磁盘空间。尽管您上传的每个数据集都必须链接到特定的工作簿，但 Datalore 提供 10 GB 的总磁盘空间。除非您将 Colab 链接到 Google 云端硬盘，否则 Colab 会丢弃您在会话结束时上传的所有数据集。Binder 最适用于存储在 Git 存储库中或位于公共 URL 的小型数据集。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;您的项目已经托管在 GitHub 上：&lt;/strong&gt;
Binder 可以直接从 GitHub 运行您的笔记本，Azure 将允许您导入整个 GitHub 存储库，Colab 可以从 GitHub 导入一个笔记本。Kernels、CoCalc 和 Datalore 不提供任何类似的功能。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;您需要将您的工作保密：&lt;/strong&gt; 除了 Binder 以外，其他的都支持私有选项。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;您需要将数据保留在本地：&lt;/strong&gt;
这些基于云的服务都不允许您将数据保留在本地。但是，您可以在自己的服务器上设置 Binder 或 CoCalc，因为 BinderHub 和 CoCalc Docker 镜像都是开源的，这样您就可以将数据保存在本地。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;您希望公开分享您的工作：&lt;/strong&gt;
在共享时  Binder  创建的步骤最少，因为人们无需创建帐户即可查看和运行您的笔记本。Kernels、Colab、Azure 和 CoCalc 允许您共享 URL 以进行只读访问，同时要求用户在想要运行笔记本时创建帐户。通过为您提供公共个人资料页面，Kernels  和 Azure 可以更轻松地进行共享。Datalore 不允许公开共享。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;您需要与其他人协作：&lt;/strong&gt;
CoCalc 和 Datalore 支持实时协作。Colab 支持在同一个文档上进行协作，虽然它不是很实时，而且你没有共享相同的环境。Kernels  支持一种您可以在其中共享版本历史记录协作形式。Binder 和 Azure 不包含任何协作功能，但使用 Binder 可以通过正常的 GitHub 拉取请求的工作流轻松实现。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;您需要高性能环境：&lt;/strong&gt;
Kernels  提供最强大的环境（4 核 CPU 和 17 GB RAM），其次是 Datalore（2 核 CPU 和 4 GB RAM），Azure（4  GB RAM），Binder（最多 2 GB RAM）和 CoCalc（1 核 CPU 和 1 GB RAM）。Colab 不提供其环境规范。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;您需要访问 GPU：&lt;/strong&gt;
Kernels 和 Colab 都可以免费访问 GPU。 Azure 访问和（很快）Datalore 的付费客户也可以使用 GPU 访问。Binder 或 CoCalc 无法访问 GPU。&lt;/p&gt;
&lt;p&gt;**您更喜欢使用非商业工具：**Binder 是由非商业实体管理的唯一选项。&lt;/p&gt;
&lt;h2 id=&#34;其他类似的服务&#34;&gt;其他类似的服务&lt;a class=&#34;headerlink&#34; href=&#34;#其他类似的服务&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;以下服务与上述六个选项类似，但未包括在我的比较中：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;我没有包含任何只提供 JupyterLab 访问权限的服务，例如  &lt;a href=&#34;https://notebooks.ai/&#34;&gt;Notebooks AI&lt;/a&gt;，&lt;a href=&#34;http://kyso.io/&#34;&gt;Kyso&lt;/a&gt;  和  &lt;a href=&#34;http://learning.cyverse.org/projects/vice/en/latest/getting_started/about.html&#34;&gt;CyVerse&lt;/a&gt;。（请注意，如果您愿意，Binder，Azure 和 CoCalc 都允许您使用 JupyterLab 而不是 Jupyter Notebook。）&lt;/li&gt;
&lt;li&gt;我没有包含  &lt;a href=&#34;https://www.ibm.com/cloud/watson-studio&#34;&gt;IBM Watson Studio Cloud&lt;/a&gt;，因为入门过程繁琐，界面过于复杂，免费计划有很多限制，在测试期间有很多错误消息。&lt;/li&gt;
&lt;li&gt;我没有包括  &lt;a href=&#34;https://gryd.us/&#34;&gt;Gryd&lt;/a&gt;，因为免费计划需要一个学术性的电子邮件地址，而且我没有包含  &lt;a href=&#34;https://codeocean.com/&#34;&gt;Code Ocean&lt;/a&gt;，因为没有学术电子邮件地址，免费计划受到严格限制。&lt;/li&gt;
&lt;li&gt;我没有包含  &lt;a href=&#34;https://www.zepl.com/&#34;&gt;ZEPL&lt;/a&gt;，因为它不允许您使用标准的  &lt;code&gt;.ipynb&lt;/code&gt;  格式导出笔记本。&lt;/li&gt;
&lt;li&gt;我没有包括任何付费服务，例如  &lt;a href=&#34;https://www.saturncloud.io/&#34;&gt;Saturn Cloud&lt;/a&gt;， &lt;a href=&#34;https://www.crestle.ai/&#34;&gt;Crestle.ai&lt;/a&gt;，&lt;a href=&#34;https://www.paperspace.com/&#34;&gt;Paperspace&lt;/a&gt;  和  &lt;a href=&#34;https://salamander.ai/&#34;&gt;Salamander&lt;/a&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;我真实的核查过程&#34;&gt;我真实的核查过程&lt;a class=&#34;headerlink&#34; href=&#34;#我真实的核查过程&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;本文是 50 多个小时的研究，测试和写作的结果。 此外，我在 2019 年 3 月与 Binder，Kaggle，Google，Microsoft，CoCalc 和 Datalore 的相关团队分享了本文的草稿。我收到了来自所有六家公司/组织的详细反馈（谢谢！），我将其纳入 发表之前的文章。&lt;/p&gt;
&lt;p&gt;话虽如此，这些服务也在不断变化，而且未来可能会有一些信息过时。如果您认为本文中的内容不再正确，请在下面留言，我很乐意考虑更新该文章。&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E8%99%9A%E6%8B%9F%E7%8E%AF%E5%A2%83/2019-07-01-cloud-services-for-jupyter-notebook/</link>
      <pubDate>Mon, 01 Jul 2019 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E8%99%9A%E6%8B%9F%E7%8E%AF%E5%A2%83/2019-07-01-cloud-services-for-jupyter-notebook/</guid>
      
    </item>
    
    <item>
      <title>让你的 conda 回滚 到以前版本的环境</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2019-07-01&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2019-07-01T00:00:00&#39;&gt;2019-07-01&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-06-25&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-06-25T10:38:44&#39;&gt;2021-06-25&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;我现在使用 Anaconda 作为我的主要 Python 发行版，同样，我们公司也将它用于所有开发人员机器以及他们的服务器。然而，前几天我在浏览一些论坛技术文章时遇到了一个我以前从未知道的 conda 精彩功能——conda 版本回滚！在这里给大家分享一下。&lt;/p&gt;
&lt;p&gt;举一个最简单的例子。如果我们运行 &lt;code&gt;conda list --revisions&lt;/code&gt; ，我们会得到这样的输出：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;list&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--revisions
&lt;span class=&#34;m&#34;&gt;2018&lt;/span&gt;-04-03&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;09&lt;/span&gt;:26:14&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;rev&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;+_ipyw_jlab_nb_ext_conf-0.1.0
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;+alabaster-0.7.10
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;+anaconda-5.1.0
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;+anaconda-client-1.6.9
&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;...
&lt;span class=&#34;m&#34;&gt;2018&lt;/span&gt;-04-03&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;09&lt;/span&gt;:30:48&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;rev&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;anaconda&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;5&lt;/span&gt;.1.0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;custom&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;ca-certificates&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2017&lt;/span&gt;.08.26&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2018&lt;/span&gt;.03.07&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;cairo&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.14.12&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.12.18&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;fontconfig&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;.12.4&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;.11.1&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;freetype&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;.8&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;.5.5&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;harfbuzz&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.7.4&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;.9.39&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;icu&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;58&lt;/span&gt;.2&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;54&lt;/span&gt;.1&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;...

...

&lt;span class=&#34;m&#34;&gt;2019&lt;/span&gt;-02-14&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;11&lt;/span&gt;:48:21&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;rev&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;36&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;_r-mutex&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.0.0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.0.0&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;blas&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.1&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main&lt;span class=&#34;o&#34;&gt;)}&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;cairo&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.14.12&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;.14.12&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main&lt;span class=&#34;o&#34;&gt;)}&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;conda&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4&lt;/span&gt;.5.11&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4&lt;/span&gt;.6.3&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge&lt;span class=&#34;o&#34;&gt;)}&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;...
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;在上面的输出中，我们可以看到我的 conda 环境的许多特定版本（或修订版），以及它们的创建日期/时间以及差异（已安装的软件包显示为 &lt;code&gt;+&lt;/code&gt; ，已卸载的显示为 &lt;code&gt;-&lt;/code&gt;  和升级的显示为 &lt;code&gt;-&amp;gt;&lt;/code&gt; ）。 如果要恢复到以前的版本，只需运行 &lt;code&gt;conda install --revision N&lt;/code&gt; （其中 N 是修订号）即可。 这将要求你确认相关的软件包卸载/安装，并让您回到原来的位置！&lt;/p&gt;
&lt;p&gt;所以，我认为这非常棒！如果你搞砸了，想要回到以前的工作环境，真的很方便。&lt;/p&gt;
&lt;p&gt;首先，如果你“恢复”到之前的修订版，那么你会发现创建了一个“逆”修订版，只是做了与之前修订版相反的版本。例如，如果您的修订列表如下所示：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;m&#34;&gt;2019&lt;/span&gt;-01-14&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;21&lt;/span&gt;:12:34&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;rev&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;+mkl-11.3.3
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;+numpy-1.11.0
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;+pandas-0.18.1
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;+python-dateutil-2.5.3
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;+pytz-2016.4
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;+six-1.10.0

&lt;span class=&#34;m&#34;&gt;2019&lt;/span&gt;-01-14&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;21&lt;/span&gt;:13:08&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;rev&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;+cycler-0.10.0
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;+freetype-2.6.3
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;+libpng-1.6.22
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;+matplotlib-1.5.1
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;+pyparsing-2.1.4
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;接着，通过运行 &lt;code&gt;conda install --revision 1&lt;/code&gt;  恢复到修订版 1，然后再次运行 &lt;code&gt;conda list --revisions&lt;/code&gt; ，你会得到：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;m&#34;&gt;2019&lt;/span&gt;-01-14&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;21&lt;/span&gt;:13:08&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;rev&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;+cycler-0.10.0
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;+freetype-2.6.3
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;+libpng-1.6.22
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;+matplotlib-1.5.1
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;+pyparsing-2.1.4

&lt;span class=&#34;m&#34;&gt;2019&lt;/span&gt;-01-14&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;21&lt;/span&gt;:15:45&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;rev&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;-cycler-0.10.0
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;-freetype-2.6.3
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;-libpng-1.6.22
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;-matplotlib-1.5.1
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;-pyparsing-2.1.4
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;我们可以看到修订版 3 的更改只是修订版 2 的反转。&lt;/p&gt;
&lt;p&gt;还有一点是我发现所有这些数据都存储在环境的 conda-meta 目录中的历史文件中（默认环境对应于  &lt;code&gt;CONDA_ROOT/conda-meta&lt;/code&gt; ；其他环境对应于  &lt;code&gt;CONDA_ROOT/envs/ENV_NAME/conda-meta&lt;/code&gt;）。你不想知道为什么我去搜索这个文件（这是一个长篇故事，涉及我的一些愚蠢），但它有一些非常有用的内容：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;less&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/local/software/anaconda3/conda-meta/history
&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2018&lt;/span&gt;-04-10&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;16&lt;/span&gt;:15:45&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;lt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# cmd: /usr/local/software/anaconda3/bin/conda install netcdf4&lt;/span&gt;
+defaults::hdf4-4.2.13-h3ca952b_2
+defaults::libnetcdf-4.4.1.1-h816af47_8
+defaults::netcdf4-1.3.1-py36hfd655bd_2
&lt;span class=&#34;c1&#34;&gt;# update specs: [&amp;#39;netcdf4&amp;#39;]&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2018&lt;/span&gt;-04-11&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;11&lt;/span&gt;:50:02&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;lt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# cmd: /usr/local/software/anaconda3/bin/conda install r-cairo&lt;/span&gt;
+defaults::r-cairo-1.5_9-r342hbf22089_0
&lt;span class=&#34;c1&#34;&gt;# update specs: [&amp;#39;r-cairo&amp;#39;]&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&amp;gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2018&lt;/span&gt;-04-11&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;13&lt;/span&gt;:41:09&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&amp;lt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# cmd: /usr/local/software/anaconda3/bin/conda remove R&lt;/span&gt;
-defaults::r-3.4.2-h65d9972_0
&lt;span class=&#34;c1&#34;&gt;# remove specs: [&amp;#39;r&amp;#39;]&lt;/span&gt;
......
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;具体来说，它不仅仅提供已安装，卸载或升级的列表，它还为您提供了运行的命令！ 如果需要，可以使用一些命令行魔法来提取这些命令：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 获取历史文件的内容，搜索以#cm开头的所有行，然后按空格分割行并从第3组开始提取所有内容&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;cat&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/local/software/anaconda3/conda-meta/history&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;grep&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;# cmd&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;cut&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-d&lt;span class=&#34;s2&#34;&gt;&amp;quot; &amp;quot;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-f3-

/usr/local/software/anaconda3/bin/conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;update&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-n&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;base&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conda
/usr/local/software/anaconda3/bin/conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-c&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;bioconda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;r-plotrix&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--only-deps
/usr/local/software/anaconda3/bin/conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;r&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;.4.2
/usr/local/software/anaconda3/bin/conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;gcc_linux-64
/usr/local/software/anaconda3/bin/conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-c&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conda-forge&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ggplot&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--no-deps
/usr/local/software/anaconda3/bin/conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-c&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;r&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;r-essentials
/usr/local/software/anaconda3/bin/conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;netcdf4
/usr/local/software/anaconda3/bin/conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;r-cairo
/usr/local/software/anaconda3/bin/conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;remove&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;R
/usr/local/software/anaconda3/bin/conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;remove&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-c&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;r&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;r-essentials
/usr/local/software/anaconda3/bin/conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;altair&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--channel&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;conda-forge
/usr/local/software/anaconda3/bin/conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;r-essentials
/usr/local/software/anaconda3/bin/conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-c&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;r&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;r-essentials
......
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;最后，我发现 environment.yml 文件有时会有点痛苦（它们并不总是跨平台兼容 - 请参阅 &lt;a href=&#34;https://github.com/ContinuumIO/anaconda-issues/issues/546&#34;&gt;anaconda-issues: 546&lt;/a&gt;）， 所以通过 &lt;code&gt;conda install --revision N&lt;/code&gt;   实现 conda 回滚非常有用，因为它实际上给了我运行创建环境的命令。&lt;/p&gt;</description>
      <link>https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E8%99%9A%E6%8B%9F%E7%8E%AF%E5%A2%83/2019-07-01-conda-env-roll-back/</link>
      <pubDate>Mon, 01 Jul 2019 00:00:00 +0000</pubDate>
      <source url="https://shenwy.com/rss.xml">维燕的数字花园</source>
      
      <guid isPermaLink="true">https://shenwy.com/yuque/%E5%BC%80%E5%8F%91%E8%BF%90%E7%BB%B4/%E8%99%9A%E6%8B%9F%E7%8E%AF%E5%A2%83/2019-07-01-conda-env-roll-back/</guid>
      
    </item>
    
    <item>
      <title>数据科学工具 Jupyter Notebook 教程</title>
      
      
        
      <author>章鱼猫先生</author>
        
      
      
      
      <description>&lt;h1 id=&#34;一简介&#34;&gt;一、简介&lt;a class=&#34;headerlink&#34; href=&#34;#一简介&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;div class=&#39;document-dates-plugin-wrapper document-dates-top&#39;&gt;&lt;div class=&#39;document-dates-plugin&#39; locale=&#39;&#39;&gt;&lt;div class=&#39;dd-left&#39;&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2019-07-01&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_created&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2019-07-01T00:00:00&#39;&gt;2019-07-01&lt;/time&gt;&lt;/span&gt;&lt;span class=&#39;dd-item&#39; data-tippy-content data-tippy-raw=&#39;2021-06-30&#39;&gt;&lt;span class=&#39;material-icons&#39; data-icon=&#39;doc_updated&#39;&gt;&lt;/span&gt;&lt;time datetime=&#39;2021-06-30T09:37:30&#39;&gt;2021-06-30&lt;/time&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;ipython notebook 是一个基于浏览器的 python 数据分析工具，使用起来非常方便，具有极强的交互方式和富文本的展示效果。jupyter 是它的升级版，它的安装也非常方便，一般 Anaconda 安装包中会自带。安装好以后直接输入 jupyter notebook 便可以在浏览器中使用。&lt;/p&gt;
&lt;h2 id=&#34;1-为什么使用-jupyter&#34;&gt;1. 为什么使用 Jupyter&lt;a class=&#34;headerlink&#34; href=&#34;#1-为什么使用-jupyter&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;关于为什么使用 jupyter 进行分析，而不是用 python 脚本或仅仅利用 excel，这里列举知乎中的两点回答：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;1、基于过程&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;数据分析和传统的 MVC 软件开发的最大区别在于，数据分析存在一个 data flow, 我们是在不断的做计算，并且画图。这里存在一个大致的 &amp;ldquo;顺序&amp;rdquo;，比如:&lt;/p&gt;
&lt;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;先对数据进行处理，去掉有问题的数据 (Data Wrangling)&lt;/li&gt;
&lt;li&gt;从各个角度看一个这个数据各个维度的分布情况 (Data Exploration)&lt;/li&gt;
&lt;li&gt;根据自己的想法、要求，做具体的分析，计算&lt;/li&gt;
&lt;li&gt;对计算结果做进一部分的分析&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;p&gt;这有点类似做应用题。而这是传统的 IDE (e.g. PyCharm) 没有办法做到的。假如全部都写脚本+输出，那么你 &amp;gt; &lt;strong&gt;每张图可能都要保存下来，然后再单独点进去看&lt;/strong&gt;，很麻烦。而 Notebook 做这个要更方便，结果直接产生在 Cell 下面。&amp;gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FqtURTj4UvTyPmTTkMAS-SLDNTJc.jpg&#34; /&gt;&amp;gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;反言之，如果你不需要这种频繁的计算-画图的话，那么 notebook 可能还真没什么大不了.&amp;gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;2、Hackable&lt;/strong&gt;&amp;gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;和第一点对应，Notebook 的是计算+文档的混合体，而本身又是 web-based，因此非常好 hack, 比如我的 notebook 因为非常长，所以就加了个侧边栏目录：&amp;gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Flsdnj1w2kd21uCCBSTtsQwXPWcK.jpg&#34; /&gt;&amp;gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;再比如，在分析电影数据的时候，我觉得用 card 来展示更方便一点，所以可以这样显示数据：&amp;gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fk6z9MvQflcnWFXW8s4dNm76zU3m.jpg&#34; /&gt; &amp;gt; &lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fk6z9MvQflcnWFXW8s4dNm76zU3m.jpg&#34; /&gt; &amp;gt; &lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/Fk6z9MvQflcnWFXW8s4dNm76zU3m.jpg&#34; /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;参考链接： &amp;gt; &lt;a href=&#34;&#34;&gt;https://www.zhihu.com/question/37490497/answer/212044783&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;2-jupyter-优势&#34;&gt;2. Jupyter 优势&lt;a class=&#34;headerlink&#34; href=&#34;#2-jupyter-优势&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;并行计算支持。jupyter notebook 支持并行计算，而且很全面，像 MPI，OpenMP 等，支持部署在集群上，具体可以参考&lt;a href=&#34;https://ipyparallel.readthedocs.io/en/latest/&#34;&gt;文档&lt;/a&gt;。&lt;/li&gt;
&lt;li&gt;多语言支持。这里的语言不是英语、汉语，而是不同的编程语言，包括在科学界很流行的 julia、Matlab、C、C#、R、Perl 等，超多支持，令我震惊了，具体可以看这个&lt;a href=&#34;https://github.com/jupyter/jupyter/wiki/Jupyter-kernels&#34;&gt;表&lt;/a&gt;。&lt;/li&gt;
&lt;li&gt;桌面端的环境搭建。按照官网的说法，极其推荐 Anaconda，有需求的可以直接到 &lt;a href=&#34;https://www.anaconda.com/download/&#34;&gt;Anaconda 官网&lt;/a&gt; 下载可用的安装包，支持 win、Linux、MacOS，真是除了手机都支持 O(∩_∩)O\~。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h1 id=&#34;二本地安装与使用&#34;&gt;二、本地安装与使用&lt;a class=&#34;headerlink&#34; href=&#34;#二本地安装与使用&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id=&#34;1-安装&#34;&gt;1. 安装&lt;a class=&#34;headerlink&#34; href=&#34;#1-安装&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;正常情况下，Anaconda 安装包中已经自带了 jupyter、jupyter-notebook。对于 miniconda，或者其他只安装了 python 的机器，需要借助 pip 安装：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;pip&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ipython
pip&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;jypyter
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;或者使用 conda 命令安装：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;conda&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;install&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;jupyter
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;更多安装说明，请参考 &lt;a href=&#34;http://jupyter.org/install.html&#34;&gt;官网&lt;/a&gt;。&lt;/p&gt;
&lt;h2 id=&#34;2-启动&#34;&gt;2. 启动&lt;a class=&#34;headerlink&#34; href=&#34;#2-启动&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;接下来，我们只需要在命令行输入 &lt;strong&gt;jupyter notebook&lt;/strong&gt;  或者 &lt;strong&gt;jupyter-notebook&lt;/strong&gt;  即可。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;c1&#34;&gt;# 指定 ip 及端口启动 jupyter notebook&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;jupyter&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;notebook&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--ip&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;.0.0.0&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--port&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;8080&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# 启动 jupyter notebook 时不启动浏览器&lt;/span&gt;
$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;jupyter&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;notebook&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--no-browser

$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;jupyter-notebook
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;I&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;10&lt;/span&gt;:47:32.588&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;NotebookApp&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;JupyterLab&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;alpha&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;preview&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;extension&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;loaded&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/Bio/home/shenweiyan/software/Python/Anaconda2.5/lib/python2.7/site-packages/jupyterlab
JupyterLab&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;v0.27.0
Known&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;labextensions:
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;I&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;10&lt;/span&gt;:47:32.626&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;NotebookApp&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Running&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;core&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;application&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;no&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;additional&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;extensions&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;or&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;settings
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;I&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;10&lt;/span&gt;:47:32.644&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;NotebookApp&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Serving&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;notebooks&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;local&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;directory:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/Bio/home/bi.shenwy/pythonTrain
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;I&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;10&lt;/span&gt;:47:32.644&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;NotebookApp&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;active&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;kernels
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;I&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;10&lt;/span&gt;:47:32.644&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;NotebookApp&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;The&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Jupyter&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Notebook&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;is&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;running&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;at:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;http://localhost:8888/?token&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;120a457da88d214270e...22a376d3d4
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;I&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;10&lt;/span&gt;:47:32.644&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;NotebookApp&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Use&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Control-C&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;stop&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;this&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;server&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;and&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;shut&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;down&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;all&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;kernels&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;twice&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;skip&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;confirmation&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;.
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;C&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;10&lt;/span&gt;:47:32.651&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;NotebookApp&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;

&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;Copy/paste&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;this&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;URL&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;into&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;your&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;browser&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;when&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;you&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;connect&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;the&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;first&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;time,
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;login&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;with&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;a&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;token:
&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;http://localhost:8888/?token&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;120a457da88d214270e...22a376d3d4
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;这时候，Jupyter 会自动生成一个用于登陆 jupyter Notebook 的 token，我们在浏览器打开 token 的链接：&lt;a href=&#34;http://localhost:8888/?token=120a457da88d214270e...22a376d3d4&#34;&gt;http://localhost:8888/?token=120a457da88d214270e...22a376d3d4&lt;/a&gt;，即可进入登陆后的 Jupyter Notebook 页面：
&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FjLdbfzpjjE-jrDy-xh-eEh1d74k.png&#34; /&gt;&lt;/p&gt;
&lt;h2 id=&#34;3-使用&#34;&gt;3. 使用&lt;a class=&#34;headerlink&#34; href=&#34;#3-使用&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;在 jupyter notebook web 页面，我们可以点击 &amp;rdquo; &lt;strong&gt;New&lt;/strong&gt;&amp;rdquo; → &amp;ldquo;&lt;strong&gt;Python2&lt;/strong&gt;&amp;rdquo; 创建 python2 笔记。我们可以在这两个笔记中使用 markdown 语法进行编辑，也可以交互执行 python 代码。&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FguaClDlBgOp0-om0nxmKehCWUJk.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;Jupyter Notebook web 登陆后，点击右上角 &amp;ldquo;&lt;strong&gt;Logout&lt;/strong&gt;&amp;rdquo; 可退出；通过输入上面的 token 可重新登陆。或者我们可以通过 &lt;code&gt;jupyter notebook password&lt;/code&gt; 命令设置密码进行登陆（如果忘记密码也可以通过该命令进行重置）。默认 jupyter notebook passwd 保存在 &lt;code&gt;~/.jupyter/jupyter_notebook_config.json&lt;/code&gt; ，如下：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;cat&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;~/.jupyter/jupyter_notebook_config.json
&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;NotebookApp&amp;quot;&lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;password&amp;quot;&lt;/span&gt;:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;sha1:1a611a30d93a:5ab8b4be55d5e.....b8c7a8sa&amp;quot;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h1 id=&#34;三远程服务器部署与配置&#34;&gt;三、远程服务器部署与配置&lt;a class=&#34;headerlink&#34; href=&#34;#三远程服务器部署与配置&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;网上搜了一下 Jupyter 服务器的搭建，官方给出了很好的多用户服务端 Jupyterhub，但我的需求就是在 VPS/Linux 服务器搭建好一个 Jupyter 服务网页，完全自己用，所以搭建 Jupyterhub 有些浪费资源，因此我们需要一个更加简单的 Jupyter 服务搭建方案。当然，官网也写好文档（参考：&lt;a href=&#34;https://jupyter-notebook.readthedocs.io/en/latest/public_server.html&#34;&gt;Running a notebook server&lt;/a&gt;）给我们用了，但文档是用英文写的，有需要的也可以参考实现。&lt;/p&gt;
&lt;h2 id=&#34;1-配置基于-ip-访问&#34;&gt;1. 配置基于 IP 访问&lt;a class=&#34;headerlink&#34; href=&#34;#1-配置基于-ip-访问&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Jupyter Notebook 可以通过命令行参数指定 IP，也可以通过配置文件实现基于服务器公网 IP 下的远程访问。
通过命令行实现基于服务器公网 IP 访问，只需要执行以下命令即可：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$ jupyter notebook --ip=0.0.0.0 --port=8080
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;2-基于域名访问&#34;&gt;2. 基于域名访问&lt;a class=&#34;headerlink&#34; href=&#34;#2-基于域名访问&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&#34;1-配置&#34;&gt;1) 配置&lt;a class=&#34;headerlink&#34; href=&#34;#1-配置&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;下面的命令会在 &lt;code&gt;~/.jupyter&lt;/code&gt; 自动创建一个配置文件 jupyter_notebook_config.py。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;jupyter&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;notebook&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--generate-config
Writing&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;default&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;config&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/home/shenweiyan/.jupyter/jupyter_notebook_config.py
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;可以配置的项目有很多，有时间的话，可以仔细阅读配置文件中的注释，写的很清楚。这里要强调的是创建密码的方法，总不想让自己的 jupyter 服务器被其他人使用吧。执行下面语句：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;python&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-c&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;import IPython;print(IPython.lib.passwd())&amp;quot;&lt;/span&gt;
Enter&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;password:
Verify&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;password:
sha1:bda74221176f:ae266f5xxxxxxxxxxxxxxxxxxxxxxxx1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;然后将得到的 sha1 复制到配置文件 jupyter_notebook_config.py 中的相应位置：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;c.NotebookApp.password&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;sha1:bda74221176f:ae266f5xxxxxxxxxxxxxxxxxxxxxxxx1&amp;#39;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;配置文件中，还有几处要修改：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;c.NotebookApp.ip&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;127.0.0.1&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# ip 为 localhost 会引发 OSError: [Errno 99] Cannot assign requested address&lt;/span&gt;
c.NotebookApp.allow_origin&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;*&amp;#39;&lt;/span&gt;
c.NotebookApp.open_browser&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;False
c.NotebookApp.port&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;8888&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;如此这般之后，配置完成咯！&lt;/p&gt;
&lt;h3 id=&#34;2-运行&#34;&gt;2) 运行&lt;a class=&#34;headerlink&#34; href=&#34;#2-运行&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;执行命令：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;jupyter&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;notebook
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;就可以看到 jupyter notebook 执行的日志信息：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;I&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;14&lt;/span&gt;:57:17.197&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;NotebookApp&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;JupyterLab&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;beta&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;preview&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;extension&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;loaded&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/local/software/anaconda3/lib/python3.6/site-packages/jupyterlab
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;I&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;14&lt;/span&gt;:57:17.197&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;NotebookApp&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;JupyterLab&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;application&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;directory&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;is&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/usr/local/software/anaconda3/share/jupyter/lab
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;I&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;14&lt;/span&gt;:57:17.203&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;NotebookApp&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Serving&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;notebooks&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;from&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;local&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;directory:&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;/data/JupyterNotebook
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;I&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;14&lt;/span&gt;:57:17.203&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;NotebookApp&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;active&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;kernels
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;I&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;14&lt;/span&gt;:57:17.203&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;NotebookApp&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;The&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Jupyter&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Notebook&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;is&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;running&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;at:
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;I&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;14&lt;/span&gt;:57:17.203&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;NotebookApp&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;http://127.0.0.1:8888/
&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;I&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;14&lt;/span&gt;:57:17.203&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;NotebookApp&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Use&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;Control-C&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;stop&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;this&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;server&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;and&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;shut&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;down&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;all&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;kernels&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;twice&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;to&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;skip&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;confirmation&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;这是尚不能打开网页，因为是配置在 127.0.0.1 上的，只有本机可以访问。&lt;/p&gt;
&lt;h3 id=&#34;3-域名解析&#34;&gt;3) 域名解析&lt;a class=&#34;headerlink&#34; href=&#34;#3-域名解析&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;配置 nginx 前需要把你已经申请的域名跟 Jupyter Notebook 的服务器 ip 进行绑定解析。&lt;/p&gt;
&lt;p&gt;打开阿里云域名管理，增加 A 记录解析：&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;&#34; src=&#34;https://shub.weiyan.tech/yuque/elog-cookbook-img/FmKiF8RjMkyospa5fBRWx4ZT6QWR.png&#34; /&gt;&lt;/p&gt;
&lt;h3 id=&#34;4-配置-nginx&#34;&gt;4) 配置 nginx&lt;a class=&#34;headerlink&#34; href=&#34;#4-配置-nginx&#34; title=&#34;Permanent link&#34;&gt;&amp;para;&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;nginx 是一个高效的服务器，是著名的 LNMP 中的 N，相信很多搭建过网站的小伙伴一定不陌生。这里，假设我们已经安装好了 nginx，如果不会安装可以自行谷歌或者百度。&lt;/p&gt;
&lt;p&gt;nginx 创建一个虚拟主机 vhost，然后配置文件参考下面：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;upstream&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;notebook&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;server&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;localhost:8888&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
server&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;listen&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;80&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;server_name&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;xxx.xxxx.com&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;rewrite&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;^/&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;.*&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;https://xxx.xxxx.com/&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;permanent&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
server&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;listen&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;443&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;ssl