<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>技术折腾 on Haleuan&#39;s Blog</title>
    <link>https://haleuan.github.io/categories/%E6%8A%80%E6%9C%AF%E6%8A%98%E8%85%BE/</link>
    <description>Recent content in 技术折腾 on Haleuan&#39;s Blog</description>
    <generator>Hugo</generator>
    <language>zh-cn</language>
    <lastBuildDate>Tue, 26 Aug 2025 20:00:00 +0800</lastBuildDate>
    <atom:link href="https://haleuan.github.io/categories/%E6%8A%80%E6%9C%AF%E6%8A%98%E8%85%BE/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Linux 生存指南：Vim, Nano 与 Tmux</title>
      <link>https://haleuan.github.io/post/linux-survival-guide-terminal-tools/</link>
      <pubDate>Tue, 26 Aug 2025 20:00:00 +0800</pubDate>
      <guid>https://haleuan.github.io/post/linux-survival-guide-terminal-tools/</guid>
      <description>&lt;h2 id=&#34;vim&#34;&gt;Vim&lt;/h2&gt;
&lt;h3 id=&#34;功能&#34;&gt;功能&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;命令行文本编辑器&lt;/strong&gt;：Vim 是一个强大的命令行文本编辑器，适用于多种操作系统。&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;code&gt;vim filename&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;如果文件存在，则打开该文件；如果文件不存在，则创建一个新文件并命名为 &lt;code&gt;filename&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;模式&#34;&gt;模式&lt;/h3&gt;
&lt;p&gt;Vim 包含三种主要模式：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Linux 生存指南：进程与定时任务</title>
      <link>https://haleuan.github.io/post/linux-survival-guide-process/</link>
      <pubDate>Tue, 26 Aug 2025 20:00:00 +0800</pubDate>
      <guid>https://haleuan.github.io/post/linux-survival-guide-process/</guid>
      <description>&lt;h2 id=&#34;crontab-常用速查指南openwrt--linux&#34;&gt;Crontab 常用速查指南（OpenWRT / Linux）&lt;/h2&gt;
&lt;h3 id=&#34;1-基本概念&#34;&gt;1) 基本概念&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;cron&lt;/strong&gt;：定时任务守护进程&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;crontab&lt;/strong&gt;：用户级任务表（每个用户一份）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;任务格式&lt;/strong&gt;：&lt;code&gt;分 时 日 月 周  命令&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;2-常用命令&#34;&gt;2) 常用命令&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;查看当前用户任务：&lt;code&gt;crontab -l&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;编辑当前用户任务：&lt;code&gt;crontab -e&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;删除当前用户任务：&lt;code&gt;crontab -r&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;查看 cron 服务状态（OpenWRT）：&lt;code&gt;/etc/init.d/cron status&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;启动 cron（OpenWRT）：&lt;code&gt;/etc/init.d/cron start&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;开机自启（OpenWRT）：&lt;code&gt;/etc/init.d/cron enable&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;重启 cron（OpenWRT）：&lt;code&gt;/etc/init.d/cron restart&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;3-时间字段速记分时日月周&#34;&gt;3) 时间字段速记（分时日月周）&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;分：0-59&lt;/li&gt;
&lt;li&gt;时：0-23&lt;/li&gt;
&lt;li&gt;日：1-31&lt;/li&gt;
&lt;li&gt;月：1-12&lt;/li&gt;
&lt;li&gt;周：0-7（0/7 都表示周日；1=周一 … 6=周六）&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;4-通配与步进写法&#34;&gt;4) 通配与步进写法&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;*&lt;/code&gt;：任意值&lt;/li&gt;
&lt;li&gt;&lt;code&gt;,&lt;/code&gt;：列举多个值（如 &lt;code&gt;1,15&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-&lt;/code&gt;：范围（如 &lt;code&gt;1-5&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/&lt;/code&gt;：步进（如 &lt;code&gt;*/5&lt;/code&gt; 表示每 5 分钟）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;示例：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Linux 生存指南：网络配置与管理</title>
      <link>https://haleuan.github.io/post/linux-survival-guide-network/</link>
      <pubDate>Tue, 26 Aug 2025 20:00:00 +0800</pubDate>
      <guid>https://haleuan.github.io/post/linux-survival-guide-network/</guid>
      <description>&lt;h2 id=&#34;nmcli&#34;&gt;nmcli&lt;/h2&gt;
&lt;h3 id=&#34;连接-wi-fi-命令备忘录&#34;&gt;连接 Wi-Fi 命令备忘录&lt;/h3&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;&lt;strong&gt;扫描网络&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;nmcli device wifi list&lt;/code&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;code&gt;sudo nmcli dev wifi connect &amp;quot;SSID&amp;quot; password &amp;quot;PASS&amp;quot;&lt;/code&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;code&gt;nmcli con show --active&lt;/code&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;code&gt;nmcli con show&lt;/code&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;code&gt;sudo nmcli dev disconnect wlan0&lt;/code&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;code&gt;sudo nmcli con up &amp;quot;连接名&amp;quot;&lt;/code&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;code&gt;sudo nmcli con del &amp;quot;连接名&amp;quot;&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;关闭/开启 Wi-Fi&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;nmcli radio wifi off/on&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;方法一使用&#34;&gt;&lt;strong&gt;方法一：使用 &lt;code&gt;nmcli&lt;/code&gt; 创建热点 (推荐)&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;nmcli&lt;/code&gt; 是 NetworkManager 的命令行客户端，是管理网络连接的现代标准。用它来创建热点相对简单直观。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Linux 生存指南：文件传输与进度监控</title>
      <link>https://haleuan.github.io/post/linux-survival-guide-file-transfer/</link>
      <pubDate>Tue, 26 Aug 2025 20:00:00 +0800</pubDate>
      <guid>https://haleuan.github.io/post/linux-survival-guide-file-transfer/</guid>
      <description>&lt;h2 id=&#34;mv-cp-进度显示&#34;&gt;&lt;code&gt;mv&lt;/code&gt;, &lt;code&gt;cp&lt;/code&gt; 进度显示&lt;/h2&gt;
&lt;h3 id=&#34;rsync&#34;&gt;&lt;code&gt;rsync&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;复制单个文件：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# -a: 归档模式，保留文件所有属性（权限、时间戳等）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# -h: human-readable，以人类可读的格式显示大小 (e.g., GB, MB)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# -P: 显示进度 (progress) 并且支持断点续传 (partial)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rsync -ahP /path/to/source/very_large_dataset.zip /path/to/destination/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;复制整个目录：&lt;/p&gt;</description>
    </item>
    <item>
      <title>FastAPI 入门与 HTTP 协议基础</title>
      <link>https://haleuan.github.io/post/fastapi-basics/</link>
      <pubDate>Thu, 08 May 2025 20:00:00 +0800</pubDate>
      <guid>https://haleuan.github.io/post/fastapi-basics/</guid>
      <description>&lt;h2 id=&#34;quickstart&#34;&gt;Quickstart&lt;/h2&gt;
&lt;p&gt;e.g&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;typing&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Union&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;fastapi&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;FastAPI&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&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;FastAPI&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nd&#34;&gt;@app.get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;read_root&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;():&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Hello&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;World&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nd&#34;&gt;@app.get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/items/&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{item_id}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;read_item&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;item_id&lt;/span&gt;&lt;span class=&#34;p&#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;q&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Union&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;kc&#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;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;item_id&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;item_id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;q&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;q&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ol&gt;
&lt;li&gt;创建 FastAPI 实例：&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&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;FastAPI&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;在这一步，创建了一个 FastAPI 应用的实例，它将用于定义和管理应用的各个组件，包括路由。&lt;code&gt;FastAPI&lt;/code&gt; 是FastAPI框架的主要类。
2. 定义根路径 &lt;code&gt;/&lt;/code&gt; 的路由操作&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
