<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Linux on Lishengxie</title><link>https://lishengxie.top/tags/linux/</link><description>Recent content in Linux on Lishengxie</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Sun, 14 Sep 2025 21:58:04 +0800</lastBuildDate><atom:link href="https://lishengxie.top/tags/linux/index.xml" rel="self" type="application/rss+xml"/><item><title>Let's Encrypt 免费申请 SSL 证书，并实现自动续期</title><link>https://lishengxie.top/post/lets-encrypt-ssl/</link><pubDate>Sun, 14 Sep 2025 21:58:04 +0800</pubDate><guid>https://lishengxie.top/post/lets-encrypt-ssl/</guid><description>&lt;h2 id="背景"&gt;背景&lt;/h2&gt;&#10;&lt;p&gt;对于公网可以访问的网站，使用 HTTPS 协议是保证安全访问的基础要求，而 SSL 证书又是 HTTPS 协议不可或缺的一环。SSL 证书需要 CA 机构颁发，当前使用了阿里云的个人测试证书（免费证书），申请后上传到服务器并更新 nginx 配置。&lt;/p&gt;&#10;&lt;p&gt;当前存在的问题是，阿里云的免费 SSL 证书每三个月过期一次，需要手动重新申请并部署到服务器上，流程比较复杂。在网上看到可以使用 Let&amp;rsquo;s Encrypt 免费申请 SSL 证书，并实现自动续期，于是做了尝试，这里记录下相关流程。&lt;/p&gt;&#10;&lt;h2 id="环境准备"&gt;环境准备&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;一台可以访问公网的服务器，我使用的是 Linux/Ubuntu。&lt;/li&gt;&#10;&lt;li&gt;root 权限或者 sudo 权限。&lt;/li&gt;&#10;&lt;li&gt;存在 DNS 解析的域名。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="lets-encrypt-证书颁发"&gt;Let&amp;rsquo;s Encrypt 证书颁发&lt;/h2&gt;&#10;&lt;p&gt;Let’s Encrypt 是一个免费的、自动化的、开放的证书颁发机构（CA），提供免费 SSL 证书。它的目标是让所有网站都能轻松实现 HTTPS 加密，保障用户数据的安全。通过 Let’s Encrypt 可以为网站的主域名、子域名，甚至泛域名配置安全证书，而且过程完全自动化，不需要手动申请和管理证书，官方推荐使用 &lt;a href="https://certbot.eff.org/"&gt;Certbot&lt;/a&gt;。&lt;/p&gt;&#10;&lt;h3 id="certbot-安装"&gt;Certbot 安装&lt;/h3&gt;&#10;&lt;p&gt;Linux 平台上可以使用 snap 或 pip 安装 Certbot，这里使用 Python + pip 的方式，参考&lt;a href="https://certbot.eff.org/instructions?ws=nginx&amp;amp;os=pip"&gt;安装流程&lt;/a&gt;。&lt;/p&gt;&#10;&lt;p&gt;1、首先安装 Python 环境。&lt;/p&gt;</description></item><item><title>Nginx禁止使用IP直接访问服务器上相应端口</title><link>https://lishengxie.top/post/nginx-prohibit-ip-request/</link><pubDate>Sat, 11 May 2024 21:48:52 +0800</pubDate><guid>https://lishengxie.top/post/nginx-prohibit-ip-request/</guid><description>&lt;h2 id="起因"&gt;起因&lt;/h2&gt;&#10;&lt;p&gt;我的服务器中部署了一个typecho博客和两个使用docker容器的服务，其中docker容器使用端口映射，将容器中的端口映射到宿主机上的端口实现访问。&lt;/p&gt;&#10;&lt;p&gt;一次偶然机会发现服务器上的服务可以通过IP+端口的方式直接访问，如果有未备案的域名解析到我们服务器的IP，可能会导致云服务器厂商关停我们的服务造成一些问题。因此，我们需要禁止通过IP+端口直接访问服务。&lt;/p&gt;&#10;&lt;h2 id="nginx-配置"&gt;Nginx 配置&lt;/h2&gt;&#10;&lt;p&gt;这里的三个服务通过nginx进行转发，对不同&lt;code&gt;server_name&lt;/code&gt;的请求会直接转发到对应的服务进程。因此，这里有限考虑使用nginx配置来禁止IP+端口的访问。服务器上主要开放了两个端口，80和443，分别用于HTTP和HTTPS请求，在实际进行相应配置时二者也有所不同。&lt;/p&gt;&#10;&lt;h3 id="80-端口"&gt;80 端口&lt;/h3&gt;&#10;&lt;p&gt;对于80端口，我们在&lt;code&gt;nginx.conf&lt;/code&gt;中添加如下配置。具体原理在于，当根据listen无法得到最佳匹配时，nginx会使用请求中的Host值匹配server_name，匹配顺序可以参考这篇&lt;a href="https://zhuanlan.zhihu.com/p/109509478"&gt;博客&lt;/a&gt;。IP+端口进行请求时匹配到下面的server配置，直接返回403错误信息。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;server&lt;/span&gt; {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;listen&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;80&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;default_server;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;server_name&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;_;&lt;/span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;return&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;403;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="443端口"&gt;443端口&lt;/h3&gt;&#10;&lt;p&gt;由于使用了HTTPS协议，因此还需要禁止通过IP+443端口的访问方式。具体参考了下面的博客：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://www.huixiangdou.cn/archives/nginx-jin-zhi-80-443-duan-kou"&gt;https://www.huixiangdou.cn/archives/nginx-jin-zhi-80-443-duan-kou&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;具体来说，Nginx 上对于 SSL 服务器在不配置证书的时候会出现协议错误，哪怕端口上配置了其他网站也会报错。因此，我们需要随便生成一个证书进行配置，生成 SSL 证书可以使用这个网站&lt;a href="https://myssl.com/create_test_cert.html"&gt;https://myssl.com/create_test_cert.html&lt;/a&gt;。在&lt;code&gt;nginx.conf&lt;/code&gt;中添加如下配置：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;server&lt;/span&gt; {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;listen&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;80&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;default;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;listen&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;443&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;default_server;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;#SSL-START&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;SSL相关配置，请勿删除或修改下一行带注释的404规则&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;#error_page&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;404/404.html;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;ssl_certificate&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;/path/to/cert.pem;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;ssl_certificate_key&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;/path/to/private.key;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;ssl_protocols&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;TLSv1&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;TLSv1.1&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;TLSv1.2;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;ssl_ciphers&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4:!DH:!DHE;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;ssl_prefer_server_ciphers&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;on;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;ssl_session_cache&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;shared:SSL:10m;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;ssl_session_timeout&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;10m;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;error_page&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;497&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;https:&lt;/span&gt;&lt;span style="color:#75715e"&gt;//$host$request_uri;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;#SSL-END&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;server_name&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;_;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;return&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;403;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;配置完成后重载 Nginx 配置。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ nginx -t&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ nginx -s reload&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="docker容器问题"&gt;Docker容器问题&lt;/h2&gt;&#10;&lt;p&gt;Docker容器通过端口映射实现服务的对外可用性，这里是通过&lt;code&gt;-p host_port:container_port&lt;/code&gt;实现容器上的端口到宿主机上端口的映射。具体来说，以容器的80端口映射到宿主机的8080端口为例，docker容器运行时使用了&lt;code&gt;-p 8080:80&lt;/code&gt;，Nginx中监听了80端口，并在对应域名访问时将请求转发到服务器的8080端口。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-nginx" data-lang="nginx"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;location&lt;/span&gt; &lt;span style="color:#e6db74"&gt;/&lt;/span&gt; {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;proxy_pass&lt;/span&gt; &lt;span style="color:#e6db74"&gt;http://host_ip:8080&lt;/span&gt;;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;但是，在根据上面的配置禁止了直接使用IP+80/443端口访问的方式后，发现&lt;code&gt;host_ip:8080&lt;/code&gt;仍然能够访问到docker容器中的服务。查询相关资料修改了iptables路由表和sfw防火墙规则后，仍然无法解决问题。防火墙上没有打开端口，但仍然可以访问。最后通过查找资料发现是docker自身的原因，下面是docker官方的介绍：&lt;/p&gt;</description></item><item><title>内网离线服务器使用</title><link>https://lishengxie.top/post/offline-server-usage/</link><pubDate>Sat, 03 Jun 2023 20:34:46 +0800</pubDate><guid>https://lishengxie.top/post/offline-server-usage/</guid><description>&lt;p&gt;最近在跑实验时，自己的电脑出现内存不够用的问题，想到在实验室的一台闲置的服务器上运行程序。但是该服务器只能通过内网连接，无法使用外网，因此这里记录了内网离线服务器使用的一些经历。&#10;可以考虑在服务器上安装docker，然后在自己电脑上配好环境后导出docker镜像到服务器上运行。这里没有使用docker环境，本地环境是WSL2-Ubuntu20.04。&lt;/p&gt;&#10;&lt;h2 id="程序运行环境配置"&gt;程序运行环境配置&lt;/h2&gt;&#10;&lt;h3 id="c"&gt;C++&lt;/h3&gt;&#10;&lt;p&gt;针对C++程序，重新下载代码编译；&lt;/p&gt;&#10;&lt;h3 id="python"&gt;Python&lt;/h3&gt;&#10;&lt;p&gt;重新配置Python环境主要经历了以下步骤：&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;下载miniconda安装程序并安装；&lt;/li&gt;&#10;&lt;li&gt;WSL2环境迁移到服务器中，这里选择直接打包WSL2下面的虚拟环境目录并到服务器相应目录下解压，参考了教程&lt;a href="https://blog.csdn.net/qq_45893319/article/details/122226053"&gt;https://blog.csdn.net/qq_45893319/article/details/122226053&lt;/a&gt;;&lt;/li&gt;&#10;&lt;li&gt;直接打包的环境，无法使用pip的问题，可以通过修改pip文件解决，参考教程&lt;a href="https://blog.csdn.net/qq_40933913/article/details/127907916"&gt;https://blog.csdn.net/qq_40933913/article/details/127907916&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;环境迁移后发现在迁移的环境中无法使用clear命令，原因是迁移过来的环境中clear文件有问题。解决方案如下：&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;在出错的环境下，输入&lt;code&gt;which clear&lt;/code&gt;，然后将&lt;code&gt;clear&lt;/code&gt;地址重命名，下次再&lt;code&gt;clear&lt;/code&gt;时会生成新的。&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mv /home/xxx/.conda/envs/yolox/bin/clear /home/xxx/.conda/envs/yolox/bin/clear_old&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="vscode连接服务器开发"&gt;vscode连接服务器开发&lt;/h3&gt;&#10;&lt;p&gt;参考教程&lt;a href="https://blog.csdn.net/ffriend/article/details/126680223"&gt;https://blog.csdn.net/ffriend/article/details/126680223&lt;/a&gt;。&#10;由于服务器离线，使用vscode连接时无法在远程服务器上下载vscode-server，这里需要手动下载一下。步骤如下&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;查看本地vscode的commit id：帮助-关于，复制commit id&lt;/li&gt;&#10;&lt;li&gt;本地下载vscode-server&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;wget https://update.code.visualstudio.com/commit:&lt;span style="color:#e6db74"&gt;${&lt;/span&gt;commit_id&lt;span style="color:#e6db74"&gt;}&lt;/span&gt;/server-linux-x64/stable&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 注意把:${commit_id}替换成对应的Commit ID&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start="3"&gt;&#10;&lt;li&gt;复制到服务器并安装&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;rm ~/.vscode-server/bin/* -rf &lt;span style="color:#75715e"&gt;#把$HOME/.vscode-server/bin下的内容删干净，防止出错&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cd ~/.vscode-server/bin&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;tar -zxf vscode-server-linux-x64.tar.gz&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mv vscode-server-linux-x64 &lt;span style="color:#e6db74"&gt;${&lt;/span&gt;commit_id&lt;span style="color:#e6db74"&gt;}&lt;/span&gt; &lt;span style="color:#75715e"&gt;# 注意把:${commit_id}替换成对应的Commit ID&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="服务器安装screen应用"&gt;服务器安装screen应用&lt;/h3&gt;&#10;&lt;p&gt;参考教程&lt;a href="https://blog.csdn.net/Demo_Null/article/details/110873673"&gt;https://blog.csdn.net/Demo_Null/article/details/110873673&lt;/a&gt;，主要是编译安装screen和ncurses两个可执行程序，这里需要管理员权限，负责无法安装到默认的安装位置。&lt;/p&gt;&#10;&lt;h4 id="screen常用命令如下"&gt;screen常用命令如下&lt;/h4&gt;&#10;&lt;p&gt;1、启动共享窗口：screen -S 名称&#10;2、查看当前所有共享会话：screen -ls&#10;3、进入共享会话：screen -r 名称&#10;4、退出共享会话：ctrl +a +d&lt;/p&gt;</description></item><item><title>云服务器软件安装</title><link>https://lishengxie.top/post/cloud-server-software-install/</link><pubDate>Sun, 30 Apr 2023 08:51:16 +0800</pubDate><guid>https://lishengxie.top/post/cloud-server-software-install/</guid><description>&lt;p&gt;&lt;strong&gt;Docker安装(Ubuntu 20.04)&lt;/strong&gt;：参考&lt;a href="https://zhuanlan.zhihu.com/p/143156163"&gt;知乎博客&lt;/a&gt;&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;更新软件包索引，并且安装必要的依赖软件&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;sudo apt update&#10;sudo apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common&#10;&lt;/code&gt;&lt;/pre&gt;&lt;ol start="2"&gt;&#10;&lt;li&gt;使用下面的 curl 导入源仓库的 GPG key：&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -&#10;&lt;/code&gt;&lt;/pre&gt;&lt;ol start="3"&gt;&#10;&lt;li&gt;将 Docker APT 软件源添加到你的系统：&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;sudo add-apt-repository &amp;#34;deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable&amp;#34;&#10;&lt;/code&gt;&lt;/pre&gt;&lt;ol start="4"&gt;&#10;&lt;li&gt;安装Docker&#10;a. 安装最新版本的Docker&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;sudo apt update&#10;sudo apt install docker-ce docker-ce-cli containerd.io&#10;&lt;/code&gt;&lt;/pre&gt;b. 安装指定版本的docker&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;# 列出所有可用的docker版本&#10;sudo apt update&#10;apt list -a docker-ce&#10;# 安装docker&#10;sudo apt install docker-ce=&amp;lt;VERSION&amp;gt; docker-ce-cli=&amp;lt;VERSION&amp;gt; containerd.io&#10;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&#10;&lt;li&gt;验证安装成功&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;sudo systemctl status docker&#10;docker container run hello-world&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Golang安装&lt;/strong&gt;：参考&lt;a href="https://cloud.tencent.com/developer/article/1623121"&gt;腾讯云博客&lt;/a&gt;&lt;/p&gt;</description></item><item><title>常用资源汇总</title><link>https://lishengxie.top/post/common-resources/</link><pubDate>Sun, 30 Apr 2023 08:49:48 +0800</pubDate><guid>https://lishengxie.top/post/common-resources/</guid><description>&lt;h3 id="python"&gt;python&lt;/h3&gt;&#10;&lt;h4 id="pip国内镜像"&gt;pip国内镜像&lt;/h4&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 清华镜像源&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;https://pypi.tuna.tsinghua.edu.cn/simple&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 豆瓣镜像源&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;http://pypi.douban.com/simple/&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 阿里云镜像源&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;http://mirrors.aliyun.com/pypi/simple/&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 中国科学技术大学镜像源&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;http://pypi.mirrors.ustc.edu.cn/simple/&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;使用方法为&lt;code&gt;pip install package_name -i 镜像源&lt;/code&gt;&lt;/p&gt;&#10;&lt;h3 id="ubuntu更换镜像源"&gt;Ubuntu更换镜像源&lt;/h3&gt;&#10;&lt;p&gt;如果Ubuntu原始速度还可以的话建议不要换源，常用的有阿里云镜像、清华镜像和搜狐镜像，这里是我使用的镜像，北京外国语大学镜像。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;deb https://mirrors.bfsu.edu.cn/ubuntu/ focal main restricted universe multiverse&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# deb-src https://mirrors.bfsu.edu.cn/ubuntu/ focal main restricted universe multiverse&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;deb https://mirrors.bfsu.edu.cn/ubuntu/ focal-updates main restricted universe multiverse&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# deb-src https://mirrors.bfsu.edu.cn/ubuntu/ focal-updates main restricted universe multiverse&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;deb https://mirrors.bfsu.edu.cn/ubuntu/ focal-backports main restricted universe multiverse&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# deb-src https://mirrors.bfsu.edu.cn/ubuntu/ focal-backports main restricted universe multiverse&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;deb https://mirrors.bfsu.edu.cn/ubuntu/ focal-security main restricted universe multiverse&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# deb-src https://mirrors.bfsu.edu.cn/ubuntu/ focal-security main restricted universe multiverse&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 预发布软件源，不建议启用&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# deb https://mirrors.bfsu.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# deb-src https://mirrors.bfsu.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ubuntu换源的具体操作为&lt;/p&gt;</description></item><item><title>Linux常用命令记录</title><link>https://lishengxie.top/post/linux-command/</link><pubDate>Sun, 30 Apr 2023 08:47:32 +0800</pubDate><guid>https://lishengxie.top/post/linux-command/</guid><description>&lt;h3 id="vim"&gt;Vim&lt;/h3&gt;&#10;&lt;p&gt;&lt;strong&gt;vim删除文件中的所有内容&lt;/strong&gt;： ESC确保退出编辑模式，按下&amp;quot;:&amp;ldquo;切换到命令模式然后输入%d并执行&#10;&lt;strong&gt;vim删除单行内容&lt;/strong&gt;：将光标移动到需要删除的行，ESC确保退出编辑模式，按两次d键。&#10;&lt;strong&gt;vim删除多行内容&lt;/strong&gt;：将光标移动到需要删除的第一行，ESC确保退出编辑模式。在dd命令前面加上要删除的行数。例如，如果要删除第4行以下的3行，请先移动至第四行，再按下3dd。&#10;&lt;strong&gt;vim撤销&amp;amp;恢复&lt;/strong&gt;：u是撤销刚才做的动作，ctrl+r 是恢复刚才撤销的动作。&lt;/p&gt;&#10;&lt;h3 id="文件操作"&gt;文件操作&lt;/h3&gt;&#10;&lt;p&gt;参考博客&lt;a href="https://www.cnblogs.com/liaojie970/p/6746230.html"&gt;https://www.cnblogs.com/liaojie970/p/6746230.html&lt;/a&gt;&lt;/p&gt;&#10;&lt;h4 id="文件复制"&gt;文件复制&lt;/h4&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;命令格式：cp &lt;span style="color:#f92672"&gt;[&lt;/span&gt;-adfilprsu&lt;span style="color:#f92672"&gt;]&lt;/span&gt; 源文件&lt;span style="color:#f92672"&gt;(&lt;/span&gt;source&lt;span style="color:#f92672"&gt;)&lt;/span&gt; 目标文件&lt;span style="color:#f92672"&gt;(&lt;/span&gt;destination&lt;span style="color:#f92672"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cp &lt;span style="color:#f92672"&gt;[&lt;/span&gt;option&lt;span style="color:#f92672"&gt;]&lt;/span&gt; source1 source2 source3 ... directory&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;参数说明：&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;-a:是指archive的意思，也说是指复制所有的目录&#10;-d:若源文件为连接文件(link file)，则复制连接文件属性而非文件本身&#10;-f:强制(force)，若有重复或其它疑问时，不会询问用户，而强制复制&#10;-i:若目标文件(destination)已存在，在覆盖时会先询问是否真的操作&#10;-l:建立硬连接(hard link)的连接文件，而非复制文件本身&#10;-p:与文件的属性一起复制，而非使用默认属性&#10;-r:递归复制，用于目录的复制操作&#10;-s:复制成符号连接文件(symbolic link)，即“快捷方式”文件&#10;-u:若目标文件比源文件旧，更新目标文件 &#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;如将/test1目录下的file1复制到/test3目录，并将文件名改为file2,可输入以下命令：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cp /test1/file1 /test3/file2&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="文件移动"&gt;文件移动&lt;/h4&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;命令格式：mv &lt;span style="color:#f92672"&gt;[&lt;/span&gt;-fiv&lt;span style="color:#f92672"&gt;]&lt;/span&gt; source destination&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;参数说明:&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;-f:force，强制直接移动而不询问&#10;-i:若目标文件(destination)已经存在，就会询问是否覆盖&#10;-u:若目标文件已经存在，且源文件比较新，才会更新&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;如将/test1目录下的file1移动到/test3 目录，并将文件名改为file2,可输入以下命令：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mv /test1/file1 /test3/file2&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="文件删除"&gt;文件删除&lt;/h4&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;命令格式：rm &lt;span style="color:#f92672"&gt;[&lt;/span&gt;fir&lt;span style="color:#f92672"&gt;]&lt;/span&gt; 文件或目录&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;参数说明：&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;-f:强制删除&#10;-i:交互模式，在删除前询问用户是否操作&#10;-r:递归删除，常用在目录的删除&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;如删除/test目录下的file1文件，可以输入以下命令：&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;rm -i /test/file1&#10;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="windows-常用命令"&gt;Windows 常用命令&lt;/h3&gt;&#10;&lt;p&gt;&lt;strong&gt;PowerShell创建新文件夹和新文件&lt;/strong&gt;&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;mkdir 文件夹名称&#10;new-item 文件名称.文件格式 -type file&#10;&lt;/code&gt;&lt;/pre&gt;</description></item></channel></rss>