<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Posts on Worthify 博客</title><link>https://worthify-blog.pages.dev/posts/</link><description>Recent content in Posts on Worthify 博客</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Sat, 17 Oct 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://worthify-blog.pages.dev/posts/index.xml" rel="self" type="application/rss+xml"/><item><title>vim 编辑器使用专题</title><link>https://worthify-blog.pages.dev/posts/vim-%E7%BC%96%E8%BE%91%E5%99%A8%E4%BD%BF%E7%94%A8%E4%B8%93%E9%A2%98/</link><pubDate>Sat, 17 Oct 2026 00:00:00 +0000</pubDate><guid>https://worthify-blog.pages.dev/posts/vim-%E7%BC%96%E8%BE%91%E5%99%A8%E4%BD%BF%E7%94%A8%E4%B8%93%E9%A2%98/</guid><description>&lt;h2 id="vim-的三种模式"&gt;VIM 的三种模式&lt;/h2&gt;&#10;&lt;p&gt;VIM的三种基本三种工作模式，分别是“一般模式”，“编辑模式”与“命令行命令模式”。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;一般模式（command mode）&lt;/strong&gt;：vim 进入后默认就是一般模式，这个模式可以里可以进行复制，粘贴，删除，移动光标，复原等操作。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;编辑模式（edit moda）：&lt;/strong&gt; 进入编辑模式后可以对文件进行更改。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;延伸指令模式（extended command mode）&lt;/strong&gt;：这个模式可以存储，退出，强制存储，搜索或替换等操作。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;可视模式（vitual mode）：&lt;/strong&gt; 这个模式可以显示我们正在所选取的内容。主要包含三种：&#10;&lt;ul&gt;&#10;&lt;li&gt;v：字符方法圈选。&lt;/li&gt;&#10;&lt;li&gt;[shift]+v：以整行的方式圈选。&lt;/li&gt;&#10;&lt;li&gt;[ctrl]+v：以区块方式圈选。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;注：&lt;/strong&gt; 选取完后可以通过 y 复制，或者 d 删除。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="操作说明"&gt;操作说明：&lt;/h2&gt;&#10;&lt;h3 id="一般指令模式可用的按键说明"&gt;一般指令模式可用的按键说明。&lt;/h3&gt;&#10;&lt;h4 id="光标移动操作"&gt;光标移动操作&lt;/h4&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;按键&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;h 键或左方向键&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;光标向左移动&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;j 键或下方向键&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;光标向下移动&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;k 或向上方向键&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;光标向上移动&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;l 或右方向键&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;光标向右移动&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;[ctrl]+[f]&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;屏幕向下移动一页，相当于 [PgDn] 键&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;[ctrl]+[b]&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;屏幕向上移动一页，相当于 [PgUp] 键&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;[ctrl]+[d]&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;屏幕向下移动半页&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;[ctrl]+[u]&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;屏幕向上移动半页&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;光标移动到非空白字符的下一行&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;光标移动到非空白字符的上一行&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;n &amp;lt;space&amp;gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;n 为数字，输入数字按下空格键后，光标会向右移动 n 位。例如，n 为 20，那么 20 &amp;lt;space&amp;gt; 表示光标向右移动20位。&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;0 或则功能键 [Home]&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;将光标移动至所在行的第一个字符处。&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;$ 或者功能键 [End]&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;将光标移动到所在行的最后一个字符处。&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;H&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;将光标移动到屏幕最上方一行的行首&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;M&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;将光标移动到屏幕中间一行的行首&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;L&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;将光标移动到屏幕最下方一行的行首&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;G&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;将光标移动文件的最后一行。&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;nG&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;n 为数字，将光标移动到 n 指定的一行&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;gg&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;移动到这个文件的第一行，相当于 1G 。&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;n &amp;lt;Enter&amp;gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;n 为数字，光标向下移动 n 行&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;h4 id="搜索与替换"&gt;搜索与替换&lt;/h4&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;命令&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;/word&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;在当前光标的下方开始查找 word 字符串。&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;?word&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;在当前光标的上方开始查找 word 字符串&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;[n]&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;小写 n 键，表示继续向下搜索，可以将其理解为英文中 next (下一个)&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;[N]&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;大写 n 键，表示继续向上搜索。与 n 刚好相反。&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;:n1,n2s/word1/word2/g&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;n1 与 n2 为数字。表示在 n1 与 n2 行之间，将 word1 字符串替换为 word2 字符串。例如，该命令写作：10,100s/you/my/g 。那么则表示，在 10 行和 100 行之中，将所有 you 字符替换为 my 。&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,$s/word1/word2/g&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;从第一行到最后一行寻找 word1 字符串，并将其替换为 word2 字符串。&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,$s/word1/word2/gc&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;从第一行到最后一行寻找 word1 字符串，并逐个询问是否将其替换为 word2。&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;h4 id="删除复制粘贴"&gt;删除，复制，粘贴。&lt;/h4&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;命令&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;x,X&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;x(小写) 表示删除光标所在位置的后一个字符，X(大写) 表示删除光标所在位置的前一个字符。&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;nx&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;n 为数字，表示连续删除 n 字符。&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;dd&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;删除当前光标所在的一整行。&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;ndd&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;删除当前光标所在的向下 n 行。例：20dd 表示删除 由当前行向下的 20 行。&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;d1G&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;删除光标所在行到第一行的所有数据&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;dG&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;删除光标所在行到最最后一行的所有数据。&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;删除光标所在处，到该行的最后一个字符。&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;d0&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;删除光标所在处，到改行的第一个字符。&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;yy&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;复制光标所在的哪一行内容。&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;nyy&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;n 为数字。复制光标所在的向下 n 行，例如 20yy 则表示向下复制 20 行的内容。&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;y1G&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;复制光标所在行的到第一行的所有数据&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;yG&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;复制光标所在行到最后一行的所有数据。&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;y0&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;复制光标所在行到该行行首的所有数据&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;y$&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;复制光标所在行到改行行尾的所有数据。&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;p,P&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;p 表示复制数据在光标下&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;J&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;将光标所在行与下一列的数据结合使用&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;c&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;剪贴多行数据，例如要剪贴向下 10 行的数据 10cj&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;strong&gt;u&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;还原前一个动作&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;strong&gt;[ctrl]+r&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;重做上一个动作。&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;小数点，重复前一个动作。例如，你需要一直粘贴。&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;&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;h4 id="进入插入或替换的编辑模式"&gt;进入插入或替换的编辑模式&lt;/h4&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;命令&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;i,I&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;进入插入模式，i 为从目前光标的位置插入；I 表示在当前所在行的第一个非空白字符处开始插入。&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;a,A&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;进入插入模式，a 为目前光标所在的下一个字符开始插入；A 为从光标所在行的最后一个字符处开始插入&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;o,O&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;进入插入模式，o 为从目前光标所在的下一行处插入新的一行；O 为在目前光标所在处的上一行插入新的一行。&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;[Esc]&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;退出编辑模式。回到一般指令模式。&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;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;&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;:w&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;保存修改的数据&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;:w!&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;强制保存修改的数据&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;:q&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;退出 vim&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;:q!&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;强制退出 vim&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;:wq&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;保存数据并退出 vim&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;:ZZ&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;若文件没有改动，则不存储离开；若文件被改动过，则存储后离开。&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;:w [filename]&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;将编辑的数据保存到另外一个文件中。&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;:r [filename]&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;将 filename 文件中的内容，写入到当前编辑文件的文件的光标的下一行。&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;:n1,n2 w [filename]&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;将 n1 到 n2 行的内容存储到 filename 这个文件中。&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;:! command&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;暂时离开 vim 到命令行中执行命令并返回结果。例如 :! ls /home 即可在 vim 当中查看 /home 目录下列处的文件。&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;h4 id="vim-环境配置"&gt;vim 环境配置&lt;/h4&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;命令&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;:set nu&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;显示行号，设置之后，会在每一行的字首显示该行的行号&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;:set nonu&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;与 set nu 相反，取消显示行好好。&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;:set hlsearch&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;高亮显示关键词&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;:syntax on/off&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;开启/关闭语法检测功能&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;:set noincsearch&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;取消自动搜索机制&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;:set ignorecase&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;搜搜时忽略大小写&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;:set autoindent&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;自动处理代码缩进&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;:set tabstop&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;设置 [tab] 制表符长度为 8 个单元&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;:set scrolloff=0&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;设置预先显示的行数为0，即预先不显示。&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;:set nowrap&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;设置不拆行&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;set cursorline&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;设置突出显示光标所在的行&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;h2 id="多文件编辑"&gt;多文件编辑&lt;/h2&gt;&#10;&lt;p&gt;当我们需要通知处理多个文件时，例如在文件 A 中通过 yy 复制了某一行的内容，然后需要用 p 复制到文件 B 中。如果我们单独打开两个 vim ，文件 A 中的内容是无法直接使用 p 命令复制到文件 B 中的。这个时候，我们可以使用 vim 的多文件编辑功能来完成这个操作。&lt;/p&gt;</description></item><item><title>docker 基础介绍</title><link>https://worthify-blog.pages.dev/posts/docker-%E5%9F%BA%E7%A1%80%E4%BB%8B%E7%BB%8D/</link><pubDate>Fri, 16 Oct 2026 00:00:00 +0000</pubDate><guid>https://worthify-blog.pages.dev/posts/docker-%E5%9F%BA%E7%A1%80%E4%BB%8B%E7%BB%8D/</guid><description>&lt;h2 id="docker-是什么"&gt;docker 是什么？&lt;/h2&gt;&#10;&lt;p&gt;docker 采用 google 公司开发的 go 语言编写而成，对进程进行封装隔离，基于操作系统层面的虚拟化技术。由于隔离的进出独立于宿主机和其他隔离的进程，因此也被称之为容器。&lt;/p&gt;&#10;&lt;h3 id="容器container"&gt;容器（Container）&lt;/h3&gt;&#10;&lt;p&gt;那么什么是容器？j简单说，容器就是应用程序每个组件的独立进程，每个组件（数据库，python程序等）都在独立的容器中运行，它与计算机中的其他组件完全隔离。&lt;/p&gt;&#10;&lt;p&gt;容器的特定主要有：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;自包括，每个容器都具有其运行所需的一切，并且不依赖与主机上任何预安装的依赖项。&lt;/li&gt;&#10;&lt;li&gt;隔离。每个容器都是独立的，因此单个容器中发送的任何事情都不会影响到主机或者其他运行的容器，这大大提高了应用程序的安全性。&lt;/li&gt;&#10;&lt;li&gt;独立。每个容器都是独立管理的，删除一个容器也不会影响到其他容器。&lt;/li&gt;&#10;&lt;li&gt;可移植性。容器可以在任何地方运行。在任何地方都相同的方式运行。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h4 id="容器的与虚拟机的区别"&gt;容器的与虚拟机的区别&lt;/h4&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;/ul&gt;&#10;&lt;p&gt;现在为了最大化的利用硬件性能，&lt;strong&gt;虚拟机和容器通常是结合在&lt;/strong&gt;一起使用的。例如我们购买的云服务器，上面运行的操作系统其实就是云服务提供商通过虚拟机在一台服务器上虚拟出来的。这样一台服务器可以运行多个操作系统，减少资源浪费降低成本。同时，我们有时候也会在云服务器上运行一些容器化的应用程序。减少开发成本和服务器压力。从而可以让服务器运行更多程序或者留出性能以更好的运行程序。&lt;/p&gt;&#10;&lt;h3 id="镜像image"&gt;镜像（Image）&lt;/h3&gt;&#10;&lt;p&gt;容器是一个独立运行的进程，那么它运行时需要的资源从何而来？那就就是镜像的作用。&lt;/p&gt;&#10;&lt;p&gt;举一个简单的例子，我们计算机中都运行着软件，这些软件能够运行的前提是因为有可以承载这个软件的操作系统。而镜像可以简单的理解为软件运行时所需要的基础文件。&lt;/p&gt;&#10;&lt;p&gt;例如一个 pyhton web 应用，它的镜像就是 python 运行环境（用于运行 Python 程序），Python 代码（软件的运行代码），依赖库（Python pip包，第三方库等），数据库等（检索，存储数据）。&lt;/p&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;/ul&gt;&#10;&lt;h4 id="分层存储"&gt;分层存储&lt;/h4&gt;&#10;&lt;p&gt;如上面所说，镜像由层组成，镜像构建时，会一层层构建，前一层时后一层基础。每一层构建完后不会更改。后一层上的任何变化都只会作用于自己在的一层。例如删除前一层文件的操作，实际上不是正真的删除前一层的文件，只是对文件做了删除的标记。最终容器运行时，虽然看不到这个文件，但是这个文件会一直跟随着镜像。因此在构建镜像时，每一层尽量只包括该层需要添加的东西，任何额外的东西需要在该层构建结束前清除。&lt;/p&gt;&#10;&lt;p&gt;分层存储的特征：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;镜像复用：&lt;/strong&gt; 例如两个个容器都使用的是 Python 3.12 这个版本的 python.，那么这两个容器可以共同使用同一个版本的 Pythion，不需要重复存储同样的内容。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;定制化：&lt;/strong&gt; 当某个容器镜像的某些功能不嫩满足需求时，可以在此基础上构建一个新层来添加功能。最后构建为一个新的镜像来使用。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="仓库repository"&gt;仓库（Repository）&lt;/h3&gt;&#10;&lt;p&gt;镜像构建完毕后，可以很轻松的在本地运行，但是，如果其他服务器要使用这个镜像，就需要从一个集中管理镜像的地方上分发镜像。这个集中管理镜像的地方就是仓库。Docker Registry 就提供这种服务。&lt;/p&gt;&#10;&lt;p&gt;==&lt;strong&gt;一个 Docker Registry 中包含多个仓库（Repository） ，每个仓库可以包含多个标签（Tag），每个标签就对应一个镜像。&lt;/strong&gt;==&lt;/p&gt;&#10;&lt;p&gt;仓库中会包含一个软件的多个扳本，而标签就用于对应该软件的各个扳本。我们可以通过&amp;lt;仓库名&amp;gt;:&amp;lt;标签&amp;gt; 的格式来指定该软件的具体扳本。如果不指定标签，那么默认以 &lt;code&gt;latest&lt;/code&gt; 作为默认标签。&lt;/p&gt;&#10;&lt;p&gt;例如，Ubuntu 镜像，我现在需要 &lt;code&gt;16.04&lt;/code&gt;，这个版本的，那么我在下载镜像时要这样写：&lt;code&gt;Ubunutu:16.04&lt;/code&gt;。&lt;/p&gt;&#10;&lt;p&gt;仓库名经常以 &lt;em&gt;两段式路径&lt;/em&gt; 形式出现，比如 &lt;code&gt;jwilder/nginx-proxy&lt;/code&gt;，前者往往意味着 Docker Registry 多用户环境下的用户名，后者则往往是对应的软件名。但这并非绝对，取决于所使用的具体 Docker Registry 的软件或服务。&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="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;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这里推荐直接使用 wget 命令或者 git 命令下载。在下载源码前，建议现在系统中创建一个目录，将下载的源码包放到目录中方便管理。&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-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;p&gt;之后，我们将下载到的源码包进行解压。&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;gzip -d httpd-2.4.63.tar.gz&#9;&#9;# 使用 gzip 解压 gz 格式压缩包。&#10;tar -zvf httpd-2.4.63.tar&#9;&#9;# 使用 tar 解压 tar 格式的压缩包。注意：直接使用 tar 解压带 .gz 格式的按照包会提示无法解压该格式。&#10;cd httpd-2.4.63&#9;&#9;# 进入解压后的源码目录中。&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;进入 cd 目录后，您因该可以看大致如下内容：&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="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&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&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 tabindex="0"&gt;&lt;code class="language-mermaid" data-lang="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;]&#10;&lt;/code&gt;&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>