<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Tech on Worthify 博客</title><link>https://worthify-blog.pages.dev/categories/tech/</link><description>Recent content in Tech on Worthify 博客</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Sun, 08 Nov 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://worthify-blog.pages.dev/categories/tech/index.xml" rel="self" type="application/rss+xml"/><item><title>如何使用 cloudflare R2 + picgo 免费自建图床。</title><link>https://worthify-blog.pages.dev/posts/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8-cloudflare-r2-picgo-%E5%85%8D%E8%B4%B9%E8%87%AA%E5%BB%BA%E5%9B%BE%E5%BA%8A/</link><pubDate>Fri, 30 Oct 2026 00:00:00 +0000</pubDate><guid>https://worthify-blog.pages.dev/posts/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8-cloudflare-r2-picgo-%E5%85%8D%E8%B4%B9%E8%87%AA%E5%BB%BA%E5%9B%BE%E5%BA%8A/</guid><description>&lt;h2 id="为什么要自建图床"&gt;为什么要自建图床&lt;/h2&gt;&#10;&lt;p&gt;公共图床虽然大多都很方便，但是也有很多不可控的因素，图床的稳定性和图片的可访问性很难保证。在一次打开博客界面时发现所有使用公共图床外链的图片都无法正常显示时，我彻底对公共图床失去信任，开始研究如何自建图床，当然最好是零成本。&lt;/p&gt;&#10;&lt;p&gt;既然是想要 0 成本自建图床，那就得去白票某些大厂的免费福利了（cloudflare 的恩情还不完啊！！！）。&lt;/p&gt;&#10;&lt;p&gt;所以，接下来，我将向您详细介绍，如何利用 cloudflare R2 配合 picgo 来自建属于自己的图床。&lt;/p&gt;&#10;&lt;h2 id="前置条件"&gt;前置条件&lt;/h2&gt;&#10;&lt;p&gt;想要顺利的使用完成接下来的步奏，最好要满足以下基本前置条件。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;一个可以正常访问 cloudflare dashboard 的网络环境。&lt;/li&gt;&#10;&lt;li&gt;一张支持外币支付的信用卡或者借记卡。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="为什么是-cloudflare-r2"&gt;为什么是 cloudflare R2？&lt;/h2&gt;&#10;&lt;p&gt;&lt;img src="https://pub-358dfedbe10a4072be36a9b5b1648e68.r2.dev/worthify-blog-bed/10/048e9e94f9d338ee0f4e522008849a12.png" alt="屏幕截图 2026-10-29 222620"&gt;&lt;/p&gt;&#10;&lt;p&gt;在解释为什么之前，先让我来讲讲啥是 cloudflare R2。&lt;/p&gt;&#10;&lt;p&gt;cloudflare R2 是 cloudflare 推出的一项 对象存储&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt; 服务，对象存储的特性非常使用用于作为图床，并且， cloudflare R2 给免费账户 10G 的存储空间和每天 100万次的访问流量，可以说非常良心了。不过虽然说免费，但是在开通的 cloudflare R2 服务之前还是得绑定信用卡或者借记卡，但是这是用于验证，只要不开通的付费服务是不会无缘无故扣费的。如果您实在不放心3，那吗可以绑定借记卡，只要那张卡不存钱，就想扣费都扣不了（手动狗头）。&lt;/p&gt;&#10;&lt;p&gt;当然，有懂的读者这时心里可能会想，Oracole cloud 也有免费的对象存储服务器，而且还给 20 G 的存储空间，薅羊毛为什么不找大只的薅呢？主包一定是收了 Cloudflare 黑钱了（&lt;/p&gt;&#10;&lt;p&gt;咳咳，稍安勿找，的确 Oracole Cloud 给的福利更多，甚至免费账号还能薅到免费的服务器。但是，他的注册难度比 cloudflare 高处一个量级。Oracle d的风控管理还是比较严的。想要最不折腾的情况下搞定突图床，最好的选择还得是 cloudflare。&lt;/p&gt;&#10;&lt;p&gt;好了，说了这么多，接下来，那我们接下来让我们直接进入正题吧。&lt;/p&gt;&#10;&lt;h2 id="开始创建"&gt;开始创建&lt;/h2&gt;&#10;&lt;h3 id="登陆注册-cloudflare-账号"&gt;登陆/注册 Cloudflare 账号。&lt;/h3&gt;&#10;&lt;p&gt;直入正题，在使用 R2 之前，当然需要注册或者登录cloudflare 账号啦，我们先打开[cloudflare dashboard](&lt;a href="https://dash.cl"&gt;https://dash.cl&lt;/a&gt; oudflare.com/login) 网址，开始注册账号。&lt;/p&gt;</description></item><item><title>python 面向对象</title><link>https://worthify-blog.pages.dev/posts/python/</link><pubDate>Wed, 28 Oct 2026 00:00:00 +0000</pubDate><guid>https://worthify-blog.pages.dev/posts/python/</guid><description>&lt;p&gt;[toc]&lt;/p&gt;&#10;&lt;h2 id="编程思维面向过程与面向对象"&gt;编程思维——面向过程与面向对象&lt;/h2&gt;&#10;&lt;p&gt;编程思维就是我们人类用编程语言解决某个问题的方式，其中最主要的就是面向过程和面型对象。&lt;/p&gt;&#10;&lt;h3 id="面向过程"&gt;面向过程&lt;/h3&gt;&#10;&lt;p&gt;在接触面向对象之前，我所写的代码基本都是面向过程思维，即遇到问题需要解决时，先将他拆解成一个个小的步骤，最终完成目标。我们可以举一个实际的例子：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;面向过程：&lt;/strong&gt; 洗衣服：加水，放衣服，倒洗衣液，揉搓，拧干，晾晒。&#10;这就是面向过程，注重实现某个目标的具体步骤。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="面向对象"&gt;面向对象&lt;/h3&gt;&#10;&lt;p&gt;面向对象的思想与面向过程非常不同，它只在乎结果，具体的实现细节并不需要考虑，我们依旧按照上面洗衣服的例子，看看面向对象如何实现的：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;面向对象：&lt;/strong&gt; 拿衣服，放入洗衣机 | 丢给干洗店 | 让其他人去洗，晾晒&#10;这就是面向对象的思维，它不关心某些功能的具体实现，只关注最后事情完成的结果。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="面向对象的基本思想"&gt;面向对象的基本思想&lt;/h3&gt;&#10;&lt;p&gt;面向对象的主要实现核心思想如下：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;面向对象让&lt;strong&gt;编程与实际事物更加接近&lt;/strong&gt;，所有对象都赋予了&lt;strong&gt;属性和方法&lt;/strong&gt;，使编程过程更具人性化。&lt;/li&gt;&#10;&lt;li&gt;宗旨在于&lt;strong&gt;模拟现实世界。&lt;/strong&gt;&lt;/li&gt;&#10;&lt;li&gt;现实生活中，&lt;strong&gt;所有事物都被称为对象。&lt;/strong&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="面向对象的三大特征"&gt;面向对象的三大特征&lt;/h3&gt;&#10;&lt;p&gt;所有支持面向对象的语言，都需要实现面向对象的三大基本特征：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;封装：&lt;/strong&gt; 隐藏具体实现细节，把属性和方法封装在一起，仅提供外部方法供人们访问，简化开发。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;继承：&lt;/strong&gt; 孩子继承父亲的东西，重复列用，增加代码复用性。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;多态：&lt;/strong&gt; 同一个函数在不同的环境下，表现出不同的状态，增加代码耦合性，扩展性。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="类"&gt;类&lt;/h2&gt;&#10;&lt;p&gt;&lt;strong&gt;定义：&lt;/strong&gt; 类是是一组对象的抽象集合，具有相同特性的对象使用同一个类。&#10;我们举例来说，面包车，轿车，跑车，越野车它们都同属于车这个大类，这里的车就是类，而轿车，跑车等就是这个类的对象，或者说实例。&#10;再比如，我们电脑分为很多类型，台式机，笔记本，二合一平板。但他们都统称为电脑。这里，电脑就是类，是各种其他类型电脑的&lt;strong&gt;超类&lt;/strong&gt;。而台式，笔记本这些就是电脑的&lt;strong&gt;子类&lt;/strong&gt;&#10;用代码表示可以这样表示：&lt;/p&gt;&#10;&lt;div class="code-block" data-lang="python"&gt;&#10; &lt;div class="code-block__head"&gt;&#10; &lt;span class="code-block__lang"&gt;PYTHON&lt;/span&gt;&#10; &lt;button type="button" class="code-block__copy" data-copy-label="复制" data-copied-label="已复制 ✓" aria-label="复制"&gt;复制&lt;/button&gt;&#10; &lt;/div&gt;&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-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 使用 class 关键字创建一个电脑类&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;class&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;computer&lt;/span&gt;:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#9;&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:#66d9ef"&gt;def&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;__init__&lt;/span&gt;(self, cpu, ram, hdd):&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; self&lt;span style="color:#f92672"&gt;.&lt;/span&gt;cpu &lt;span style="color:#f92672"&gt;=&lt;/span&gt; cpu&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; self&lt;span style="color:#f92672"&gt;.&lt;/span&gt;ram &lt;span style="color:#f92672"&gt;=&lt;/span&gt; ram&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; self&lt;span style="color:#f92672"&gt;.&lt;/span&gt;hdd &lt;span style="color:#f92672"&gt;=&lt;/span&gt; hdd&#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:#66d9ef"&gt;def&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;brand&lt;/span&gt;(self, brand_name:str): &#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; self&lt;span style="color:#f92672"&gt;.&lt;/span&gt;brand_name &lt;span style="color:#f92672"&gt;=&lt;/span&gt; brand_name&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; print(&lt;span style="color:#e6db74"&gt;f&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;Brand: &lt;/span&gt;&lt;span style="color:#e6db74"&gt;{&lt;/span&gt;self&lt;span style="color:#f92672"&gt;.&lt;/span&gt;brand_name&lt;span style="color:#e6db74"&gt;}&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#9;&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:#66d9ef"&gt;def&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;config&lt;/span&gt;(self):&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; print(&lt;span style="color:#e6db74"&gt;&amp;#34;Configuration of the computer:&amp;#34;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; print(&lt;span style="color:#e6db74"&gt;f&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;CPU: &lt;/span&gt;&lt;span style="color:#e6db74"&gt;{&lt;/span&gt;self&lt;span style="color:#f92672"&gt;.&lt;/span&gt;cpu&lt;span style="color:#e6db74"&gt;}&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; print(&lt;span style="color:#e6db74"&gt;f&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;RAM: &lt;/span&gt;&lt;span style="color:#e6db74"&gt;{&lt;/span&gt;self&lt;span style="color:#f92672"&gt;.&lt;/span&gt;ram&lt;span style="color:#e6db74"&gt;}&lt;/span&gt;&lt;span style="color:#e6db74"&gt; GB&amp;#34;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; print(&lt;span style="color:#e6db74"&gt;f&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;HDD: &lt;/span&gt;&lt;span style="color:#e6db74"&gt;{&lt;/span&gt;self&lt;span style="color:#f92672"&gt;.&lt;/span&gt;hdd&lt;span style="color:#e6db74"&gt;}&lt;/span&gt;&lt;span style="color:#e6db74"&gt; TB&amp;#34;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#9;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;def&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;__add__&lt;/span&gt;(self, other):&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; total_ram &lt;span style="color:#f92672"&gt;=&lt;/span&gt; self&lt;span style="color:#f92672"&gt;.&lt;/span&gt;ram &lt;span style="color:#f92672"&gt;+&lt;/span&gt; other&lt;span style="color:#f92672"&gt;.&lt;/span&gt;ram&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; total_hdd &lt;span style="color:#f92672"&gt;=&lt;/span&gt; self&lt;span style="color:#f92672"&gt;.&lt;/span&gt;hdd &lt;span style="color:#f92672"&gt;+&lt;/span&gt; other&lt;span style="color:#f92672"&gt;.&lt;/span&gt;hdd&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; computer(&lt;span style="color:#e6db74"&gt;&amp;#34;Combined CPU&amp;#34;&lt;/span&gt;, total_ram, total_hdd)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;创建了类后，我们就需要创建类的实例去使用它。比如我们现现在创建两个实例，代码如下：&lt;/p&gt;</description></item><item><title>linux 正则表达式和 shell 脚本基础</title><link>https://worthify-blog.pages.dev/posts/linux-%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E5%92%8C-shell-%E8%84%9A%E6%9C%AC%E5%9F%BA%E7%A1%80/</link><pubDate>Sun, 18 Oct 2026 00:00:00 +0000</pubDate><guid>https://worthify-blog.pages.dev/posts/linux-%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E5%92%8C-shell-%E8%84%9A%E6%9C%AC%E5%9F%BA%E7%A1%80/</guid><description>&lt;p&gt;[toc]&lt;/p&gt;&#10;&lt;h2 id="正则表达式的应用"&gt;正则表达式的应用&lt;/h2&gt;&#10;&lt;h3 id="在-grep-中的使用正则表达式"&gt;在 grep 中的使用正则表达式&lt;/h3&gt;&#10;&lt;p&gt;grep 命令在 Linux 系统中是一个用于查找文本内容的命令，其中为了更好更加方便地定位文本内容，grep 命令中支持正则表达式查找文本。&lt;/p&gt;&#10;&lt;p&gt;在正式讲正则表达式之前，我们先讲一下 grep 的进阶用法。&lt;/p&gt;&#10;&lt;p&gt;例如，我们需要查找在 /etc/passwd 文件中 shibo 用户所在哪一行。我们可以使用 &lt;code&gt;-n&lt;/code&gt; 选项。&lt;/p&gt;&#10;&lt;div class="code-block" data-lang="shell"&gt;&#10; &lt;div class="code-block__head"&gt;&#10; &lt;span class="code-block__lang"&gt;SHELL&lt;/span&gt;&#10; &lt;button type="button" class="code-block__copy" data-copy-label="复制" data-copied-label="已复制 ✓" aria-label="复制"&gt;复制&lt;/button&gt;&#10; &lt;/div&gt;&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-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;shibo@DESKTOP-U7FRP5M:~/spiit$ grep -n shibo /etc/passwd&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;27:shibo:x:1000:1000:,,,:/home/shibo:/bin/bash&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;当使用 &lt;code&gt;-n&lt;/code&gt; 选项后，输出的内容前会出现该行所在文档中所处的行数，这样我们就可以更加方便的定位数据。&lt;/p&gt;&#10;&lt;p&gt;有时候我们需要查看开机自检信息的内容，使用 dmesg 命令可以查看开机自检的内容。由于直接使用 dmesg 命令输出的内容太多，我们需要使用 grep 命令搜索我们需要的内容。&lt;/p&gt;&#10;&lt;div class="code-block" data-lang="text"&gt;&#10; &lt;div class="code-block__head"&gt;&#10; &lt;span class="code-block__lang"&gt;CODE&lt;/span&gt;&#10; &lt;button type="button" class="code-block__copy" data-copy-label="复制" data-copied-label="已复制 ✓" aria-label="复制"&gt;复制&lt;/button&gt;&#10; &lt;/div&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;shibo@DESKTOP-U7FRP5M:~/spiit$ dmesg&#10;[ 0.000000] Linux version 5.15.133.1-microsoft-standard-WSL2 (root@1c602f52c2e4) (gcc (GCC) 11.2.0, GNU ld (GNU Binutils) 2.37) #1 SMP Thu Oct 5 21:02:42 UTC 2023&#10;[ 0.000000] Command line: initrd=\initrd.img WSL_ROOT_INIT=1 panic=-1 nr_cpus=8 bonding.max_bonds=0 dummy.numdummies=0 fb_tunnels=none console=hvc0 debug pty.legacy_count=0&#10;[ 0.000000] KERNEL supported cpus:&#10;[ 0.000000] Intel GenuineIntel&#10;[ 0.000000] AMD AuthenticAMD&#10;————————————以下内容省略————————————&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;现在我们需要输出我们系统中 eth0 网卡的相关内容。&lt;/p&gt;</description></item><item><title>[番外]编译安装：apache 篇</title><link>https://worthify-blog.pages.dev/posts/post-3/</link><pubDate>Wed, 09 Sep 2026 00:00:00 +0000</pubDate><guid>https://worthify-blog.pages.dev/posts/post-3/</guid><description>&lt;h2 id="1-什么是编译什么是编译安装"&gt;1. 什么是编译？什么是编译安装？&lt;/h2&gt;&#10;&lt;h3 id="11-什么是编译"&gt;1.1. 什么是编译？&lt;/h3&gt;&#10;&lt;p&gt;我们在电脑中输入的代码，无论是 Python，Java，C 等等编程语言，计算机是看不懂的。只有当我们写好程序，点击 IDE 上的运行按钮时，编译器或将我们写的语言转移成计算机能看到的懂的机器吗 0000111&amp;hellip;. 之类。这个写完程序，运行程序的过程就相当于完成了一次编译。&lt;/p&gt;&#10;&lt;p&gt;我们现在所学习的编程语言，基本上都是为了让我们人类能够读的懂的”高级语言“，”高级语言“直接喂给计算机，计算机根本就看不懂。计算机只知道它们的语言，也就”机器码“，或者叫”二进制语言“。就好比我们给一个没有学过中文的老外说中文一样，老外听不懂我们说的是什么，也就不知道该如何做。而编译就好比将我们和老外之间塞了一个翻译，翻译可以将我们说的中文，转换为老外他们个国家的语言，让老外能听得懂我们说话。&lt;strong&gt;就是这样，编译其实就是将我们使用的”高级语言“转换为机器能够识别的”机器码“。&lt;/strong&gt;&lt;/p&gt;&#10;&lt;h3 id="12-什么是编译安装"&gt;1.2. 什么是编译安装？&lt;/h3&gt;&#10;&lt;p&gt;现代操作系统安装应用非常方便，执行一个 .exe 文件，或则在 linux 系统下输入 &lt;code&gt;apt install xxx&lt;/code&gt; ，&lt;code&gt;yum -y xxx&lt;/code&gt; 等等指令就可以直接安装。只需要设置一下安装路径。开启或关闭某些功能就信行。&lt;/p&gt;&#10;&lt;p&gt;而编译安装就比较麻烦了，从名字上来看，我们得先编译，然后在安装。展开来说 ，就是直接通过编译程序的源代码，将源代码编译成机器看的懂语言后，再安装并执行的步骤。这整个过程我都需要我们人工执行和干预，&lt;/p&gt;&#10;&lt;p&gt;编译安装与直接通过软件包安装的来说，有诸多劣势。但是任然有一些科研类或者极其垂类的软件只提供了编译安装方式。&lt;/p&gt;&#10;&lt;h2 id="2-编译安装步骤"&gt;2. 编译安装步骤。&lt;/h2&gt;&#10;&lt;h3 id="21-编译安装流程"&gt;2.1 编译安装流程&lt;/h3&gt;&#10;&lt;p&gt;这里以 apache 2.4 版本为例，讲解如何一步步的通过源码来安装。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;系统版本&lt;/strong&gt;：Archlinux（linux 6.15.2-arch-1）&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;软件版本&lt;/strong&gt;：gcc 15.1.1，apr 1.7.6-1，apr-util 1.6.3-2&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;apache 版本&lt;/strong&gt;：2.4.63&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h4 id="211--下载源码包"&gt;2.1.1 下载源码包&lt;/h4&gt;&#10;&lt;p&gt;apache 官网有当前最新版本的软件源码包。可以通过下面的 &lt;a href="https://httpd.apache.org/download.cgi"&gt;链接&lt;/a&gt; 进入官网下载。官网提供两种格式的源码压缩包，依据自己习惯使用的解压工具下载即可。这里我们下载 .tar.gz 格式的包，下载后的格式大致如下：&lt;/p&gt;&#10;&lt;div class="code-block" data-lang="javascript"&gt;&#10; &lt;div class="code-block__head"&gt;&#10; &lt;span class="code-block__lang"&gt;JAVASCRIPT&lt;/span&gt;&#10; &lt;button type="button" class="code-block__copy" data-copy-label="复制" data-copied-label="已复制 ✓" aria-label="复制"&gt;复制&lt;/button&gt;&#10; &lt;/div&gt;&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-javascript" data-lang="javascript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;httpd&lt;/span&gt;&lt;span style="color:#f92672"&gt;-&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;2.4&lt;/span&gt;.&lt;span style="color:#ae81ff"&gt;63.&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;tar&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;gz&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;这里推荐直接使用 wget 命令或者 git 命令下载。在下载源码前，建议现在系统中创建一个目录，将下载的源码包放到目录中方便管理。&lt;/p&gt;&#10;&lt;div class="code-block" data-lang="javascript"&gt;&#10; &lt;div class="code-block__head"&gt;&#10; &lt;span class="code-block__lang"&gt;JAVASCRIPT&lt;/span&gt;&#10; &lt;button type="button" class="code-block__copy" data-copy-label="复制" data-copied-label="已复制 ✓" aria-label="复制"&gt;复制&lt;/button&gt;&#10; &lt;/div&gt;&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-javascript" data-lang="javascript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;wget&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;https&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt;&lt;span style="color:#75715e"&gt;//dlcdn.apache.org/httpd/httpd-2.4.63.tar.gz -p /home/shibo/apache_source_code/&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;之后，我们将下载到的源码包进行解压。&lt;/p&gt;</description></item><item><title>[扩展] Linux 网卡双网卡绑定</title><link>https://worthify-blog.pages.dev/posts/post/</link><pubDate>Sat, 05 Sep 2026 00:00:00 +0000</pubDate><guid>https://worthify-blog.pages.dev/posts/post/</guid><description>&lt;h2 id="对于-rpm-系发行版"&gt;对于 RPM 系发行版&lt;/h2&gt;&#10;&lt;p&gt;对于基于 RPM 包的 Linux 发行版，可以直接使用 nmcli 网络管理工具，在命令行下配置 bond0&lt;/p&gt;&#10;&lt;h3 id="bond-模式"&gt;bond 模式&lt;/h3&gt;&#10;&lt;p&gt;对于 bond，在配置时可以指定不同的模式以满足实际需求：&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;mode number&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;mode name&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;decribe&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;0&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;balance-rr&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;轮询模式，在该模式下，数据会通过该 bond 下的第一个网卡开始，依次发送和接收。&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;1&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;backup&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;主备模式，在该模式下，bond 只有一个活动网卡工作，只有当前活动网卡故障时，才会使用另一个绑定的备用网卡&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;2&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;balance-xor&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;异或（XOR） 模式，该模式下，接口会通过奇异或方式计算 MAC地址，并将得到 MAC 地址与 bond 中绑定网卡的 MAC 地址进行匹配。建立连接后，数据会匹配的网卡发送/接收&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;3&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;broadcast&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;广播模式，该模式下，bond 中所有网卡全部参与数据的发送和接收。&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;4&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;802.3ad&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;设置 IEEE 802.3ad 动态链路聚合策略。 创建共享相同速度和双工设置的聚合组。 在活动聚合器中的所有成员上同时进行发送和接收。需要支持 802.3ad 标准的交换机。&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;5&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;balance-tlb&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;设置传输负载均衡（TLB）策略，以实现容错和负载均衡。 出站流量根据各成员接口的当前负载进行分配。入站流量由当前成员网卡接收。 如果接收成员发生故障，另一成员将接管故障成员的 MAC 地址。&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;6&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;balance-alb&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;设置主动负载均衡（ALB）策略，以实现容错和负载均衡。 包括针对 IPv4 流量的发送和接收负载均衡。 通过 ARP 协商实现接收负载均衡。&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;h3 id="配置"&gt;配置&lt;/h3&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;第一步，首先检查系统支持 bond 功能。&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;div class="code-block" data-lang="bash"&gt;&#10; &lt;div class="code-block__head"&gt;&#10; &lt;span class="code-block__lang"&gt;BASH&lt;/span&gt;&#10; &lt;button type="button" class="code-block__copy" data-copy-label="复制" data-copied-label="已复制 ✓" aria-label="复制"&gt;复制&lt;/button&gt;&#10; &lt;/div&gt;&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:#f92672"&gt;[&lt;/span&gt;root@shibo ~&lt;span style="color:#f92672"&gt;]&lt;/span&gt;$ lsmod | grep bonding&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;bonding &lt;span style="color:#ae81ff"&gt;274432&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;tls &lt;span style="color:#ae81ff"&gt;159744&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt; bonding&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;命令返回如上结果则表明系统以及载入 bonding 模块并且支持bond 功能。如执行后无输出，则需要手动载入 bonding 模块&lt;/p&gt;</description></item><item><title>双系统分区调整：从 Windows D 盘分配 50GB 给 Arch Linux</title><link>https://worthify-blog.pages.dev/posts/post-2/</link><pubDate>Sat, 05 Sep 2026 00:00:00 +0000</pubDate><guid>https://worthify-blog.pages.dev/posts/post-2/</guid><description>&lt;h2 id="双系统分区调整从-windows-d-盘分配-50gb-给-arch-linux"&gt;双系统分区调整：从 Windows D 盘分配 50GB 给 Arch Linux&lt;/h2&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;[!CAUTION] 🚨 Caution&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;操作前务必备份所有重要数据！&lt;/strong&gt; 分区调整涉及磁盘底层数据结构，存在数据丢失风险。请将 Windows 和 Linux 中的重要文件备份到外部存储设备或云端。&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;hr&gt;&#10;&lt;h3 id="操作概览"&gt;操作概览&lt;/h3&gt;&#10;&lt;p&gt;整个流程分为 &lt;strong&gt;4 个阶段&lt;/strong&gt;：&lt;/p&gt;&#10;&lt;pre class="mermaid"&gt;flowchart LR&#10; A[&amp;#34;阶段1\n准备工作&amp;#34;] --&amp;gt; B[&amp;#34;阶段2\nWindows 缩小 D 盘&amp;#34;]&#10; B --&amp;gt; C[&amp;#34;阶段3\nGParted 扩展 Linux 分区&amp;#34;]&#10; C --&amp;gt; D[&amp;#34;阶段4\n验证与引导修复&amp;#34;]&lt;/pre&gt;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;阶段&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;操作环境&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;所需工具&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;预计耗时&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;准备工作&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Windows&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;系统设置&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;10 分钟&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;缩小 D 盘&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Windows&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;磁盘管理&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;5 分钟&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;扩展 Linux 分区&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;GParted Live USB&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;GParted&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;30-120 分钟&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;验证修复&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Arch Linux&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;终端&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;10-30 分钟&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;hr&gt;&#10;&lt;h3 id="阶段-0了解你的磁盘布局"&gt;阶段 0：了解你的磁盘布局&lt;/h3&gt;&#10;&lt;p&gt;在操作前，先搞清楚你当前的磁盘分区布局。典型的双系统布局可能如下：&lt;/p&gt;</description></item></channel></rss>