From c597427b9ab9ac2fcdd0eaa1ce8e2a6f7be0f898 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=97=B6=E4=B9=8B=E5=88=83?= <1+timecrackbot@noreply.192.168.1.87> Date: Tue, 15 Sep 2026 19:53:43 +0800 Subject: [PATCH] =?UTF-8?q?chore:=20=E4=BC=98=E5=8C=96=E6=96=87=E7=AB=A0?= =?UTF-8?q?=E7=BB=93=E6=9E=84=EF=BC=8C=E6=8A=8A=E4=B8=80=E4=BA=9B=E4=B9=8B?= =?UTF-8?q?=E5=89=8D=E7=94=A8AI=E7=94=9F=E6=88=90=E7=9A=84=E6=96=87?= =?UTF-8?q?=E7=AB=A0=E9=83=BD=E5=88=A0=E9=99=A4=E6=8E=89=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../posts/AI/AI-无头Obsidian联动功能分析.md | 301 --------- .../建站/Caddy try_files 的目录匹配陷阱.md | 118 ---- .../posts/建站/Zensical博客完全上手指南.md | 259 -------- .../posts/建站/Zensical图标与扩展功能指南.md | 560 ---------------- .../posts/建站/vitepress-blog-guide.md | 457 ------------- .../posts/建站/vitepress_teek主题用法.md | 162 ----- src/content/posts/建站/又一个博客站.md | 11 - src/content/posts/思考/伪需求.md | 10 - .../posts/{AI => 思考}/关于AI的思考.md | 2 +- .../{建站 => 思考}/博客到底可以用来做什么.md | 0 src/content/posts/思考/奥卡姆剃刀原则.md | 3 +- .../LaTeX数学公式使用教程.md | 26 +- .../Linux英语词汇速查手册.md | 0 .../Linux学习 => 技术学习}/nocoDB的使用.md | 0 .../树莓派云服务器的使用总结.md | 0 .../posts/教程/Linux学习/Obsidian-树莓派.md | 251 ------- .../posts/教程/Linux学习/Ubuntu-入门指南.md | 404 ------------ .../Linux学习/ubuntu系统使用指南-常态更新.md | 186 ------ .../posts/教程/Linux学习/树莓派安装Docker.md | 112 ---- .../教程/Linux学习/树莓派开机启动脚本.md | 63 -- .../银河麒麟-Ubuntu-系统入门到进阶教程.md | 612 ------------------ src/content/posts/生活/不买-NAS-的理由.md | 87 --- src/content/posts/生活/记录生活的瞬间.md | 31 - 23 files changed, 14 insertions(+), 3641 deletions(-) delete mode 100644 src/content/posts/AI/AI-无头Obsidian联动功能分析.md delete mode 100644 src/content/posts/建站/Caddy try_files 的目录匹配陷阱.md delete mode 100644 src/content/posts/建站/Zensical博客完全上手指南.md delete mode 100644 src/content/posts/建站/Zensical图标与扩展功能指南.md delete mode 100644 src/content/posts/建站/vitepress-blog-guide.md delete mode 100644 src/content/posts/建站/vitepress_teek主题用法.md delete mode 100644 src/content/posts/建站/又一个博客站.md delete mode 100644 src/content/posts/思考/伪需求.md rename src/content/posts/{AI => 思考}/关于AI的思考.md (98%) rename src/content/posts/{建站 => 思考}/博客到底可以用来做什么.md (100%) rename src/content/posts/{教程 => 技术学习}/LaTeX数学公式使用教程.md (91%) rename src/content/posts/{教程/Linux学习 => 技术学习}/Linux英语词汇速查手册.md (100%) rename src/content/posts/{教程/Linux学习 => 技术学习}/nocoDB的使用.md (100%) rename src/content/posts/{教程/Linux学习 => 技术学习}/树莓派云服务器的使用总结.md (100%) delete mode 100644 src/content/posts/教程/Linux学习/Obsidian-树莓派.md delete mode 100644 src/content/posts/教程/Linux学习/Ubuntu-入门指南.md delete mode 100644 src/content/posts/教程/Linux学习/ubuntu系统使用指南-常态更新.md delete mode 100644 src/content/posts/教程/Linux学习/树莓派安装Docker.md delete mode 100644 src/content/posts/教程/Linux学习/树莓派开机启动脚本.md delete mode 100644 src/content/posts/教程/Linux学习/银河麒麟-Ubuntu-系统入门到进阶教程.md delete mode 100644 src/content/posts/生活/不买-NAS-的理由.md delete mode 100644 src/content/posts/生活/记录生活的瞬间.md diff --git a/src/content/posts/AI/AI-无头Obsidian联动功能分析.md b/src/content/posts/AI/AI-无头Obsidian联动功能分析.md deleted file mode 100644 index 971063b..0000000 --- a/src/content/posts/AI/AI-无头Obsidian联动功能分析.md +++ /dev/null @@ -1,301 +0,0 @@ ---- -title: "\U0001F916 AI + Obsidian 无头笔记:联动功能与应用场景全分析" -published: 2026-06-06 -image: "" -tags: [AI, Obsidian, 工作流, DevOps, 自动化, 知识管理] -category: AI -draft: false ---- -# 🤖 AI 助手(PicoClaw)× 无头 Obsidian 联动分析 - -> 分析时间:2026-06-06 -> 联动双方:PicoClaw AI 助手(轻量 Go 语言 AI)+ Fast Note Sync Service(无头 Obsidian API) - ---- - -## 一、什么是"无头 Obsidian"? - -传统 Obsidian 依赖 GUI 客户端操作笔记。而**无头 Obsidian**(Fast Note Sync Service)将保险库暴露为 HTTP REST API,允许任何外部程序**读写笔记内容、管理文件夹结构**,不需要图形界面。 - -**核心 API 能力:** - -| 能力 | 方法 | 用途 | -|:---|:---:|:---| -| 列出笔记 | GET /api/notes | 获取全部笔记清单(支持搜索) | -| 读取内容 | GET /api/note | 获取完整 Markdown + frontmatter | -| 创建/更新 | POST /api/note | 新建或修改笔记 | -| 删除笔记 | DELETE /api/note | 移除笔记 | -| 文件夹结构 | GET /api/folder/tree | 查看全库目录结构 | -| 用户信息 | GET /api/user/info | 验证连接状态 | - -**优势**:无头、无 GUI、纯 API,适合被 AI、脚本、自动化流水线调用。 - ---- - -## 二、什么是 PicoClaw? - -PicoClaw 是一款**轻量级 AI 助手**(Go 语言编写),运行在树莓派上,具备: - -- 🧠 **LLM 推理**:通过 API 调用大模型回答问题 -- 🔧 **工具调用**:文件读写、Shell 执行、Web 搜索/抓取 -- ⏰ **定时任务**:Cron 风格的提醒和自动执行 -- 📡 **多通道收发**:微信、Telegram、WhatsApp 等 -- 🧩 **技能扩展**:可安装 GitHub、Halo 博客、天气、浏览器自动化等 -- 💾 **记忆系统**:长期记忆(MEMORY.md)+ 每日笔记(Daily Notes) -- 🔄 **子代理**:Spawn 并行处理复杂任务 - ---- - -## 三、联动功能全景 - -### 🔹 1. AI 自动写入与管理笔记 - -PicoClaw 可以**直接创建、更新、删除 Obsidian 笔记**,无需人工打开编辑器。 - -**已实现场景:** -- ✅ 喂养记录深度分析 — 5天数据 → AI 分析 → 自动生成分析笔记 → 存入 Obsidian -- ✅ Daily Notes 自动维护 — 每次对话更新当日记录 -- ✅ 对话摘要笔记 — 将长对话总结为结构化笔记 - -**流程:** -``` -用户输入 → AI 分析/思考 → 调用 Obsidian API → 笔记存入对应文件夹 -``` - -### 🔹 2. 智能知识检索与上下文增强 - -AI 可以**读取 Obsidian 笔记作为上下文**,回答问题时参考个人知识库。 - -**场景:** -- 💬 **问答增强**:用户问"上次关于 XX 的结论?" → AI 搜索笔记 → 结合回答 -- 📚 **知识库问答**:把 Obsidian 当作个人 Wiki,AI 做问答助手 -- 🔍 **跨笔记搜索**:关键词搜索全库 → 关联推荐 → 回答 - -### 🔹 3. 定时任务驱动的自动化笔记 - -| 定时任务 | 自动行为 | -|:---|:---| -| 每天 08:00 | 自动创建 Daily Note,附天气/节日信息 | -| 每天 23:59 | 总结当天笔记,归档到周记 | -| 每周日 20:00 | 自动生成周报 | -| 每月 1 日 | 生成月度回顾笔记 | - -### 🔹 4. 多渠道信息汇入(微信→AI→Obsidian) - -``` -微信消息 → PicoClaw → 分析/处理 → Obsidian API → 存入笔记 -``` - -**实际运行中:** -- 📱 **微信喂奶记录** → AI 解析 → Daily Notes 结构化记录 -- 📱 **微信语音/文字** → AI 理解 → 转成笔记/待办 -- 📱 **微信群消息** → AI 筛选 → 存档到 Obsidian - -### 🔹 5. 内容发布流水线(Obsidian→AI→Halo) - -``` -Obsidian 写草稿 → AI 读取 + 润色/格式化 → Halo API 发布文章/瞬间 -``` - -**已打通:** Obsidian(草稿库)→ PicoClaw(处理层)→ Halo 博客(发布) - -### 🔹 6. 数据采集与研究笔记 - -| 数据源 | AI 处理 | Obsidian 输出 | -|:---|:---|:---| -| Web 搜索 | 提取关键信息 | 自动生成研究笔记 | -| 网页抓取 | 总结摘要 | 存入"已读文章"文件夹 | -| 技术文档 | 翻译/整理 | 技术笔记知识库 | -| 播客/视频 | 转录+总结 | 学习笔记 | - -### 🔹 7. 智能提醒与任务管理 - -``` -Obsidian 笔记中待办 → AI 扫描 → Cron 定时提醒 → 微信推送 -``` - -- 扫描特定文件夹笔记中的任务标记 -- 自动设置 Cron 提醒 -- 到时间微信推送 -- 完成后续笔记状态 - -### 🔹 8. 趋势分析与可视化报告 - -AI 从笔记中**提取结构化数据 → 统计分析 → 生成报告笔记** - -**已实现:** 🍼 喂养记录分析 -- 从 5 天 Daily Notes 提取时间、奶量 -- 计算日均、峰值、分布统计 -- 输出结构化分析报告到 Obsidian - -**可扩展:** -- 💰 记账分析(月消费分类统计) -- 🏋️ 运动/健康记录趋势 -- 📖 阅读/学习进度追踪 -- 💊 用药/疫苗记录提醒 - ---- - -## 四、应用场景详解 - -### 场景一:个人知识管理助手 - -| 步骤 | 操作 | 程度 | -|:---|:---|:---:| -| 1. 发链接到微信 | 用户把文章链接发给 AI | 手动 | -| 2. AI 抓取+总结 | PicoClaw 获取内容、提炼要点 | 🟢 自动 | -| 3. 自动存为笔记 | 调用 API 写入文件夹 | 🟢 自动 | -| 4. 关联已有笔记 | AI 搜索相似主题,添加双向链接 | 🟢 自动 | -| 5. 定期回顾 | Cron 推送"本周收藏"回顾 | 🟢 自动 | - -### 场景二:全家人的智能管家 - -**当前已运行:** 宝宝喂养管理 -``` -妈妈微信记录喂奶 → AI 整理到 Daily Notes → -定期分析生成报告 → 优化喂养方案 → 微信推送建议 -``` - -**扩展可能性:** - -| 角色 | 数据 | AI 产出 | -|:---|:---|:---| -| 🍼 宝宝 | 喂奶、睡眠、疫苗 | 成长报告、异常提醒 | -| 👨 自己 | 工作笔记、待办 | 日/周总结 | -| 🏠 家庭 | 采购清单、账单 | 记账统计 | -| 🐱 宠物 | 喂食、疫苗 | 健康日志 | - -### 场景三:DevOps 与开发辅助 - -- 📝 技术排查笔记 → AI 搜索类似问题 → 快速定位 Bug -- 🔧 常用命令存 Obsidian → AI 读取执行 -- 📊 树莓派状态监控 → 写入 Daily Notes → 趋势分析 - -### 场景四:创作与内容输出 - -``` -创作流程: -Obsidian 写草稿 → AI 润色 → Halo 发布文章 - → AI 摘要 → 发布瞬间(Moment) - → AI 生成标题/Tag -``` - -### 场景五:学习与复习系统 - -- 🎯 学习新知识 → AI 生成笔记+问答测试 → 存入 Obsidian -- 🔁 间隔复习 → AI 定期提取问题 → 推送复习提醒 -- 🧩 知识关联 → AI 自动发现笔记间关联 → 建议建立链接 - ---- - -## 五、架构总览 - -``` -┌─────────────────────────────────────────────────┐ -│ 用户触点 │ -│ 📱 微信 │ 💬 Telegram │ 🌐 Web │ 🎤 语音 │ -└──────────────────┬──────────────────────────────┘ - │ -┌──────────────────▼──────────────────────────────┐ -│ PicoClaw (AI 处理层) │ -│ ┌──────────┐ ┌──────────┐ ┌──────────────┐ │ -│ │ LLM 推理 │ │ 工具系统 │ │ 技能扩展 │ │ -│ └──────────┘ └──────────┘ └──────────────┘ │ -│ ┌──────────┐ ┌──────────┐ ┌──────────────┐ │ -│ │ 记忆系统 │ │ Cron定时 │ │ 子代理(Spawn)│ │ -│ └──────────┘ └──────────┘ └──────────────┘ │ -└──────────────────┬──────────────────────────────┘ - │ - ┌─────────┴─────────┐ - ▼ ▼ -┌──────────────────┐ ┌──────────────────┐ -│ 📝 Obsidian 无头 │ │ 🌐 外部服务 │ -│ (Fast Note Sync) │ │ │ -│ ┌──────────────┐ │ │ Halo 博客 API │ -│ │ 知识库/笔记库 │ │ │ Web 搜索/抓取 │ -│ │ Daily Notes │ │ │ GitHub │ -│ │ 分析报告 │ │ │ 天气 API │ -│ │ 技术文档 │ │ │ 浏览器自动化 │ -│ └──────────────┘ │ └──────────────────┘ -└──────────────────┘ -``` - -**核心价值:** Obsidian = **存储层**(可靠、结构化、可浏览) -PicoClaw = **智能层**(理解、分析、决策、执行) -两者通过 REST API 松耦合联动。 - ---- - -## 六、优势与局限 - -### ✅ 优势 - -| 优势 | 说明 | -|:---|:---| -| 🚀 全自动 | AI 自动读写笔记,零人工干预 | -| 🔗 多端联动 | 微信→AI→Obsidian→Halo 全链路打通 | -| 📊 智能分析 | AI 从笔记中提取数据、分析趋势 | -| ⏰ 定时执行 | Cron 驱动自动任务 | -| 🔧 高度可扩展 | 通过技能系统不断新增能力 | -| 💰 低成本 | 运行在树莓派上,无云服务依赖 | - -### ⚠️ 局限 - -| 局限 | 说明 | -|:---|:---| -| 🔌 依赖网络 | API 需网络可达 | -| 📄 文本为主 | 当前不支持图片/附件管理 | -| 🔍 搜索精度 | 仅文件名搜索,未集成全文搜索 | -| ⏳ 异步延迟 | AI 推理需要时间,非实时 | -| 🔐 单用户 | 当前为个人使用场景 | - ---- - -## 七、未来展望 - -### 短期可实现 - -- [ ] AI 自动生成每日摘要笔记 -- [ ] 周报自动生成(从 Daily Notes 汇总) -- [ ] Obsidian 待办扫描 → 微信推送提醒 -- [ ] 文章收藏流程:发链接 → 自动总结存档 - -### 中期目标 - -- [ ] 全文搜索增强(集成 Meilisearch) -- [ ] 图片自动保存到笔记 -- [ ] 多用户支持(家庭共享知识库) -- [ ] 语音输入 → 文字笔记 - -### 长期愿景 - -- [ ] 个人知识图谱(自动发现笔记关联) -- [ ] AI 主动建议 -- [ ] 跨设备实时同步 - ---- - -## 八、实际案例:喂奶记录分析(已落地) - -**目前最完整的联动范例:** - -``` -┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ -│ 微信记录 │→ │ AI 解析 │→ │ 存入 Obsidian│→ │ 分析报告 │ -│ 手写数据 │ │ 结构化存储 │ │ Daily Notes │ │ 自动生成 │ -└──────────┘ └──────────┘ └──────────┘ └──────────┘ -``` - -**效果:** -- 📱 妈妈在微信发喂奶数据 -- 🤖 PicoClaw 实时记录到 Daily Notes -- 📊 5天后自动生成深度分析报告 -- 📝 报告存入 Obsidian,随时查阅 - ---- - -## 总结 - -> **AI + 无头 Obsidian = 一个会思考、能自动写笔记、定时分析、多渠道联动的个人知识中枢** - -PicoClaw 提供智能大脑,Obsidian 提供结构化存储,两者通过 REST API 无缝协作,让笔记从"手动记录"升级为"自动化管理"。当前已跑通**微信 → 记录 → 分析 → 报告**的完整链路,未来可扩展到更多场景。 diff --git a/src/content/posts/建站/Caddy try_files 的目录匹配陷阱.md b/src/content/posts/建站/Caddy try_files 的目录匹配陷阱.md deleted file mode 100644 index f890f97..0000000 --- a/src/content/posts/建站/Caddy try_files 的目录匹配陷阱.md +++ /dev/null @@ -1,118 +0,0 @@ ---- -title: “Caddy try_files” 的目录匹配陷阱 -slug: caddy-tryfiles-trailing-slash -tags: [Caddy, Astro] -published: 2026-07-18 -image: "/assets/images/Caddy.webp" -description: Caddy 的 “try_files ”在处理带结尾斜杠的 URL 时存在一个隐蔽的陷阱——{path}/ 会生成双重斜杠,导致目录匹配失败,最终回退到首页 index.html。本文记录了完整的排查过程和解决方案。 -category: 建站 -draft: false ---- - -# Caddy try_files 的目录匹配陷阱 - -## 问题现象 - -Astro 静态站部署后,点击首页上的文章标题、导航链接时页面**没有任何跳转**。但直接输入 URL 或刷新可以正常打开页面。 - -类似问题也出现在同用 Caddy 代理的 VitePress 站点上。 - -## 环境 - -| 项 | 值 | -|:---|:---| -| Web 服务器 | Caddy 2 | -| 前端框架 | Astro 5 + Swup(客户端路由) | -| 静态结构 | `posts/文章名/index.html` | -| Caddy 配置 | 初始用 `try_files {path} {path}/ /index.html` | - -## 排查过程 - -### 第一步:确认文件存在 - -```bash -ls -la /home/pi/www/Astro_site/posts/生活/周末愉快/index.html -``` - -文件存在且完整(61932 bytes)。 - -### 第二步:对比 HTTP 响应 - -用 curl 请求文章页,检查 Content-Length: - -```bash -curl -s -D - -o /dev/null http://localhost:8070/posts/生活/周末愉快/ -Content-Length: 95284 -``` - -首页 size 是 95284,文章页 size 应该是 61932。**文章页请求返回的 Content-Length 跟首页一致**,说明 Caddy 返回了首页的 HTML。 - -### 第三步:确认文件差异 - -```bash -# 首页 -wc -c /home/pi/www/Astro_site/index.html # 95284 - -# 文章页 -wc -c /home/pi/www/Astro_site/posts/生活/周末愉快/index.html # 61932 -``` - -## 根因分析 - -Caddy 的 `try_files` 指令按顺序尝试**文件路径**,都不存在则 fallback。 - -对于请求 `/posts/生活/周末愉快/`: - -``` -try_files {path} {path}/ /index.html -``` - -| 步骤 | 表达式 | 实际路径 | 结果 | -|:---|:---|:---|:---:| -| 1 | `{path}` | `/posts/生活/周末愉快/` | ❌ 这是一个目录,不是文件 | -| 2 | `{path}/` | `/posts/生活/周末愉快//` | ❌ 双重斜杠,找不到 | -| 3 | `/index.html` | 兜底返回首页 | ✅ 但内容不对 | - -**关键问题**:`try_files` 只检查**文件**是否存在,不识别目录。当 URL 已带结尾斜杠时,`{path}/` 会拼接出双重斜杠,目录下的 `index.html` 永远匹配不到。 - -## 解决方案 - -将 `{path}/` 改为 `{path}index.html`: - -```caddy -:8070 { - root * /home/pi/www/Astro_site - file_server - try_files {path} {path}index.html /index.html -} -``` - -URL 已经以 `/` 结尾,直接追加 `index.html` 拼出正确路径: - -| 步骤 | 表达式 | 实际路径 | 结果 | -|:---|:---|:---|:---:| -| 1 | `{path}` | `/posts/生活/周末愉快/` | ❌ 目录,不是文件 | -| 2 | `{path}index.html` | `/posts/生活/周末愉快/index.html` | ✅ 正确匹配! | - -### 验证 - -```bash -curl -s -D - -o /dev/null http://localhost:8070/posts/生活/周末愉快/ -Content-Length: 61932 # ✅ 正确! -``` - -## 原理总结 - -这个问题很隐蔽: - -1. **Astro / VitePress 等现代 SSG** 采用目录结构输出:`posts/post-name/index.html`,URL 为 `/posts/post-name/` -2. **Caddy 的 `try_files`** 检查的是文件路径,即使路径指向目录也不会自动查找 `index.html`——这是 `file_server` 的职责 -3. **`{path}/` 不会自动补 `index.html`**,只是简单加 `/`,遇到已有斜杠的 URL 就变成了 `//` - -如果 URL **不带**结尾斜杠(如 `/posts/post-name`),`{path}/` 会正确补全为 `/posts/post-name/`,Caddy 的 `file_server` 识别为目录后自动查找 `index.html`。但 URL **带**结尾斜杠时,这个机制就失效了。 - -## 排查清单(给有类似问题的人) - -1. ✅ `try_files` 配置 —— 是不是用了 `{path}/` 而不是 `{path}index.html` -2. ✅ 用 `curl` 对比 Content-Length —— 看子页面请求返回的是否是首页内容 -3. ✅ 检查客户端路由库(Swup / Vue Router)初始化是否正确 diff --git a/src/content/posts/建站/Zensical博客完全上手指南.md b/src/content/posts/建站/Zensical博客完全上手指南.md deleted file mode 100644 index 3504af3..0000000 --- a/src/content/posts/建站/Zensical博客完全上手指南.md +++ /dev/null @@ -1,259 +0,0 @@ ---- -title: Zensical 博客完全上手指南:从写作到部署 -published: 2026-06-14 -description: 一篇带你全面了解 Zensical 博客引擎的文章,涵盖项目结构、文章撰写、导航配置、构建部署等完整流程。 -image: "" -tags: [Zensical, 博客, Markdown, 教程] -category: 建站 -draft: false ---- -# Zensical 博客完全上手指南:从写作到部署 - -Zensical 是一个基于 Rust 构建的静态站点生成器,语法和主题继承自 Material for MkDocs,但采用更高效的 Rust 引擎编译。本文带你从零开始掌握 Zensical 博客的日常操作。 - -## 项目结构总览 - -一个典型的 Zensical 项目看起来是这样的: - -``` -test-site/ -├── zensical.toml ← 博客配置文件(导航、插件、主题) -├── docs/ ← 内容目录(所有文章) -│ ├── index.md ← 首页 -│ ├── archive.md ← 归档页 -│ ├── tech-thoughts/ ← 分类文件夹 -│ │ ├── index.md -│ │ ├── 文章一.md -│ │ └── 文章二.md -│ ├── journal/ -│ │ ├── index.md -│ │ └── ... -│ └── moments/ -├── site/ ← 构建输出(无需手动修改) -├── stylesheets/ -│ └── extra.css ← 自定义样式 -└── javascripts/ - └── extra.js ← 自定义脚本 -``` - -所有文章都是标准的 **Markdown 文件**,放在 `docs/` 下按分类建立的文件夹中。`site/` 目录是构建产物,部署时直接指向它即可。 - -## 写一篇新文章 - -### 第一步:创建 Markdown 文件 - -在对应的分类文件夹下新建 `.md` 文件,例如: - -``` -docs/tech-thoughts/Docker入门教程.md -``` - -### 第二步:编写内容与元数据 - -Zensical 支持 YAML front matter 来定义文章的元信息: - -```markdown ---- -title: Docker 入门教程 -slug: docker-guide-2026 -tags: [Docker, Linux, 教程] -date: 2026-06-01 -description: 一篇面向初学者的 Docker 使用指南 ---- - -# Docker 入门教程 - -正文从这里开始... -``` - -**常用元数据字段:** - -| 字段 | 必填 | 说明 | -|:---|:---:|:---| -| `title` | ✅ | 文章标题 | -| `slug` | ❌ | URL 友好标识(不写则用文件名) | -| `tags` | ❌ | 标签列表,如 `[Docker, Linux]` | -| `date` | ❌ | 发布日期 | -| `updated` | ❌ | 更新日期,配合 `git-revision-date-localized` 插件使用 | - -### 第三步:注册导航(关键步骤) - -编辑 `zensical.toml`,在 `nav` 中找到对应分类,添加新文章: - -```toml -nav = [ - { "首页" = "index.md" }, - { "技术思考" = [ - # 👇 新增一行 - { "Docker 入门教程" = "tech-thoughts/Docker入门教程.md" }, - { "已有文章" = "tech-thoughts/已有文章.md" }, - ]}, -] -``` - -> **重要**:不注册导航,文章仍可通过 URL 直接访问,但不会出现在侧边栏中。 - -## 编辑与删除文章 - -**编辑**:直接打开 `.md` 文件修改内容,保存即生效(开发模式自动刷新)。 - -**删除**:两步操作——① 删除 `.md` 文件;② 从 `zensical.toml` 的 `nav` 中移除对应条目。 - -**重命名**:如果改了文件名,记得同时更新 `zensical.toml` 中的路径。 - -## 构建与预览 - -### 本地开发预览(热更新) - -```bash -cd ~/test-site -~/zensical-env3/bin/zensical serve --dev-addr 0.0.0.0:8000 -``` - -打开 `http://localhost:8000`,修改文件后页面会自动刷新。 - -### 生产构建 - -```bash -cd ~/test-site -~/zensical-env3/bin/zensical build -``` - -构建完成后,`site/` 目录就是完整的静态网站,可以直接部署到任何 Web 服务器。 - -## Markdown 常用写法 - -Zensical 支持标准 Markdown 语法加上丰富的扩展: - -```markdown -**加粗** *斜体* ~~删除线~~ `行内代码` - -[链接文字](https://example.com) - -![图片说明](/assets/images/xxx.jpg) - -> 引用文字 - -- 无序列表 -1. 有序列表 - -| 表头1 | 表头2 | -|:---|:---| -| 内容 | 内容 | -``` - -### 特殊语法 - -**提示框(Admonition):** - -```markdown -::: tip 小提示 -这里是提示内容 - -::: - -::: warning 注意 -这里是警告内容 -::: - -``` - -**代码注释气泡:** - -````markdown -```python -# (1) 鼠标悬停查看说明 -print("hello") -``` -{ .annotate } -1. 这是对代码的详细解释 -```` - -**内容标签页(Tabs):** - -```markdown -=== "方式一" - 第一种方法的内容 - -=== "方式二" - 第二种方法的内容 -``` - -**数学公式(KaTeX):** - -```markdown -行内公式 $E=mc^2$ - -独立公式: -$$ -\int_{-\infty}^{\infty} e^{-x^2} dx = \sqrt{\pi} -$$ -``` - -**图标支持:** - -```markdown -:octicons-heart-fill-24: -:fontawesome-brands-github: -:simple-raspberrypi: -``` - -## 分类与导航管理 - -### 添加新分类 - -1. 在 `docs/` 下创建新文件夹,如 `docs/projects/` -2. 在该文件夹下创建一个 `index.md` 作为分类概览页(可选但推荐) -3. 在 `zensical.toml` 的 `nav` 中添加新导航条目: - -```toml -nav = [ - { "项目" = [ - { "项目概览" = "projects/index.md" }, - { "项目一" = "projects/project-one.md" }, - ]}, -] -``` - -### 调整导航顺序 - -`nav` 列表中的顺序决定侧边栏的显示顺序,调整条目位置即可。 - -## 常用操作一览 - -| 操作 | 方法 | -|:---|:---| -| 写新文章 | 建 `.md` 文件 + 更新 `zensical.toml` 导航 | -| 修改文章 | 直接编辑 `.md` 文件 | -| 删除文章 | 删 `.md` 文件 + 从导航移除 | -| 预览 | `zensical serve` | -| 构建 | `zensical build` | -| 改样式 | 编辑 `stylesheets/extra.css` | -| 加功能 | 写 JS 放 `javascripts/`,在配置中注册 | - -## 部署上线 - -将 `site/` 目录部署到 Web 服务器即可。以 Nginx 为例: - -```nginx -server { - listen 80; - server_name your-domain.com; - root /path/to/test-site/site; - index index.html; - - location / { - try_files $uri $uri/ =404; - } -} -``` - -之后每次构建完运行 `sudo systemctl reload nginx` 即可生效。 - -## 总结 - -Zensical 的核心工作流可以概括为三句话: - -> **写好 Markdown → 配好导航 → 构建部署** - -它没有复杂的管理后台,没有数据库依赖,所有的「管理」就是编辑文件和配置。一旦上手,你会发现这种质朴的方式反而特别高效和可控 🦞 diff --git a/src/content/posts/建站/Zensical图标与扩展功能指南.md b/src/content/posts/建站/Zensical图标与扩展功能指南.md deleted file mode 100644 index 70f3235..0000000 --- a/src/content/posts/建站/Zensical图标与扩展功能指南.md +++ /dev/null @@ -1,560 +0,0 @@ ---- -title: Zensical 图标与扩展功能完全指南 -published: 2026-06-19 -image: "" -tags: [zensical, blog, mkdocs, 教程] -category: 建站 -draft: false ---- -# Zensical 图标与扩展功能完全指南 - -Zensical 基于 Material for MkDocs,内置了大量开箱即用的功能。本文介绍图标使用和常用扩展功能(Zensical 称其为 "extensions")。 - -## 一、图标与 Emoji - -### 内置图标集 - -Zensical 自带 **10,000+ 个图标**,分为以下集合: - -| 图标集 | 前缀示例 | 来源 | -|---|---|---| -| **Lucide** | `lucide/smile` | 默认推荐,与 Zensical 原生集成 | -| **Material Design** | `material/clock-fast` | Google Material 图标 | -| **FontAwesome** | `fontawesome/brands/youtube` | 免费版 FA6 | -| **Octicons** | `octicons/heart-fill-24` | GitHub 图标 | -| **Simple Icons** | `simple-icons/raspberrypi` | 品牌图标 | - -### 配置 - -```toml -# zensical.toml -[project.markdown_extensions.attr_list] -[project.markdown_extensions.pymdownx.emoji] -``` - -### 使用 Emoji - -```markdown -:smile: :rocket: :tada: :memo: :eyes: :sparkles: -``` - -效果:😄 🚀 🎉 📝 👀 ✨ - -### 使用图标 - -用 `:` 包裹,路径中的 `/` 替换为 `-`: - -```markdown -:fontawesome-regular-face-laugh-wink: -:fontawesome-brands-youtube: -:octicons-heart-fill-24: -:material-clock-fast: -:simple-icons-raspberrypi: -``` - -### 带颜色 - -```markdown -:fontawesome-brands-youtube:{ .youtube } -``` - -配合 `extra.css`: - -```css -.youtube { color: #EE0F0F; } -``` - -### 带动画 - -```css -@keyframes heart { - 0%, 40%, 80%, 100% { transform: scale(1); } - 20%, 60% { transform: scale(1.15); } -} -.heart { animation: heart 1000ms infinite; } -``` - -```markdown -:octicons-heart-fill-24:{ .heart } -``` - -### 图标配置(主题元素) - -```toml -[project.theme.icon] -logo = "lucide/smile" -previous = "fontawesome/solid/angle-left" -next = "fontawesome/solid/angle-right" -``` - -可配置的图标位:`logo`、`menu`、`search`、`close`、`top`、`edit`、`view`、`repo`、`previous`、`next`、`tag`、`admonition` - ---- - -## 二、Admonitions(提示块/标注) - -### 配置 - -```toml -[project.markdown_extensions.admonition] -[project.markdown_extensions.pymdownx.details] -[project.markdown_extensions.pymdownx.superfences] -``` - -### 基本用法 - -```markdown -::: info -这是 note 提示的内容。 - -::: - -::: warning -这是 warning 提示的内容。 -::: - -``` - -### 支持的类型 - -| 类型 | 用途 | -|---|---| -| `note` | 普通提示 | -| `abstract` / `summary` / `tldr` | 摘要 | -| `info` / `todo` | 信息 | -| `tip` / `hint` / `important` | 提示 | -| `success` / `check` / `done` | 成功 | -| `question` / `help` / `faq` | 疑问 | -| `warning` / `caution` / `attention` | 警告 | -| `failure` / `fail` / `missing` | 失败 | -| `danger` / `error` | 危险 | -| `bug` | 漏洞 | -| `example` | 示例 | -| `quote` / `cite` | 引用 | - -### 自定义标题 - -```markdown -::: info 自定义标题 -内容... -::: - -``` - -### 无标题 - -```markdown -::: info -内容...(无标题无图标) -::: - -``` - -### 可折叠 - -```markdown -??? note "点击展开" - 折叠内容... - -???+ note "默认展开" - 折叠内容...(加号 = 默认展开) -``` - -### 嵌套 - -```markdown -::: info 外层 -外层内容 - -!!! warning "内层" - 内层内容 -::: - -``` - -### 自定义图标 - -```toml -[project.theme.icon.admonition] -note = "octicons/tag-16" -warning = "octicons/alert-16" -tip = "octicons/squirrel-16" -danger = "octicons/zap-16" -``` - ---- - -## 三、按钮 - -### 配置:需要 `attr_list` - -```toml -[project.markdown_extensions.attr_list] -``` - -### 普通按钮 - -```markdown -[订阅 Newsletter](#){ .md-button } -``` - -### 主按钮(实心填色) - -```markdown -[开始使用](#){ .md-button .md-button--primary } -``` - -### 带图标的按钮 - -```markdown -[发送 :fontawesome-solid-paper-plane:](#){ .md-button } -``` - ---- - -## 四、代码块 - -### 配置 - -```toml -[project.markdown_extensions.pymdownx.highlight] -anchor_linenums = true -line_spans = "__span" -pygments_lang_class = true -[project.markdown_extensions.pymdownx.inlinehilite] -[project.markdown_extensions.pymdownx.snippets] -[project.markdown_extensions.pymdownx.superfences] -``` - -### 带标题 - -````markdown -``` python title="hello.py" -def greet(name): - print(f"Hello, {name}!") -``` -```` - -### 行高亮 - -````markdown -``` python hl_lines="2 4" -line 1 -line 2 # 高亮 -line 3 -line 4 # 高亮 -``` -```` - -### 代码注解 - -````markdown -``` python -def greet(name): - print(f"Hello, {name}!") # (1)! -``` - -1. 这里是注解内容,会显示为 tooltip -```` - -### 行号显示 - -在 `features` 中添加: - -```toml -features = ["content.code.copy", "content.code.select", "content.code.annotate"] -``` - -### 嵌入外部文件 - -```markdown ---8<-- "path/to/file.py" -``` - ---- - -## 五、内容标签页 - -### 配置 - -```toml -[project.markdown_extensions.pymdownx.tabbed] -alternate_style = true -``` - -### 使用 - -```markdown -=== "Python" - ``` python - print("Hello!") - ``` - -=== "JavaScript" - ``` js - console.log("Hello!"); - ``` -``` - ---- - -## 六、网格卡片 - -### 配置 - -```toml -[project.markdown_extensions.attr_list] -[project.markdown_extensions.md_in_html] -``` - -### 列表式卡片网格 - -```markdown -
- -- :fontawesome-brands-html5: __HTML__ 内容与结构 -- :fontawesome-brands-js: __JavaScript__ 交互 -- :fontawesome-brands-css3: __CSS__ 样式 - -
-``` - -### 复杂卡片 - -```markdown -
- -- :material-clock-fast:{ .lg .middle } __5 分钟上手__ - --- - 快速安装并开始使用 - [:octicons-arrow-right-24: 开始](#) - -- :fontawesome-brands-markdown:{ .lg .middle } __纯 Markdown__ - --- - 专注于内容,生成响应式静态站 - [:octicons-arrow-right-24: 参考](#) - -
-``` - -### 通用网格(可混排不同类型) - -```markdown -
- -::: info -左侧卡片 - -::: - -::: warning -右侧卡片 - -::: - -
-``` - ---- - -## 七、文本格式 - -### 配置 - -```toml -[project.markdown_extensions.pymdownx.caret] -[project.markdown_extensions.pymdownx.keys] -[project.markdown_extensions.pymdownx.mark] -[project.markdown_extensions.pymdownx.tilde] -``` - -### 高亮 / 下划线 / 删除线 - -```markdown -- ==高亮文本== -- ^^下划线文本^^ -- ~~删除线文本~~ -``` - -### 上下标 - -```markdown -- H~2~O -- A^T^A -``` - -### 键盘按键 - -```markdown -++ctrl+alt+del++ -++cmd+v++ -++shift+f10++ -``` - ---- - -## 八、Mermaid 图表 - -### 配置 - -```toml -[project.markdown_extensions.pymdownx.superfences] -custom_fences = [ - {name = "mermaid", class = "mermaid", format = "!!python/name:zensical.extensions.fence_mermaid.format"} -] -``` - -### 使用 - -````markdown -``` mermaid -graph LR - A[开始] --> B{是否错误?} - B -->|是| C[调试] - C --> B - B -->|否| D[成功!] -``` -```` - -支持:流程图、时序图、类图、状态图、甘特图、饼图等。 - ---- - -## 九、数学公式(KaTeX) - -### 配置 - -```toml -[project.markdown_extensions.arithmatex] -generic = true - -# extra_javascript 添加 -extra_javascript = [ - "https://unpkg.com/katex@0/dist/katex.min.js", - "https://unpkg.com/katex@0/dist/contrib/auto-render.min.js", - "javascripts/katex.js" -] -extra_css = [ - "https://unpkg.com/katex@0/dist/katex.min.css" -] -``` - -### 使用 - -```markdown -行内公式:$\cos x = \sum_{k=0}^{\infty}\frac{(-1)^k}{(2k)!}x^{2k}$ - -块级公式: -$$ -\cos x = \sum_{k=0}^{\infty}\frac{(-1)^k}{(2k)!}x^{2k} -$$ -``` - ---- - -## 十、任务列表 - -### 配置 - -```toml -[project.markdown_extensions.pymdownx.tasklist] -custom_checkbox = true -``` - -### 使用 - -```markdown -- [x] 已完成任务 -- [ ] 未完成任务 -- [ ] 待办事项 -``` - ---- - -## 十一、工具提示(Tooltips) - -无需额外配置,直接用链接语法: - -```markdown -[Hover me](https://example.com){ title="我是提示文字" } -``` - -或者使用参考式链接: - -```markdown -[Hover me][example] - -[example]: https://example.com "我是提示文字" -``` - ---- - -## 十二、脚注 - -```markdown -这是一段带脚注的文字。[^1] - -[^1]: 这里是脚注内容。 -``` - ---- - -## 十三、完整配置参考 - -```toml -[project] -extra_css = ["stylesheets/extra.css"] -extra_javascript = [ - "https://unpkg.com/katex@0/dist/katex.min.js", - "https://unpkg.com/katex@0/dist/contrib/auto-render.min.js", - "javascripts/katex.js" -] - -[project.markdown_extensions] -attr_list = {} -md_in_html = {} -admonition = {} -toc = {permalink = true} - -[project.markdown_extensions.pymdownx.highlight] -anchor_linenums = true -line_spans = "__span" -pygments_lang_class = true - -[project.markdown_extensions.pymdownx.inlinehilite] -[project.markdown_extensions.pymdownx.snippets] -[project.markdown_extensions.pymdownx.superfences] -[project.markdown_extensions.pymdownx.tabbed] -alternate_style = true -[project.markdown_extensions.pymdownx.caret] -[project.markdown_extensions.pymdownx.mark] -[project.markdown_extensions.pymdownx.tilde] -[project.markdown_extensions.pymdownx.keys] -[project.markdown_extensions.pymdownx.tasklist] -custom_checkbox = true -[project.markdown_extensions.pymdownx.details] -[project.markdown_extensions.pymdownx.emoji] - -[project.theme] -features = [ - "content.code.copy", - "content.code.select", - "content.code.annotate", - "content.tabs.link", - "content.footnote.tooltips" -] -``` - ---- - -## 附:图标速查 - -| 图标集 | Markdown 用法 | 主题配置写法 | -|---|---|---| -| Lucide | `:lucide-smile:` | `lucide/smile` | -| Material | `:material-clock-fast:` | `material/clock-fast` | -| FontAwesome | `:fontawesome-brands-github:` | `fontawesome/brands/github` | -| Octicons | `:octicons-heart-16:` | `octicons/heart-16` | -| Simple Icons | `:simple-icons-raspberrypi:` | `simple-icons/raspberrypi` | - -> 完整图标浏览:https://zensical.org/docs/authoring/icons-emojis/#included-icon-sets diff --git a/src/content/posts/建站/vitepress-blog-guide.md b/src/content/posts/建站/vitepress-blog-guide.md deleted file mode 100644 index 9116b0a..0000000 --- a/src/content/posts/建站/vitepress-blog-guide.md +++ /dev/null @@ -1,457 +0,0 @@ ---- -title: VitePress 博客从零到上手完全指南 -published: 2026-06-28 -image: "" -tags: [教程, VitePress, 博客] -category: 建站 -draft: false ---- -你已经顺利安装了 VitePress 并看到了默认主页,但下一步该做什么?怎么发布文章?怎么让它像个真正的博客?这篇文章会手把手带你走完整个过程。 - - - -## 什么是 VitePress? - -VitePress 是 Vue 团队开发的静态站点生成器,用 Markdown 写内容,构建后生成纯 HTML 站点。它的特点: - -- **极快** —— 基于 Vite,开发服务器秒启 -- **Markdown 优先** —— 写文章就是写 `.md` 文件 -- **默认主题** —— 开箱即用的文档风格 -- **可扩展** —— 可以用 Vue 组件自定义 - -虽然官方定位是「文档工具」,但由于它灵活的文件路由和主题系统,很多人用它搭建个人博客。 - ---- - -## 第一步:认识你的项目结构 - -安装完 VitePress 后,你的项目目录大概是这样的: - -``` -my-blog/ -├── .vitepress/ # VitePress 配置目录 -│ └── config.mjs # 主配置文件(关键!) -├── node_modules/ # 依赖包 -├── package.json # 项目配置 -└── index.md # 首页文件 -``` - -> `docs/` 目录:如果你用 `vitepress init` 时选择了嵌套在 `docs/` 下,那么以上文件会放在 `docs/` 文件夹内。原理是一样的。 - -### 关键文件说明 - -**`index.md`** —— 就是你现在看到的默认主页。它的内容由 Markdown 的 frontmatter(文件头部的 `---` 之间的 YAML 数据)控制,决定了主页的布局、标题、按钮等。 - -**`.vitepress/config.mjs`** —— 整个站点的配置中枢。包括站点标题、描述、主题、导航栏、侧边栏等都在这里设置。 - ---- - -## 第二步:配置站点,让它看起来像你的 - -打开 `.vitepress/config.mjs`,你会看到类似这样的内容: - -```js -import { defineConfig } from 'vitepress' - -export default defineConfig({ - title: '我的博客', - description: '记录思考和成长' -}) -``` - -这只是最基本的配置。让我给你一个更完整的配置示例: - -```js -import { defineConfig } from 'vitepress' - -export default defineConfig({ - // 站点基础信息 - title: '时之刃的小站', - description: '个人博客,记录技术与生活', - - // 美化 URL(去掉 .html 后缀) - cleanUrls: true, - - // 主题配置 - themeConfig: { - // 网站 logo - logo: '/logo.png', - - // 导航栏 - nav: [ - { text: '首页', link: '/' }, - { text: '博客', link: '/blog/' }, - { text: '关于', link: '/about' }, - ], - - // 社交链接 - socialLinks: [ - { icon: 'github', link: 'https://github.com/yourname' } - ], - - // 页脚 - footer: { - message: '用 VitePress 构建', - copyright: 'Copyright © 2026 时之刃' - } - } -}) -``` - -保存后,刷新浏览器就能看到变化。 - ---- - -## 第三步:创建你的第一篇文章 - -这可能是最大的疑问:VitePress 的**文章就是 `.md` 文件**。你把 Markdown 文件放在项目目录下,它就是一个页面。 - -### 推荐的文章目录结构 - -``` -my-blog/ -├── index.md # 首页 -├── blog/ # 博客文章目录 -│ ├── index.md # 博客列表页(可选) -│ ├── my-first-post.md # 第一篇文章 -│ └── vitepress-guide.md # 第二篇文章 -└── about.md # 关于页 -``` - -### 写一篇文章 - -创建 `blog/my-first-post.md`,内容如下: - -```markdown ---- -title: 我的第一篇博客文章 -date: 2026-06-28 -tags: - - 随笔 ---- - -这是用 VitePress 写的第一篇文章! - -## 为什么写博客 - -记录自己的思考,分享学到的知识。 - -## Markdown 语法示例 - -**加粗**、*斜体*、~~删除线~~ - -### 代码块 - -```python -print('Hello, VitePress!') -``` - -### 图片 - -![描述文字](/assets/images/photo.jpg) - -### 链接 - -[访问 GitHub](https://github.com) -``` - -关键点:**frontmatter**(两个 `---` 之间的内容)为文章添加元数据。你可以定义 `title`、`date`、`tags`、`author` 等任意字段,后续可以在主题中读取使用。 - -### 文章头部字段建议 - -```yaml ---- -title: 文章标题 # 必填 -date: 2026-06-28 # 建议有,方便排序 -tags: # 标签,方便分类 - - VitePress - - 教程 -description: 文章简介 # 可选,SEO 用 -author: 时之刃 # 可选 -cover: /assets/images/cover.jpg # 可选,封面图 ---- -``` - ---- - -## 第四步:让文章能被人找到 —— 配置导航和侧边栏 - -文章创建好了,但别人怎么访问呢?你需要告诉 VitePress 这些页面在哪里。 - -### 方法一:导航栏直接链接 - -在 `.vitepress/config.mjs` 的 `nav` 中添加: - -```js -nav: [ - { text: '首页', link: '/' }, - { text: '博客', link: '/blog/my-first-post' }, // 直接链接到文章 -] -``` - -但这样每写一篇就要改一次配置,不方便。 - -### 方法二:侧边栏(推荐博客用) - -更好的方案是用侧边栏展示文章列表: - -```js -themeConfig: { - sidebar: { - '/blog/': [ // 只对 /blog/ 路径生效 - { - text: '文章列表', - items: [ - { text: '我的第一篇博客文章', link: '/blog/my-first-post' }, - { text: 'VitePress 入门指南', link: '/blog/vitepress-guide' }, - ] - } - ] - } -} -``` - -这样访问 `/blog/` 路径下的页面时,左侧会自动显示文章列表。 - -### 方法三:手动创建博客列表页 - -在 `blog/index.md` 中手动编写文章目录: - -```markdown -# 博客 - -## 2026 年 - -- [VitePress 博客从零到上手完全指南](/blog/vitepress-guide) - 2026-06-28 -- [我的第一篇博客文章](/blog/my-first-post) - 2026-06-27 -``` - -虽然需要手动更新,但胜在自由排版,可以按年份、标签分组展示。 - ---- - -## 第五步:进阶美化 —— 让博客更好看 - -### 启用搜索功能 - -VitePress 内置了全文搜索(基于 minisearch),无需额外配置,只需在主题配置中启用: - -```js -themeConfig: { - search: { - provider: 'local' - } -} -``` - -### 使用自定义主题 - -官方默认主题偏文档风格。要让博客更像博客,你有几个选择: - -1. **自己微调** —— 用 CSS 覆盖默认样式 -2. **使用社区主题** —— 搜索 `vitepress-blog` 或 `vuepress-theme-blog` 等 -3. **使用 @vuepress/theme-blog** —— 这是 VuePress 2 的博客主题,如果 VitePress 不满足需求可以考虑迁移 - -社区上比较流行的 VitePress 博客主题有: -- [vitepress-blog-pure](https://github.com/CodeSleep/vitepress-blog-pure) —— 简洁的博客主题 -- [vitepress-theme-website](https://github.com/airene/vitepress-theme-website) —— 个人网站风格 - -### 添加评论系统 - -可以用免费的 [Giscus](https://giscus.app/)(基于 GitHub Discussions): - -1. 在 GitHub 仓库开启 Discussions -2. 安装 Giscus GitHub App -3. 在 VitePress 页面中嵌入 Giscus 组件 - ---- - -## 第六步:图片和资源管理 - -图片放在项目的 `public/` 目录下(需要手动创建): - -``` -my-blog/ -└── public/ - └── images/ - ├── logo.png - └── photo.jpg -``` - -在 Markdown 中引用: - -```markdown -![我的图片](/assets/images/photo.jpg) -``` - -也可以放在文章同级目录(相对路径): - -```markdown -![图片](/assets/images/photo.jpg) -``` - ---- - -## 第七步:发布到互联网 - -VitePress 是静态站点,构建后会生成 `dist/` 文件夹(或你自定义的输出目录),里面全是 HTML/CSS/JS 文件。你可以把它部署到几乎任何托管平台。 - -### 构建命令 - -```bash -npm run docs:build -# 或 -npx vitepress build -``` - -构建完成后,把 `dist/` 目录的内容上传到服务器或托管平台即可。 - -### 免费部署方案 - -| 平台 | 特点 | 适合 | -|:---|:---|:---| -| **GitHub Pages** | 免费,和 Git 完美集成 | 技术用户 | -| **Netlify** | 免费,自动构建,支持自定义域名 | 个人博客 | -| **Vercel** | 免费,速度快,和 Git 集成 | 个人博客 | -| **Cloudflare Pages** | 免费,全球 CDN | 追求速度 | - -### GitHub Pages 部署步骤 - -1. 在 GitHub 创建仓库(如 `username.github.io`) -2. 将代码推送到仓库 -3. 在仓库 Settings → Pages 中选择部署分支和目录 -4. 或者用 GitHub Actions 自动构建: - -在项目根目录创建 `.github/workflows/deploy.yml`: - -```yaml -name: Deploy VitePress site - -on: - push: - branches: [main] - -jobs: - deploy: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: 20 - - run: npm install - - run: npm run docs:build - - uses: peaceiris/actions-gh-pages@v3 - with: - github_token: ${{ secrets.GITHUB_TOKEN }} - publish_dir: .vitepress/dist -``` - -以后每次 `git push`,GitHub Actions 会自动构建并部署。 - -### 自己的服务器部署 - -如果你有自己的服务器(比如像我一样用树莓派): - -```bash -# 本地构建 -npm run docs:build - -# 将 dist 目录上传到服务器 -scp -r .vitepress/dist user@your-server:/var/www/blog/ - -# 或用 nginx 配置 -# server { -# listen 80; -# server_name your-domain.com; -# root /var/www/blog; -# index index.html; -# } -``` - ---- - -## 完整示例:一个最小可用的博客配置 - -最后,给你一个可以直接用的完整配置和文件结构: - -**项目结构** -``` -my-blog/ -├── .vitepress/ -│ └── config.mjs -├── public/ -│ └── images/ -├── blog/ -│ ├── index.md -│ ├── my-first-post.md -│ └── vitepress-guide.md -├── index.md -├── about.md -└── package.json -``` - -**.vitepress/config.mjs** -```js -import { defineConfig } from 'vitepress' - -export default defineConfig({ - title: '我的博客', - description: '用文字记录世界', - cleanUrls: true, - - themeConfig: { - nav: [ - { text: '首页', link: '/' }, - { text: '博客', link: '/blog/' }, - { text: '关于', link: '/about' }, - ], - - sidebar: { - '/blog/': [ - { - text: '文章列表', - items: [ - { text: '首页', link: '/blog/' }, - ] - } - ] - }, - - socialLinks: [ - { icon: 'github', link: 'https://github.com/yourname' } - ], - - footer: { - message: '用 ❤️ 和 VitePress 构建', - copyright: 'Copyright © 2026' - } - } -}) -``` - -**blog/index.md** -```markdown -# 📝 博客 - -## 2026 年 - -- [VitePress 博客从零到上手完全指南](/blog/vitepress-guide) (2026-06-28) -- [我的第一篇博客文章](/blog/my-first-post) (2026-06-27) -``` - ---- - -## 小结 - -VitePress 博客的核心思路就是: - -1. **写 `.md` 文件 = 发表文章** -2. **配置导航/侧边栏 = 让文章被找到** -3. **构建并部署 = 发布到互联网** - -没有复杂的后台管理系统,没有数据库,一切以文件为中心。这正是静态博客的魅力所在 —— 简单、快速、可控。 - -如果你想探索更多,可以看看 VitePress 官方文档的 [配置参考](https://vitepress.dev/reference/site-config) 和 [默认主题](https://vitepress.dev/reference/default-theme-config),里面有很多实用的功能等着你发掘。 - -祝你写博愉快!📝 diff --git a/src/content/posts/建站/vitepress_teek主题用法.md b/src/content/posts/建站/vitepress_teek主题用法.md deleted file mode 100644 index 7aa8216..0000000 --- a/src/content/posts/建站/vitepress_teek主题用法.md +++ /dev/null @@ -1,162 +0,0 @@ ---- -title: VitePress Teek 主题用法 -published: 2026-06-28 -image: "" -tags: [VitePress, Teek] -category: 建站 -draft: false ---- -好的,我来教你整个项目的结构和 Teek 主题的正确用法! - -## 一、项目结构解析 - -你的项目应该长这样: - -``` -vitepress/ ← 项目根目录(cd 到这里) -├── .vitepress/ -│ ├── config.mts ← ★ 核心配置文件 -│ ├── theme/ -│ │ ├── index.ts ← Teek 主题入口 -│ │ └── style.css ← 自定义样式 -│ ├── cache/ ← 缓存(自动生成) -│ └── dist/ ← 构建输出(自动生成) -├── docs/ ← 源文件目录(config 里 srcDir: 'docs' 指定) -│ ├── index.md ← 首页 -│ ├── about.md ← 关于页 -│ ├── blog/ -│ │ ├── index.md ← 博客列表页 -│ │ ├── posts/ ← 文章按分类放在子目录 -│ │ │ ├── 建站/ ← 博客搭建相关 -│ │ │ ├── Linux/ ← Linux/树莓派 -│ │ │ ├── AI/ ← AI 相关 -│ │ │ ├── 教程/ ← 技术教程 -│ │ │ ├── 思考/ ← 随笔感悟 -│ │ │ └── 生活/ ← 日常记录 -│ │ └── tags/ ← 标签 -│ └── public/ ← 静态资源(图片等) -└── node_modules/ ← 依赖包 -``` - -**关键点:** 配置文件 `.vitepress/` **必须**在项目根目录下,`docs/` 只是放源文件的地方。 - ---- - -## 二、日常操作命令 - -### 📝 写文章 - -直接在对应的子目录下新建 `.md` 文件即可: - -```bash -# 比如新建一篇 Linux 相关的文章 -touch docs/blog/Linux/我的Linux文章.md -``` - -### 🖥️ 本地预览写作 - -```bash -cd /home/tianxuetao/桌面/vitepress - -# 启动开发服务器(实时预览改动) -npx vitepress dev -``` - -### 🏗️ 构建/发布 - -```bash -cd /home/tianxuetao/桌面/vitepress - -# 构建生成静态文件 -npx vitepress build - -# 预览构建结果 -npx vitepress preview -``` - -**⚠️ 注意:** `cd` 必须到 `vitepress/`(包含 `.vitepress` 的那个目录),不是 `docs/`! - ---- - -## 三、Teek 主题配置说明 - -你的 `config.mts` 配置了这些功能: - -```typescript -const teekConfig = defineTeekConfig({ - // 导航栏 - nav: [ - { text: '首页', link: '/' }, - { text: '博客', link: '/blog/' }, - { text: '关于', link: '/about' }, - ], - - // 侧边栏(文章列表+分类) - sidebar: { ... }, - - // 页脚 - footer: { message: '...', copyright: '...' }, - - // 首页大横幅(已关闭) - banner: { enabled: false }, - - // GitHub 链接 - socialLinks: [{ icon: 'github', link: '...' }], -}) -``` - -### 如何调整导航栏? - -编辑 `config.mts` 里的 `nav` 数组: - -```typescript -nav: [ - { text: '首页', link: '/' }, - { text: '博客', link: '/blog/' }, - { text: '标签', link: '/blog/tags/' }, // 可以新增 - { text: '关于', link: '/about' }, - { text: 'GitHub', link: 'https://github.com/xxx' }, // 外部链接 -] -``` - -### 如何给新文章加到侧边栏? - -编辑 `config.mts` 里的 `sidebar`: - -```typescript -sidebar: { - '/blog/': [ - { - text: '博客文章', - items: [ - { text: '我的新文章', link: '/blog/建站/我的新文章' }, // 新增这里 - { text: '博客到底可以用来做什么', link: '/blog/建站/博客到底可以用来做什么' }, - // ... - ] - }, - ] -} -``` - -不过你的项目已经装了 `vitepress-plugin-sidebar-resolve` 插件(从构建日志可以看到),它可以**自动生成侧边栏**,不需要手动维护!如果你想要自动化的,我帮你改一下配置。 - ---- - -## 四、简单记忆 - -| 你要做什么 | 命令 | -|-----------|------| -| 本地写文章预览 | `cd ~/桌面/vitepress && npx vitepress dev` | -| 构建打包 | `cd ~/桌面/vitepress && npx vitepress build` | -| 预览构建结果 | `cd ~/桌面/vitepress && npx vitepress preview` | -| 改导航/侧边栏/主题 | 编辑 `.vitepress/config.mts` | -| 改样式/颜色 | 编辑 `.vitepress/theme/style.css` | -| 加新文章 | 在 `docs/blog/` 下对应分类目录新建 `.md` 文件 | - ---- - -**一句话记住:** 所有命令都在 `vitepress/` 目录下执行,源码在 `docs/` 里,配置在 `.vitepress/` 里。 - -现在你的博客已经可以正常访问了 → **http://localhost:4174** 🎉 - -要不要我帮你把侧边栏改成**自动生成**的?这样你以后写新文章就不用手动去 `config.mts` 里添加了。 \ No newline at end of file diff --git a/src/content/posts/建站/又一个博客站.md b/src/content/posts/建站/又一个博客站.md deleted file mode 100644 index 78a8699..0000000 --- a/src/content/posts/建站/又一个博客站.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: 又一个博客站 -published: 2024-06-01 -image: "" -tags: [博客] -category: 建站 -draft: false ---- -![又一个博客站](/assets/images/又一个博客站图1.webp) - -非常难受,自己的树莓派出问题了,这个小东西还是有些不稳定,不太想折腾了,准备老老实实用我的腾讯云服务器。我之前浪费了大量的精力,搭建了我的 vanblog,但是却没有什么用。之后了,我要把我的这个 vanblog 的博客里面的东西迁移出来,有几篇文章也是花了比较长的时间才写出来的。还是 Obsidian 好用啊,数据完全在本地存储,可控性更高一点。而且手机、电脑三端同步,它总有一个备份的。 diff --git a/src/content/posts/思考/伪需求.md b/src/content/posts/思考/伪需求.md deleted file mode 100644 index 4aa30c5..0000000 --- a/src/content/posts/思考/伪需求.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: 伪需求 -published: 2025-03-01 -image: "" -tags: [思考] -category: 思考 -draft: false ---- -我们会发现,很多时候在消费主义的影响下,存在着一些伪需求。本来是不需要的东西,在各类消费信息的刺激下,也会不断产生一种购买错觉,我个人认为这就是一种伪需求。其实个人的设备已经是可以实现这些功能的,但是依然会觉得买了新设备会更好。但是如果真的购买之后,便会发现自己好像实际上没有此类需求的 -立足现有条件,充分发挥其功用,如无必要,勿增实体。例如电子书阅读器,其本身主要起到一个方便阅读的效果,减少携带的纸质书籍。同时以更低的价格阅读,性能迭代并不是很大,所以说要尽可能的延长其使用时间才是正确的。Kindle使用了4年时间,由于书源下载越来越困难,再加之国产替代就不再使用了,但确实是属于物尽其用了,读了很多书,很有收获。 diff --git a/src/content/posts/AI/关于AI的思考.md b/src/content/posts/思考/关于AI的思考.md similarity index 98% rename from src/content/posts/AI/关于AI的思考.md rename to src/content/posts/思考/关于AI的思考.md index ce2cdb6..b632197 100644 --- a/src/content/posts/AI/关于AI的思考.md +++ b/src/content/posts/思考/关于AI的思考.md @@ -3,7 +3,7 @@ title: 关于 AI 的思考 published: 2026-06-05 image: "" tags: [AI, 思考] -category: AI +category: 思考 draft: false --- AI 发展越来越快,各式各样的 claw 龙虾🦞层出不穷、日新月异,真的是令人眼花缭乱,AI 工具很多,我们该怎么使用,这是一个新的问题。 diff --git a/src/content/posts/建站/博客到底可以用来做什么.md b/src/content/posts/思考/博客到底可以用来做什么.md similarity index 100% rename from src/content/posts/建站/博客到底可以用来做什么.md rename to src/content/posts/思考/博客到底可以用来做什么.md diff --git a/src/content/posts/思考/奥卡姆剃刀原则.md b/src/content/posts/思考/奥卡姆剃刀原则.md index 8a9b9f7..f54de92 100644 --- a/src/content/posts/思考/奥卡姆剃刀原则.md +++ b/src/content/posts/思考/奥卡姆剃刀原则.md @@ -14,4 +14,5 @@ draft: false 有的时候选择很多,但是确实要想一想,自己想要什么,要解决什么问题,有没有必要增加,如果能够依托既有的设备也能够解决,那么就没有必要。只有认识到这个问题,才能不会出现无用无效的物品或者努力,![[伪需求]]这个和我之前想的[[伪需求]]不谋而合,想买的东西很多,想实现的事情也很多。自己想法也就变的越来越多。 -就如电子书阅读器,NAS这些东西好像是自己特别需要,但实际上却没有那么适合的使用场景。我似乎并不需要这样一个设备去存储我的那么多文件照片。 +就如电子书阅读器,NAS这些东西好像是自己特别需要,但实际上却没有那么适合的使用场景。我似乎并不需要这样一个设备去存储我的那么多文件照片。我们会发现,很多时候在消费主义的影响下,存在着一些伪需求。本来是不需要的东西,在各类消费信息的刺激下,也会不断产生一种购买错觉,我个人认为这就是一种伪需求。其实个人的设备已经是可以实现这些功能的,但是依然会觉得买了新设备会更好。但是如果真的购买之后,便会发现自己好像实际上没有此类需求的 +立足现有条件,充分发挥其功用,如无必要,勿增实体。例如电子书阅读器,其本身主要起到一个方便阅读的效果,减少携带的纸质书籍。同时以更低的价格阅读,性能迭代并不是很大,所以说要尽可能的延长其使用时间才是正确的。Kindle使用了4年时间,由于书源下载越来越困难,再加之国产替代就不再使用了,但确实是属于物尽其用了,读了很多书,很有收获。 diff --git a/src/content/posts/教程/LaTeX数学公式使用教程.md b/src/content/posts/技术学习/LaTeX数学公式使用教程.md similarity index 91% rename from src/content/posts/教程/LaTeX数学公式使用教程.md rename to src/content/posts/技术学习/LaTeX数学公式使用教程.md index 85f25be..2dd2dde 100644 --- a/src/content/posts/教程/LaTeX数学公式使用教程.md +++ b/src/content/posts/技术学习/LaTeX数学公式使用教程.md @@ -1,12 +1,12 @@ --- -title: "\U0001F4D0 LaTeX 数学公式使用教程" +title: "LaTeX 数学公式使用教程" published: 2026-06-12 image: "" tags: [教程, 工具] category: 教程 draft: false --- -# 📐 LaTeX 数学公式使用教程 +# LaTeX 数学公式使用教程 > 本站已启用 KaTeX 引擎,支持在文章中使用 LaTeX 语法书写数学公式。 @@ -72,7 +72,7 @@ $\sqrt[n]{x}$ |:---|:---| | `\frac{a}{b}` | $\frac{a}{b}$ | | `\sqrt{x}` | $\sqrt{x}$ | -| `\sqrt[n]{x}$ | $\sqrt[n]{x}$ | +| `\sqrt[n]{x}` | $\sqrt[n]{x}$ | ### 求和、积分、极限 @@ -86,21 +86,17 @@ $\prod_{i=1}^{n} i = n!$ | 语法 | 效果 | |:---|:---| | `\sum_{i=1}^{n} i` | $\sum_{i=1}^{n} i$ | -| `\int_{a}^{b} f(x) \, dx$ | $\int_{a}^{b} f(x) \, dx$ | -| `\lim_{x \to 0} \frac{\sin x}{x} = 1$ | $\lim_{x \to 0} \frac{\sin x}{x} = 1$ | -| `\prod_{i=1}^{n} i = n!$ | $\prod_{i=1}^{n} i = n!$ | - -=== "行内(单 $)" - - 块级模式(`$$`)会让上下标显示在正上方/正下方: - $$ +| `\int_{a}^{b}f(x)\dx` | $\int_{a}^{b} f(x) \, dx$ | +| `\lim_{x \to 0} \frac{\sin x}{x} = 1` | $\lim_{x \to 0} \frac{\sin x}{x} = 1$ | +| `\prod_{i=1}^{n} i = n!` | $\prod_{i=1}^{n} i = n!$ | +块级模式(`$$`)会让上下标显示在正上方/正下方: +$$ \sum_{i=1}^{n} i \quad \int_{a}^{b} f(x) \, dx - $$ +$$ + 行内模式(`$`)会让上下标显示在右上/右下: -=== "行内(单 $)" - 行内模式(`$`)会让上下标显示在右上/右下: - $\sum_{i=1}^{n} i \quad \int_{a}^{b} f(x) \, dx$ +$ \sum_{i=1}^{n} i \quad \int_{a}^{b} f(x) \, dx $ ### 希腊字母 diff --git a/src/content/posts/教程/Linux学习/Linux英语词汇速查手册.md b/src/content/posts/技术学习/Linux英语词汇速查手册.md similarity index 100% rename from src/content/posts/教程/Linux学习/Linux英语词汇速查手册.md rename to src/content/posts/技术学习/Linux英语词汇速查手册.md diff --git a/src/content/posts/教程/Linux学习/nocoDB的使用.md b/src/content/posts/技术学习/nocoDB的使用.md similarity index 100% rename from src/content/posts/教程/Linux学习/nocoDB的使用.md rename to src/content/posts/技术学习/nocoDB的使用.md diff --git a/src/content/posts/教程/Linux学习/树莓派云服务器的使用总结.md b/src/content/posts/技术学习/树莓派云服务器的使用总结.md similarity index 100% rename from src/content/posts/教程/Linux学习/树莓派云服务器的使用总结.md rename to src/content/posts/技术学习/树莓派云服务器的使用总结.md diff --git a/src/content/posts/教程/Linux学习/Obsidian-树莓派.md b/src/content/posts/教程/Linux学习/Obsidian-树莓派.md deleted file mode 100644 index 7acc503..0000000 --- a/src/content/posts/教程/Linux学习/Obsidian-树莓派.md +++ /dev/null @@ -1,251 +0,0 @@ ---- -title: Obsidian + 树莓派 -published: 2026-06-01 -image: "" -tags: [Obsidian, 树莓派] -category: "" -draft: false ---- -好问题!Obsidian + 树莓派是个经典组合,核心就三类需求:**同步、发布、自动化**。我帮你梳理从简单到进阶的完整方案。 - ---- - -## 🧭 方案总览 - -``` -┌──────────────────────────────────────────────────────────┐ -│ 你的设备 Pi 3B (中枢) 其他设备 │ -│ ┌─────────┐ ┌──────────┐ ┌─────────┐ │ -│ │ 笔记本 │◄────►│ Syncthing│◄────►│ 手机 │ 同步 │ -│ │ Obsidian│ │ │ │ Obsidian│ │ -│ └─────────┘ │ Gitea │ └─────────┘ │ -│ │ │ Nginx │ │ │ -│ ▼ │ Hugo │ ▼ │ -│ 编辑笔记 ──────►│ 静态网站 │◄──── 访问博客 │ -│ └──────────┘ │ -│ 发布 & Web查看 │ -└──────────────────────────────────────────────────────────┘ -``` - ---- - -## 🔄 Tier 1:同步(核心,首选) - -### 方案 A:Syncthing — ⭐ 最推荐 - -> 去中心化 P2P,所有设备自动同步,**不需要 Pi 一直开着也能同步**,Pi 当常在线中继。 - -``` -设备A ←────→ Pi 3B (始终在线) ←────→ 设备B - ↕ ↕ - └──────────→ 直接P2P ←─────────────┘ (局域网时直连,更快) -``` - -**Pi 上装 Syncthing:** -```bash -sudo apt install syncthing -systemctl --user enable syncthing -systemctl --user start syncthing -# Web面板: http://pi-ip:8384 -``` - -**Obsidian 端:** 无需插件,Obsidian 直接打开被 Syncthing 同步的文件夹即 Vault。 - -| 维度 | 评价 | -|------|------| -| 内存 | ~30MB | -| 实时性 | 秒级同步 | -| 冲突处理 | 自动备份冲突文件 | -| 离线支持 | ✅ 离线编辑,联网后自动合并 | -| iOS 支持 | ⚠️ 需 Möbius Sync(第三方) | -| Android | ✅ Syncthing-Fork | - ---- - -### 方案 B:Git + Gitea — 适合程序员 - -> 每次修改自动 commit,版本历史可追溯,可回滚任意历史版本。 - -``` -Obsidian ──(Git插件)──► Gitea (Pi 3B) ──► 其他设备 git pull -``` - -**Pi 上装 Gitea:** -```bash -# Gitea 单二进制,Go 写的,~80MB -wget https://dl.gitea.com/gitea/1.22/gitea-1.22-linux-arm64 -O gitea -chmod +x gitea -# 配合 SQLite 零依赖运行 -``` - -**Obsidian 端:** 安装 **Obsidian Git** 插件 → 设置自动 commit/push 间隔。 - -| 维度 | 评价 | -|------|------| -| 内存 | ~80MB | -| 版本历史 | ✅ 完整 Git 历史 | -| 冲突处理 | ✅ Git merge,可手动解决 | -| 学习成本 | 有一点 | - ---- - -### 方案 A+B 组合(最佳实践) - -> **Syncthing 负责实时同步,Git 负责版本历史。** 各取所长: -> - Syncthing → 日常流畅同步 -> - Obsidian Git → 每小时自动备份到 Gitea,防误删 - ---- - -## 🌐 Tier 2:发布笔记为网站 - -写完笔记想分享给不装 Obsidian 的人?Pi 充当静态网站服务器。 - -### 方案:Obsidian → Hugo/MkDocs → Nginx - -``` -Obsidian Vault - │ - ▼ (obsidian-export 转换 MD 链接) - 纯 Markdown - │ - ▼ (Hugo 构建) - 静态 HTML - │ - ▼ (Nginx on Pi 3B) - https://notes.yourdomain.com -``` - -**Pi 上操作流程:** - -```bash -# 1. 装 Hugo(单二进制,~20MB,Go 写的) -sudo apt install hugo - -# 2. 准备 Hugo 站点 -hugo new site ~/notes-site -cd ~/notes-site - -# 3. 安装一个 Obsidian 友好主题(支持 [[wikilinks]]) -git clone https://github.com/XXX/obsidian-hugo-theme themes/obsidian - -# 4. 软链接 Obsidian Vault(或用脚本导出) -ln -s /home/pi/sync/obsidian-vault ~/notes-site/content - -# 5. 构建 -hugo --minify - -# 6. Nginx 指向 public/ 目录 -# 7. 设个 cron 每小时自动重建 -``` - -**Obsidian 端的本地图处理:** 用 Obsidian 的 `obsidian-export` 工具转换 `[[wikilinks]]`,或直接选择兼容 Hugo 的笔记格式(用相对路径 `![](attachments/img.png)`)。 - -| 内存占用 | ~50MB(Nginx + Hugo) | -|:---|:---| -| 发布延迟 | cron 定时构建,有延迟 | -| 搜索 | Hugo 内置静态搜索 | -| 双向链接图 | 需要额外 JS 库支持 | - ---- - -## 🤖 Tier 3:自动化(进阶玩法) - -Pi 不只是一个存储,还可以帮你「加工」笔记: - -### 思路 1:笔记 → 定时提醒 - -``` -Obsidian 写 TODO.md - │ - ▼ Pi cron 每10分钟解析 - 提取 - [ ] 带日期的事项 - │ - ▼ Telegram Bot 推送 - "📌 明天 9:00 记得交报告" -``` - -### 思路 2:Readwise → Obsidian - -Pi 运行一个脚本,定时拉取 Readwise/Matter 高亮,写入 Obsidian Vault 的 `Inbox/` 目录,Syncthing 自动同步到所有设备。 - -### 思路 3:语音笔记转文字 - -手机录音 → Syncthing 同步到 Pi → 调用 OpenAI Whisper API(或本地 whisper.cpp)→ 转 Markdown 插回 Vault。 - -### 思路 4:AI 自动打标签/摘要 - -Pi 检测 Vault 中新增笔记 → 调大模型 API → 补 YAML frontmatter 标签和摘要。 - -> 这些自动化脚本可以用 Python 写,按需运行不常驻内存,对 Pi 3B 很友好。 - ---- - -## 📱 手机端特别考虑 - -| 平台 | 推荐方案 | | | | -| ----------- | ----------------------------------- | --- | ------- | ------------------------------------------- | -| **Android** | Syncthing-Fork + Obsidian Mobile,完美 | | **iOS** | Möbius Sync(付费) 或 Remotely Save 插件 + WebDAV | - -如果不用 Syncthing,还有一个轻量替代: - -### 备选:WebDAV + Remotely Save - -```bash -# Pi 上用 Caddy 一行配置开启 WebDAV -# Obsidian 装 Remotely Save 插件 -``` - -Caddyfile: -``` -notes.yourdomain.com { - route /dav/* { - basicauth { - user $2a$... - } - webdav /vault { - root /home/pi/obsidian-vault - } - } -} -``` - -> 适合 iOS 用户,但 WebDAV 效率不如 Syncthing。 - ---- - -## 🎯 我的推荐组合 - -``` -┌────────────────────────────────────────────┐ -│ 核心同步 Syncthing ~30MB │ -│ 版本备份 Gitea + Git插件 ~80MB │ -│ 网站发布 Hugo + Nginx ~50MB │ -│ 服务监控 Uptime Kuma ~60MB │ -│ SSL反向代理 Nginx Proxy Manager ~50MB │ -├────────────────────────────────────────────┤ -│ 总内存 ~270MB │ -│ Pi 3B 剩余 ~650MB │ -└────────────────────────────────────────────┘ -``` - ---- - -## 🔰 最简起步三步走 - -如果你只想先跑起来,就三步: - -```bash -# 1. Pi 上装 Syncthing -sudo apt install syncthing - -# 2. 电脑/手机也都装 Syncthing,共享 Vault 文件夹 - -# 3. Obsidian 打开那个文件夹,结束 -``` - -**零成本、零维护、不掉链子。** - ---- - -你对哪个方向最感兴趣?同步先跑起来,还是想一步到位把博客发布也搭了?我可以给你每一步的详细命令。 diff --git a/src/content/posts/教程/Linux学习/Ubuntu-入门指南.md b/src/content/posts/教程/Linux学习/Ubuntu-入门指南.md deleted file mode 100644 index d96e9ff..0000000 --- a/src/content/posts/教程/Linux学习/Ubuntu-入门指南.md +++ /dev/null @@ -1,404 +0,0 @@ ---- -title: Ubuntu 入门指南 -published: 2026-06-10 -image: "" -tags: [Linux, Ubuntu, 教程] -category: Linux学习 -draft: false ---- -好,你已经装好了 Ubuntu 26.04!我来给一些**实用到骨子里**的入门帮助,直接上手能用。 - ---- - -## 🚀 第一步:系统更新 - -装完系统第一件事,开终端(`Ctrl+Alt+T`)跑: - -```bash -sudo apt update && sudo apt upgrade -y -sudo apt full-upgrade -y -``` - -> 26.04 刚出,更新包不少,一次搞定。 - ---- - -## 📦 装软件的正确姿势 - -### 用 App Center(图形化) -Ubuntu 26.04 的 App Center 同时支持 Snap 和 Deb,搜一下点安装就行。 - -### 用命令行(更快) - -```bash -# 日常工具 -sudo apt install -y htop neofetch git curl wget vim - -# 压缩解压 -sudo apt install -y unzip p7zip-full - -# 多媒体 -sudo apt install -y ffmpeg vlc - -# 截图工具 -sudo apt install -y flameshot -``` - -### 安装闭源驱动(ThinkPad 需要) - -```bash -# NVIDIA 驱动(如果你有独显) -sudo ubuntu-drivers autoinstall - -# 或者用 CUDA 原生支持 -sudo apt install -y nvidia-cuda-toolkit -``` - ---- - -## ⚡ 系统调优(ThinkPad 专属) - -```bash -# 安装 TLP(笔记本电源管理神器) -sudo apt install -y tlp tlp-rdw -sudo systemctl enable tlp -sudo systemctl start tlp - -# 查看电池状态 -tlp-stat -b -``` - ---- - -## 🔐 TPM 全盘加密相关 - -Ubuntu 26.04 支持 TPM 全盘加密。如果你安装时没启用,现在也可以手动加密家目录: - -```bash -# 加密家目录(可选) -sudo apt install -y ecryptfs-utils -sudo ecryptfs-migrate-home -u $USER -``` - ---- - -## 🧰 日常救命命令 - -```bash -# 系统信息 -neofetch # 系统概览(有浣熊Logo) -lsb_release -a # 版本详情 -uname -r # 内核版本 -gnome-shell --version # GNOME 版本(50!) - -# 系统状态 -htop # 进程管理器 -df -h # 磁盘空间 -free -h # 内存 -systemctl list-units --failed # 查看失败服务 - -# 网络 -ip a # 查看IP -ping -c 4 8.8.8.8 # 测网络通不通 -``` - ---- - -## 🐍 开发环境(一行搞定) - -```bash -# Python -sudo apt install -y python3 python3-pip python3-venv - -# Node.js -sudo apt install -y nodejs npm - -# Docker(26.04 内核新,Docker 兼容性好) -sudo apt install -y docker.io docker-compose-v2 -sudo usermod -aG docker $USER -# 注销重新登录生效 - -# VS Code -sudo snap install code --classic -``` - ---- - -## 🎯 必改设置 - -```bash -# 1. 启用防火墙 -sudo ufw enable -sudo ufw status - -# 2. 设置 Ubuntu Pro(个人免费,5台设备) -sudo pro attach # 去 https://ubuntu.com/pro 注册免费 token - -# 3. 加速 apt(换清华源) -sudo sed -i 's/archive.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list -sudo apt update -``` - ---- - -## 🧪 验证你的 26.04 - -跑一下看看: - -```bash -neofetch -``` - -你应该能看到: -- OS: Ubuntu 26.04 LTS x86_64 -- 一只 🦝 **Resolute Raccoon**(坚毅浣熊)的 ASCII 头像 -- GNOME 版本: 50 - ---- - -## 💡 入门三步走建议 - -| 阶段 | 目标 | 操作 | -|:---|:---|:---| -| 🟢 第1天 | 熟悉操作 | 跑上面更新 + 换源 + 装基础软件 | -| 🟡 第1周 | 日常使用 | 装输入法(搜狗/谷歌拼音)、浏览器、办公软件 | -| 🔵 第1月 | 进阶探索 | 学终端、写脚本、玩 Docker | - ---- - -有什么具体方向想问的吗?比如: - -- 🐚 **终端操作** — 常用命令、别名、脚本 -- 🐍 **Python 开发环境搭建** -- 🐳 **Docker 跑服务** -- 🎮 **Steam / Wine 游戏配置** -- 🔧 **ThinkPad 专属优化**(小红点、触控板、Fn键) - -你往哪个方向走,我接着带路 😊 - -好,终端操作是 Ubuntu 的核心战斗力。以下按**必须会 → 日常用 → 效率起飞**三级递进。 - ---- - -## 🟢 第一级:必须会的操作 - -### 目录与文件 - -```bash -pwd # 当前在哪 -ls # 看当前目录 -ls -la # 详细信息(包含隐藏文件) -cd /path/to/dir # 跳转目录 -cd ~ # 回家 -cd .. # 上一级 -cd - # 回上一个目录 - -mkdir folder # 新建文件夹 -mkdir -p a/b/c # 递归创建 -touch file.txt # 新建空文件 -cp a.txt b.txt # 复制 -cp -r dir1 dir2 # 复制目录 -mv a.txt /tmp/ # 移动/重命名 -rm file.txt # 删除文件 -rm -rf folder # 强制删除目录 ⚠️ 慎用 -``` - -### 查看文件内容 - -```bash -cat file.txt # 全部内容(适合短文件) -less file.txt # 分页查看(按 q 退出) -head -20 file.txt # 前20行 -tail -20 file.txt # 后20行 -tail -f file.txt # 实时跟踪追加内容(看日志神器) -``` - -### 查找与搜索 - -```bash -find . -name "*.py" # 找文件 -grep "error" log.txt # 搜索关键词 -grep -r "TODO" ~/project/ # 递归搜索目录 -grep -rn "function" --include="*.go" ./ # 限制文件类型 -``` - -### 权限管理 - -```bash -chmod +x script.sh # 加执行权限 -chmod 755 script.sh # 读写执行 -chown user:group file # 修改拥有者 -``` - ---- - -## 🟡 第二级:日常高频命令 - -### 系统管理 - -```bash -sudo !! # 用 sudo 重复上一条命令(救命神技) -apt search keyword # 搜索软件包 -apt show package # 查看包信息 -snap list # 列出已安装 snap -systemctl status ssh # 查看服务状态 -journalctl -xe # 看系统日志 -reboot # 重启 -poweroff # 关机 -``` - -### 进程管理 - -```bash -ps aux # 所有进程 -ps aux | grep python # 找 Python 进程 -kill PID # 杀进程 -kill -9 PID # 强制杀(最后手段) -pkill name # 按名字杀 -top # 实时进程查看(按 q 退出) -``` - -### 网络 - -```bash -ip a # 看 IP 地址(代替 ifconfig) -ip route # 看路由/网关 -ss -tlnp # 看端口监听(代替 netstat) -curl ifconfig.me # 看公网 IP -wget url # 下载文件 -scp file user@ip:/path/ # 远程复制 -ssh user@ip # SSH 连接 -``` - -### 压缩打包 - -```bash -tar -czvf archive.tar.gz folder/ # 压缩 -tar -xzvf archive.tar.gz # 解压 -unzip file.zip # 解压 zip -zip -r archive.zip folder/ # 压缩为 zip -``` - ---- - -## 🔵 第三级:效率起飞技巧 - -### 1. 别名(少打字) - -```bash -# 编辑 ~/.bashrc 或 ~/.bash_aliases -alias ll='ls -lah' -alias cls='clear' -alias ..='cd ..' -alias gs='git status' -alias ports='ss -tlnp' -alias myip='curl -s ifconfig.me' - -# 生效 -source ~/.bashrc -``` - -### 2. 快捷键(手指记忆) - -| 快捷键 | 作用 | -|:---|:---| -| `Ctrl + C` | 终止当前命令 | -| `Ctrl + D` | 退出终端 | -| `Ctrl + L` | 清屏 | -| `Ctrl + A` | 跳行首 | -| `Ctrl + E` | 跳行尾 | -| `Ctrl + U` | 删光标前所有 | -| `Ctrl + K` | 删光标后所有 | -| `Ctrl + R` | 搜索历史命令 | -| `Ctrl + Z` | 暂停任务(fg 恢复) | -| `↑ / ↓` | 历史命令 | -| `Tab` | 自动补全(按两次列出所有) | - -### 3. 输入输出重定向(管道是灵魂) - -```bash -command > file # 输出写入文件(覆盖) -command >> file # 输出追加到文件 -command 2>&1 # 错误也输出 -command < file # 从文件读取输入 - -# ⭐ 管道 | —— 终端最强大的操作 -ls -la | grep ".go" # 筛选 -ps aux | grep nginx # 找进程 -history | grep docker # 搜历史命令 -cat log.txt | grep error | head -10 # 组合技 - -# 实战:统计 Python 文件数 -find . -name "*.py" | wc -l -``` - -### 4. 历史命令管理 - -```bash -history # 查看历史 -!123 # 运行历史中第123条命令 -!! # 上一条命令 -sudo !! # 用 sudo 重跑上一条 -!$ # 上一条命令的最后一个参数 -``` - -### 5. 一行多命令 - -```bash -cmd1 # 上一条命令的最后一个参数 -``` - -### 5. 一行多命令 - -```bash -cmd1 && cmd2 # cmd1 成功才执行 cmd2 -cmd1 || cmd2 # cmd1 失败才执行 cmd2 -cmd1 ; cmd2 # 不管成功失败都执行 -cmd1 | cmd2 # 管道连接 -``` - ---- - -## 🎯 实战演练:完成这些你就入门了 - -打开终端,跟着敲一遍: - -```bash -# 1. 看看你的系统 -neofetch - -# 2. 建个工作目录 -mkdir -p ~/playground && cd ~/playground - -# 3. 创建文件 -echo "Hello Ubuntu 26.04" > hello.txt -cat hello.txt - -# 4. 手写一个脚本 -cat > myscript.sh << 'EOF' -#!/bin/bash -echo "当前时间: $(date)" -echo "用户: $(whoami)" -echo "系统已运行: $(uptime -p)" -EOF -chmod +x myscript.sh -./myscript.sh - -# 5. 看看效果 -ls -la -grep "时间" myscript.sh -``` - ---- - -## 📖 终极技巧:自己学会任何命令 - -```bash -command --help # 快速帮助 -man command # 详细手册(按 q 退出) -tldr command # 简洁版手册(需安装:sudo apt install tldr) -``` - -> `tldr` 非常推荐 — 它直接给你常用用法示例,不用看冗长的 man 手册。 - ---- diff --git a/src/content/posts/教程/Linux学习/ubuntu系统使用指南-常态更新.md b/src/content/posts/教程/Linux学习/ubuntu系统使用指南-常态更新.md deleted file mode 100644 index 97c80db..0000000 --- a/src/content/posts/教程/Linux学习/ubuntu系统使用指南-常态更新.md +++ /dev/null @@ -1,186 +0,0 @@ ---- -title: ubuntu系统使用指南 常态更新 -published: 2026-06-10 -image: "" -tags: [Linux, Ubuntu, 教程] -category: Linux学习 -draft: false ---- -![Ubuntu 26.04 桌面](/assets/images/ubuntu-2604-desktop.webp) -成功安装上了Ubuntu 26.04,现在一定的时间来进行学习,主要是强化Linux 系统的知识入门,有一台物理上的主机确实会比较方便一些。 -## Ubuntu 系统的安装 -通过 Ventoy 工具拷入镜像安装,在安装过程中对 1TB 的固态硬盘进行分区操作,区分 ext4 文件系统和NTFS 文件系统,这样实现了双系统共存,在BIOS 中设置启动顺序为 Windows 优先。 -## 使用指南 - -配合 Docker 构设一些项目 - -## 扩展应用 - -我从官方文档给你整理了一份完整的 Quartz 5 安装使用指南 👇 - ---- - -## 🪴 Quartz 5 是什么? - -Quartz 是一个**把 Obsidian / Markdown 笔记直接发布成网站的静态站点生成器**,由 jackyzha0 开发,GitHub ⭐12k+。 -**核心卖点:** 你在 Obsidian 里怎么写笔记,网站就长什么样。双向链接、图谱、wikilinks 全部原生支持 -## 📋 前置要求 - -| 要求 | 版本 | -|:---|:---:| -| **Node.js** | ≥ v22 | -| **npm** | ≥ 10.9.2 | -| **Git** | 必需 | - -检查版本: -```bash -node -v -npm -v -git --version -``` - ---- - -## 🚀 安装步骤 - -### 第1步:克隆仓库 - -```bash -git clone https://github.com/jackyzha0/quartz.git -cd quartz -``` - -### 第2步:安装依赖 - -```bash -npm i -``` - -### 第3步:初始化站点 - -```bash -npx quartz create -``` - -这里会问你几个问题: -- **选择模板** — 推荐默认的 -- **设置站点 URL** — 比如 `https://yourname.github.io/law-notes/` -- **是否导入已有内容** — 可选 - -### 第4步:安装模板插件 - -```bash -npx quartz plugin install --from-config -``` - -### 第5步:本地预览 - -```bash -npx quartz build --serve -``` - -打开 `http://localhost:8080` 即可看到效果 ✨ - ---- - -## 📁 项目结构 - -``` -quartz/ -├── content/ ← 📝 你的笔记/文章放这里! -│ ├── index.md ← 首页 -│ └── 劳动法.md -├── quartz.config.ts ← 站点配置 -├── quartz.layout.ts ← 布局配置 -└── public/ ← 静态资源 -``` - -**用法很简单:** 直接把 `.md` 文件丢进 `content/` 文件夹,Quartz 会自动构建成网页。 - ---- - -## 🔧 与 Obsidian 配合使用(最大亮点) - -### 方案 A:把 Quartz 项目放在 Obsidian 保险库里 - -```bash -# 在 Obsidian 保险库目录里克隆 -cd /path/to/your/obsidian-vault -git clone https://github.com/jackyzha0/quartz.git . -``` - -然后在 Obsidian 里直接编辑 `content/` 下的文件,所有功能都支持: - -| 功能 | 说明 | -|:---|:---| -| `[[双向链接]]` | ✅ 自动变成可点击的内部链接 | -| `![[嵌入]]` | ✅ 跨文件嵌入内容 | -| `#标签` | ✅ 自动生成标签页 | -| 图谱视图 | ✅ Graph View | -| 全文搜索 | ✅ 内置 | -| Latex | ✅ 支持 | -| 代码高亮 | ✅ 支持 | - -### 方案 B:内容目录和 Obsidian 保险库分开 - -```bash -# 把 obsidian 笔记软链接到 content 目录 -ln -s /path/to/obsidian/vault ./content -``` - ---- - -## 🚢 部署(免费) - -### GitHub Pages(推荐) - -```bash -# 在 GitHub 新建仓库,然后 -npx quartz sync -``` - -这会将站点部署到 `https://你的用户名.github.io/仓库名/` - -### 其他平台 - -| 平台 | 说明 | -|:---|:---| -| **Cloudflare Pages** | 免费,快 | -| **Netlify** | 免费,自动部署 | -| **Vercel** | 免费,一键部署 | - ---- - -## 📝 配置示例(`quartz.config.ts`) - -```typescript -const config: QuartzConfig = { - configuration: { - pageTitle: "📚 法规知识库", - baseUrl: "yourname.github.io/law-notes", - enableSPA: true, // 单页应用,切换页面不刷新 - enablePopovers: true, // 悬停预览链接内容 - analytics: null, - locale: "zh-CN", // 中文 - }, - plugins: { - // ... 各种插件 - }, -} -``` - ---- - -## 🆚 Quartz vs MkDocs:法规知识库对比 - -| 方面 | Quartz 5 | MkDocs + Material | -|:---|:---:|:---:| -| **上手难度** | ⭐⭐⭐(依赖 Node) | ⭐⭐(Python/pip 即可) | -| **和 Obsidian 集成** | ⭐⭐⭐⭐⭐ 原生级 | ⭐⭐ 需手动转换 | -| **双向链接/图谱** | ✅ 原生支持 | ❌ 不支持 | -| **主题丰富度** | ⭐⭐⭐ 够用 | ⭐⭐⭐⭐⭐ 非常精美 | -| **表格样式** | ⭐⭐⭐ 普通 | ⭐⭐⭐⭐⭐ 优秀 | -| **部署方式** | GitHub Pages 一键 | 任意静态托管 | -| **适合场景** | 个人笔记库转网站 | 正式的文档知识库 | - ---- diff --git a/src/content/posts/教程/Linux学习/树莓派安装Docker.md b/src/content/posts/教程/Linux学习/树莓派安装Docker.md deleted file mode 100644 index e0e3c77..0000000 --- a/src/content/posts/教程/Linux学习/树莓派安装Docker.md +++ /dev/null @@ -1,112 +0,0 @@ ---- -title: 在树莓派安装 Docker -published: 2026-06-02 -image: "" -tags: [树莓派, Docker, 教程] -category: Linux学习 -draft: false ---- -![Docker](/assets/images/Docker安装图1.webp) - -## 操作系统要求 - -要安装 Docker Engine,您需要以下 Raspberry Pi OS 版本之一: - -- Raspberry Pi OS Trixie 13(稳定) -- Raspberry Pi OS Bookworm 12(旧稳定版) -- Raspberry Pi OS Bullseye 11(更旧版本) - -## 安装 Docker - -### 1. 设置 Docker 的 apt 存贮库 - -> **提示** -> -> 由于国内访问 download.docker.com 存在着被屏蔽或访问速度慢等问题,推荐使用 [阿里云](https://mirrors.aliyun.com/) 或 [腾讯云](https://mirrors.tencent.com/) 作为 Docker apt 源。尽量避免直接使用 [Docker官方](https://download.docker.com/) 的 Docker apt 源。 - -```sh -# 卸载旧版本(如果有): -for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do sudo apt-get remove $pkg; done - -# 添加 Docker 官方 GPG key: -sudo apt-get update -sudo apt-get install ca-certificates curl -sudo install -m 0755 -d /etc/apt/keyrings -sudo curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/debian/gpg -o /etc/apt/keyrings/docker.asc -sudo chmod a+r /etc/apt/keyrings/docker.asc - -# 添加仓库到 Apt 源: -echo \ - "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] http://mirrors.aliyun.com/docker-ce/linux/debian \ - $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ - sudo tee /etc/apt/sources.list.d/docker_aliyun.list > /dev/null -sudo apt-get update -``` - -### 2. 安装 Docker 软件包 - -要安装最新版本,请运行: - -```sh -sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -``` - -### 3. 验证 - -通过运行镜像验证安装是否成功 hello-world - -```sh -sudo docker run hello-world -``` - -此命令下载测试映像并在容器中运行它。当容器运行时,它会打印一条确认消息并退出。 - -## 普通用户可操作的 Docker 组 - -推荐执行下面的指令以方便管理。否则每次运行 docker 指令还要加上 sudo,很麻烦。 - -```sh -sudo groupadd docker -sudo usermod -aG docker $USER -newgrp docker -``` - -## 卸载 Docker 引擎 - -1. 卸载 Docker Engine、CLI、containerd 和 Docker Compose 软件包: - -```markdown -sudo apt-get purge docker-ce docker-ce-cli containerd.io docker-compose-plugin -``` - -2. 删除镜像、容器、卷和配置文件: - -```markdown -sudo rm -rf /var/lib/docker -sudo rm -rf /var/lib/containerd -``` - -## 国内加速镜像 pull 失败问题 - -> **注意** -> -> 自 24.06 月初开始,docker 官方 registry 被封禁,国内的 Docker Hub 镜像加速器相继停止服务。如果您已经尝试各种办法但仍未找到可用的加速镜像源,那么可使用本站的源 **将就一下**。 -> -> 为防止本站流量耗尽,该镜像源限制为 **linux系统** + **arm/arm64** 架构的终端可访问,可支持 **树莓派** 及各种 arm 架构的派。*M1-4 架构的 Mac 也可以* - -创建或修改 `/etc/docker/daemon.json` 文件,并重启 `docker` 服务。 - -```sh -sudo mkdir -p /etc/docker -sudo tee /etc/docker/daemon.json <<-'EOF' -{ - "registry-mirrors": ["https://docker.pidoc.cn"] -} -EOF -sudo systemctl daemon-reload -sudo systemctl restart docker -``` - ---- - -中文翻译版以 [英文版](https://www.raspberrypi.com/documentation/) 相同知识授权方式共享: [CC-BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/deed.zh-hans) 。交流 Q群: [498908352](https://qm.qq.com/q/79hHjr9cr0) diff --git a/src/content/posts/教程/Linux学习/树莓派开机启动脚本.md b/src/content/posts/教程/Linux学习/树莓派开机启动脚本.md deleted file mode 100644 index fb7c3d0..0000000 --- a/src/content/posts/教程/Linux学习/树莓派开机启动脚本.md +++ /dev/null @@ -1,63 +0,0 @@ ---- -title: 树莓派设置开机启动脚本 -published: 2026-06-01 -image: "" -tags: [树莓派, Linux, 教程] -category: Linux学习 -draft: false ---- -树莓派有多种加入自定义开机启动的方式。其中的开机启动脚本 `/etc/rc.local` 是一个比较常用的措施,它是其它服务运行之后的最后一个脚本。 - -## 使用方法 - -使用 nano 编辑内容,运行 `sudo nano /etc/rc.local` - -```sh -#!/bin/sh -e -# -# rc.local -# -# This script is executed at the end of each multiuser runlevel. -# Make sure that the script will "exit 0" on success or any other -# value on error. -# -# In order to enable or disable this script just change the execution -# bits. -# -# By default this script does nothing. - -# Print the IP address -_IP=$(hostname -I) || true -if [ "$_IP" ]; then - printf "My IP address is %s\n" "$_IP" -fi - -### 在这里添加你的脚本 ### - -# 下面一行一定要存在 -exit 0 -``` - -编辑完成后,保存并退出。 - -重启服务器,查看脚本是否成功运行。 - -> **备注** -> -> 注意:系统在执行这段代码时使用了 root 用户权限,其环境变量也于树莓派普通用户 `pi` 不同。如执行脚本错误,请注意检查是否是相关原因产生。 - -## 故障排除 - -`/etc/rc.local` 脚本的运行依赖 `rc-local` 服务。在默认情况下树莓派已经启用了 `rc-local` 服务。用户无须进行其它操作。如出现问题请按照以下步骤排查。 - -### 检查 rc-local 服务是否正常 - -运行 `sudo systemctl status rc-local` ,查看服务状态。此命令将输出服务的运行状态以及部分日志。 - -### 检查服务的更多日志 - -运行 `sudo journalctl -u rc-local` ,查看服务的更多日志。 - ---- - -中文翻译版以 [英文版](https://www.raspberrypi.com/documentation/) 相同知识授权方式共享: [CC-BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/deed.zh-hans) 。交流 Q群: [498908352](https://qm.qq.com/q/79hHjr9cr0) diff --git a/src/content/posts/教程/Linux学习/银河麒麟-Ubuntu-系统入门到进阶教程.md b/src/content/posts/教程/Linux学习/银河麒麟-Ubuntu-系统入门到进阶教程.md deleted file mode 100644 index 73cdf73..0000000 --- a/src/content/posts/教程/Linux学习/银河麒麟-Ubuntu-系统入门到进阶教程.md +++ /dev/null @@ -1,612 +0,0 @@ ---- -title: 银河麒麟 Ubuntu 系统入门到进阶教程 -published: 2026-06-07 -image: "" -tags: [教程, Linux, 银河麒麟, Ubuntu, 入门到进阶] -category: Linux学习 -draft: false ---- -# 🐧 银河麒麟 & Ubuntu 系统入门到进阶教程 - -## 📖 目录 - -1. [概述与对比](#1) -2. [基础篇:安装与上手](#2) -3. [基础篇:桌面环境与文件管理](#3) -4. [进阶篇:命令行基础](#4) -5. [进阶篇:包管理与软件安装](#5) -6. [进阶篇:用户与权限管理](#6) -7. [高级篇:服务管理(systemd)](#7-systemd) -8. [高级篇:网络配置](#8) -9. [高级篇:Shell 脚本](#9-shell) -10. [银河麒麟特别篇](#10) -11. [Ubuntu 特别篇](#11-ubuntu) -12. [故障排查与实用技巧](#12) -13. [学习路线图](#13) -14. [推荐学习资源](#14) - ---- - -## 1. 概述与对比 - -| 维度 | 🟢 银河麒麟(KylinOS) | 🟠 Ubuntu | -|:---|:---|:---| -| **开发商** | 麒麟软件有限公司(中国) | Canonical Ltd.(英国) | -| **基础** | 基于 Linux 内核,与 Debian/Ubuntu 兼容 | 基于 Debian 发行版 | -| **最新版** | 银河麒麟桌面版 V10(2403)/ 服务器版 V10 | Ubuntu 24.04 LTS / 22.04 LTS | -| **架构支持** | x86_64、ARM64(鲲鹏/飞腾)、LoongArch | x86_64、ARM64、RISC-V | -| **包管理** | `apt` / `dpkg`(Debian 系兼容) | `apt` / `dpkg` | -| **桌面环境** | UKUI(自研,类 Windows 风格) | GNOME(默认) | -| **应用商店** | 麒麟软件商店 | Ubuntu Software(Snap Store) | -| **适用场景** | 政府、国企、军工、信创环境 | 个人开发者、服务器、云计算、AI | - -> 💡 银河麒麟是国产信创主力,Ubuntu 是全球最流行的 Linux 发行版。两者同为 Deb 系,命令体系高度互通。 - ---- - -## 2. 基础篇:安装与上手 - -### 制作启动盘 - -```bash -# Linux 下写入 U 盘 -sudo dd if=系统镜像.iso of=/dev/sdb bs=4M status=progress && sync -``` -或用 Rufus(Windows)、BalenaEtcher(跨平台)。 - -### 银河麒麟安装 - -- 支持一键安装和高级分区安装 -- 推荐分区:`/` 50GB+, `/home` 剩余空间, `swap` 8~16GB -- 安装过程需激活(正版序列号或试用模式) -- 自带搜狗输入法、WPS Office、奇安信安全卫士 - -### Ubuntu 安装 - -- 支持 Erase and install(傻瓜式)和 Something else(手动分区) -- 推荐分区:`/boot` 1GB(EFI), `/` 50GB+, `/home` 剩余空间, `swap` 8~16GB -- 可选最小安装(Minimal) -- 建议勾选第三方驱动(nvidia、无线网卡) - -### 首次启动 - -```bash -# 通用 -cat /etc/os-release # 查看系统版本 -hostnamectl # 查看主机信息 -uname -a # 查看内核 -free -h # 查看内存 -df -h # 查看磁盘 - -# 麒麟特有 -nkvers # 麒麟内核版本 - -# Ubuntu -lsb_release -a -``` - ---- - -## 3. 基础篇:桌面环境与文件管理 - -### 银河麒麟 UKUI 桌面 - -类 Windows 风格,低学习成本: - -| 操作 | 快捷键 | -|:---|:---| -| 开始菜单 | `Win` | -| 文件管理器 | `Win + E` | -| 锁屏 | `Win + L` | -| 终端 | `Ctrl + Alt + T` | -| 显示桌面 | `Win + D` | - -### Ubuntu GNOME 桌面 - -简洁现代风格: - -| 操作 | 快捷键 | -|:---|:---| -| 活动概览 | `Win` | -| 应用列表 | `Win + A` | -| 终端 | `Ctrl + Alt + T` | -| 锁屏 | `Win + L` | -| 运行命令 | `Alt + F2` | -| 截图 | `Print Screen` | - -### 文件系统结构 - -| 目录 | 用途 | -|:---|:---| -| `/` | 根目录 | -| `/home` | 用户家目录 | -| `/etc` | 系统配置文件 | -| `/var` | 日志、数据库、缓存 | -| `/tmp` | 临时文件(重启清除) | -| `/usr` | 用户程序与数据 | -| `/opt` | 第三方软件 | -| `/boot` | 内核与引导 | -| `/proc` | 进程信息(虚拟文件系统) | -| `/dev` | 设备文件 | - -> 💡 两者文件系统完全一致,均遵循 FHS 标准。 - ---- - -## 4. 进阶篇:命令行基础 - -### 终端 - -- 麒麟:`Ctrl + Alt + T` 或右键「打开终端」 -- Ubuntu:`Ctrl + Alt + T` 或 Activities 搜索 Terminal - -### 文件管理命令 - -```bash -pwd # 当前路径 -ls -la # 详细列表(含隐藏文件) -cd ~/桌面 # 进入桌面目录 -cd .. # 返回上级 -cp -r 源 目标 # 复制目录 -mv 源 目标 # 移动/重命名 -rm -rf 目录 # 删除目录(谨慎!) -mkdir -p a/b/c # 递归创建目录 -touch test.txt # 创建空文件 -cat file.txt # 查看全部内容 -less file.txt # 分页查看(q退出, /搜索) -head -n 20 file.txt # 前20行 -tail -f log.txt # 实时追踪日志 -find /home -name "*.md" # 按名字查找 -grep -r "关键词" /etc # 递归搜索文本 -``` - -### 文本编辑器 - -```bash -nano 文件.txt # 新手友好,Ctrl+O保存,Ctrl+X退出 -vim 文件.txt # 功能强大,i插入,Esc退出,:wq保存退出 -``` - -### 进程管理 - -```bash -ps aux # 所有进程 -top / htop # 实时监控 -kill -9 PID # 强制结束 -killall 进程名 # 按名字结束 -``` - ---- - -## 5. 进阶篇:包管理与软件安装 - -### apt 包管理 - -```bash -sudo apt update # 刷新软件源(定期执行) -sudo apt upgrade # 升级所有包 -sudo apt full-upgrade # 智能升级 -sudo apt install 包名 # 安装 -sudo apt remove 包名 # 卸载(保留配置) -sudo apt purge 包名 # 完全卸载 -sudo apt autoremove # 清理无用依赖 -apt search 关键词 # 搜索 -apt show 包名 # 查看详情 -apt list --installed # 已安装列表 -apt list --upgradable # 可升级列表 -sudo apt autoclean # 清理旧缓存 -sudo apt clean # 清空缓存 -``` - -### dpkg 底层管理 - -```bash -sudo dpkg -i 包.deb # 安装本地包 -sudo dpkg -r 包名 # 卸载 -dpkg -l # 列出所有包 -dpkg -L 包名 # 查看安装路径 -dpkg -S /路径/文件 # 查文件归属 -``` - -### 软件源配置 - -```bash -# 麒麟源 -sudo nano /etc/apt/sources.list -deb http://archive.kylinos.cn/kylin/KYLIN-ALL 10.1 main universe multiverse restricted - -# Ubuntu 换清华源 -sudo sed -i 's/archive.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list - -# Ubuntu PPA -sudo add-apt-repository ppa:deadsnakes/ppa -``` - ---- - -## 6. 进阶篇:用户与权限管理 - -### 用户管理 - -```bash -whoami # 当前用户 -id # 用户/组 ID -sudo useradd -m 用户名 # 创建用户(含家目录) -sudo passwd 用户名 # 设置密码 -sudo usermod -aG sudo 用户名 # 加入 sudo 组 -sudo userdel -r 用户名 # 删除用户及家目录 -``` - -### 文件权限 - -```bash -ls -l 文件 # 查看权限(-rwxr-xr--) - -# 数字法 -chmod 755 script.sh # rwxr-xr-x -chmod 644 readme.txt # rw-r--r-- - -# 字母法 -chmod u+x file # 所有者加执行 -chmod go-w file # 同组/其他去写 - -# 所有者 -sudo chown 用户:组 文件 -sudo chown -R 用户:组 目录 # 递归 -``` - -> ⚠️ 麒麟默认禁用 root,日常用 sudo。Ubuntu 安装时创建的用户自动有 sudo 权限。 - ---- - -## 7. 高级篇:服务管理(systemd) - -### 服务操作 - -```bash -systemctl status 服务名 # 查看状态 -systemctl is-active 服务名 # 是否运行 -systemctl is-enabled 服务名 # 是否自启 -sudo systemctl start 服务名 # 启动 -sudo systemctl stop 服务名 # 停止 -sudo systemctl restart 服务名 # 重启 -sudo systemctl enable 服务名 # 开机自启 -sudo systemctl disable 服务名 # 取消自启 -journalctl -u 服务名 # 查看日志 -journalctl -u 服务名 -f # 实时日志 -journalctl --since "1 hour ago" # 最近1小时 -``` - -### 自定义服务 - -```ini -# /etc/systemd/system/myapp.service -[Unit] -Description=My Python Web Application -After=network.target - -[Service] -Type=simple -User=www-data -WorkingDirectory=/opt/myapp -ExecStart=/usr/bin/python3 /opt/myapp/app.py -Restart=on-failure -RestartSec=5 - -[Install] -WantedBy=multi-user.target -``` - -```bash -sudo systemctl daemon-reload -sudo systemctl enable myapp -sudo systemctl start myapp -``` - -### 定时任务(cron) - -```bash -crontab -e # 编辑定时任务 -crontab -l # 查看 -# 格式:分 时 日 月 周 命令 -0 2 * * * backup.sh # 每天凌晨2点 -*/30 * * * * check.sh # 每30分钟 -@reboot startup.sh # 开机执行 -``` - ---- - -## 8. 高级篇:网络配置 - -### 网络工具 - -```bash -ip addr # IP 地址 -ip link # 网络接口 -ip route # 路由表 -ss -tlnp # TCP 监听端口 -``` - -### 静态 IP(Netplan) - -```yaml -# /etc/netplan/01-netcfg.yaml -network: - version: 2 - renderer: networkd - ethernets: - eth0: - dhcp4: no - addresses: - - 192.168.1.100/24 - gateway4: 192.168.1.1 - nameservers: - addresses: [114.114.114.114, 8.8.8.8] -``` - -```bash -sudo netplan apply # 应用 -sudo netplan try # 测试(超时自动回滚) -``` - -### 防火墙(ufw) - -```bash -sudo ufw status # 查看 -sudo ufw enable # 启用 -sudo ufw allow 22/tcp # 允许 SSH -sudo ufw allow 80 # 允许 HTTP -sudo ufw allow 443 # 允许 HTTPS -sudo ufw deny 23 # 拒绝 Telnet -sudo ufw delete 3 # 删除第3条规则 -``` - -### SSH 远程管理 - -```bash -sudo apt install openssh-server -sudo systemctl enable ssh --now - -ssh-keygen -t ed25519 # 生成密钥 -ssh-copy-id 用户@服务器IP # 上传公钥 -ssh 用户@服务器IP # 连接 -``` - ---- - -## 9. 高级篇:Shell 脚本 - -### 入门 - -```bash -#!/bin/bash -echo "Hello, World!" -echo "当前用户: $(whoami)" -``` - -```bash -chmod +x hello.sh && ./hello.sh -``` - -### 变量与输入 - -```bash -#!/bin/bash -NAME="安安" -echo "名字: ${NAME}" -read -p "请输入: " INPUT -echo "你输入: ${INPUT}" -echo "参数: $0 $1 $# $@" -``` - -### 条件判断 - -```bash -#!/bin/bash -if [ -f "/etc/passwd" ]; then echo "文件存在"; fi -NUM=10 -if [ "$NUM" -gt 5 ]; then echo "大于5"; else echo "小于等于5"; fi -if [ "$STR" = "hello" ] && [ -r "/etc/passwd" ]; then echo "匹配且可读"; fi -``` - -### 循环 - -```bash -#!/bin/bash -for i in 1 2 3; do echo "数字: $i"; done -for file in *.txt; do echo "文件: $file"; done -COUNT=0; while [ "$COUNT" -lt 3 ]; do echo $COUNT; COUNT=$((COUNT+1)); done -while IFS= read -r line; do echo "行: $line"; done < "/etc/hostname" -``` - -### 函数 - -```bash -#!/bin/bash -log_info() { echo "[INFO] $(date '+%H:%M:%S') - $1"; } -log_error() { echo "[ERROR] $1" >&2; } - -check_disk() { - local usage=$(df -h / | tail -1 | awk '{print $5}' | tr -d '%') - if [ "$usage" -gt 80 ]; then log_error "磁盘 ${usage}%"; return 1; - else log_info "磁盘 ${usage}% 正常"; return 0; fi -} -check_disk -``` - ---- - -## 10. 银河麒麟特别篇 - -### 独特优势 - -- 🇨🇳 **信创合规**:支持鲲鹏、飞腾、龙芯、兆芯、海光、申威 -- 🔒 **安全加固**:安全中心、网络审计、USB/外设管控 -- 🖥️ **UKUI 桌面**:Windows 用户零门槛 -- 📦 **应用生态**:WPS、微信、QQ、搜狗输入法预置或一键安装 -- 🛡️ **公安部等保三级认证** - -### 常用工具 - -```bash -nkvers # 内核版本 -kylin_versions # 版本号 -sudo kylin_activate # 激活系统 -kylin_activate_status # 查看激活状态 -kylin_security_center # 安全中心 -kylin_backup_restore # 备份还原 -``` - -### 常见问题 - -| 问题 | 解决 | -|:---|:---| -| 软件源更新失败 | 检查 sources.list URL | -| 激活到期 | 联系采购获取序列号,`sudo kylin_activate` | -| 打印驱动 | 麒麟商店或 `system-config-printer` | -| CrossOver 异常 | 检查容器配置,安装运行库 | - ---- - -## 11. Ubuntu 特别篇 - -### 独特优势 - -- 🌍 **全球社区**:最活跃的 Linux 社区 -- 🐍 **开发首选**:Python、Node.js、Docker、K8s 支持最佳 -- ☁️ **云原生**:AWS/Azure/阿里云首选 Ubuntu Server -- 🤖 **AI/ML**:CUDA、TensorFlow、PyTorch 官方支持 - -### 开发环境搭建 - -```bash -# Python -sudo apt install python3 python3-pip python3-venv -python3 -m venv myenv && source myenv/bin/activate - -# Node.js -sudo apt install nodejs npm -# 或 nvm -curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash - -# Docker -sudo apt install docker.io docker-compose-v2 -sudo systemctl enable docker -sudo usermod -aG docker $USER # 重登生效 - -# Git -sudo apt install git -git config --global user.name "你的名字" -git config --global user.email "你的邮箱" -``` - -### 桌面美化 - -```bash -sudo apt install gnome-tweaks gnome-shell-extensions -sudo apt install yaru-theme-gtk yaru-theme-icon arc-theme papirus-icon-theme -``` - -### 服务器基础配置 - -```bash -sudo apt install openssh-server ufw fail2ban htop curl wget vim git -sudo dpkg-reconfigure --priority=low unattended-upgrades -``` - ---- - -## 12. 故障排查与实用技巧 - -### 系统修复 - -```bash -# GRUB 恢复模式:开机按 Shift/Esc → 高级选项 -sudo apt --fix-broken install # 修复损坏包 -sudo dpkg --configure -a # 重配未完成包 -sudo fsck /dev/sda1 # 文件系统检查 -``` - -### 日志排查 - -```bash -/var/log/syslog # 系统日志(Ubuntu) -/var/log/messages # 系统日志(麒麟) -/var/log/kern.log # 内核日志 -/var/log/auth.log # 认证日志 -/var/log/apt/history.log # 软件安装历史 -journalctl -xe # 最近错误 -journalctl -b # 本次启动 -journalctl -b -1 # 上次启动 -``` - -### 性能监控 - -```bash -top / htop # CPU -free -h # 内存 -vmstat 2 10 # 系统状态 -iostat -x 1 # 磁盘 IO(需 sysstat) -``` - -### 日常维护 - -```bash -# 建议每周 -sudo apt update && sudo apt upgrade -y -sudo apt autoremove -y && sudo apt autoclean -last reboot # 查看重启历史 -``` - ---- - -## 13. 学习路线图 - -``` -🟢 入门(第1~2周) - ├── 安装与桌面操作 - ├── 文件管理器使用 - ├── 基本终端命令 - └── 应用商店安装软件 - -🔵 进阶(第3~6周) - ├── apt 包管理 - ├── 用户与权限 - ├── vim 编辑基础 - ├── 网络配置 - └── 文件系统结构 - -🟣 高级(第2~3个月) - ├── systemd 服务管理 - ├── Shell 脚本编写 - ├── SSH 远程管理 - ├── Docker 容器化 - └── 系统安全加固 - -🔴 专家(第3~6个月) - ├── 内核参数调优 - ├── 性能监控与调优 - ├── 自动化运维(Ansible) - ├── 源码编译与打包 - └── 信创兼容性验证 -``` - ---- - -## 14. 推荐学习资源 - -| 资源 | 类型 | 地址 | -| :------------------ | :--- | :--------------------------- | -| 📖 银河麒麟官方文档 | 官方 | docs.kylinos.com.cn | -| 📖 Ubuntu 官方文档 | 官方 | help.ubuntu.com | -| 📖 Ubuntu 中文社区 | 社区 | ubuntu.cn | -| 📖 鸟哥的 Linux 私房菜 | 书籍 | 经典入门教材 | -| 📖 Linux 命令行大全 | 书籍 | O'Reilly 出版 | -| 🛠️ Linux Command | 在线教程 | linuxcommand.org | -| 🎓 Linux Foundation | 课程 | training.linuxfoundation.org | - ---- - -> 📝 **建议**:先在 Ubuntu 虚拟机练习通用 Linux 技能,再上手银河麒麟体验信创生态。两套技能在手,信创环境与国际开发都能游刃有余。 - -*本笔记由 PicoClaw 生成于 2026-06-07* diff --git a/src/content/posts/生活/不买-NAS-的理由.md b/src/content/posts/生活/不买-NAS-的理由.md deleted file mode 100644 index 6eefa72..0000000 --- a/src/content/posts/生活/不买-NAS-的理由.md +++ /dev/null @@ -1,87 +0,0 @@ ---- -title: 不买 NAS 的理由 -published: 2026-06-08 -image: "" -tags: [NAS, 硬件, 思考] -category: 生活 -draft: false ---- -那我认真给你分析一下——**不买 NAS 的 N 个理由** 🦞 - ---- - -## 1️⃣ 你真的有「刚需」吗? - -NAS 的核心场景是: -- 多设备自动备份(手机/电脑/平板) -- 家庭影音库(Jellyfin/Plex) -- 远程访问文件 -- Docker 跑服务 - -**问问自己:** -- 你现在数据有多少?手机照片定期手动导出到电脑 + 云盘(iCloud/百度/阿里)够不够用? -- 有多少时间是真正需要**在外网访问家里文件**的? -- 是不是只是「觉得应该有一个」而不是「没有就活不下去」? - -> 如果答案都是「好像也不是很需要」,那 NAS 买回来大概率吃灰。 - ---- - -## 2️⃣ 成本算一笔账 - -| 项目 | 价格 | -|:---|:---:| -| NAS 主机(如 DXP4800) | ~1500-2000 元 | -| 硬盘 x2(组 RAID1,4TBx2) | ~1000-1200 元 | -| **合计** | **~2500-3200 元** | - -### 用这笔钱可以干什么: -- ☁️ **iCloud 2TB** × **5 年**(¥816/年 → 4080元,但和家人共享) -- ☁️ **百度网盘超级会员** × **5 年** -- 💾 买几个 **移动硬盘 + 冷备份**,还剩一大半钱 -- 🖥️ 甚至够买一台 **入门台式机/迷你主机**(还带屏幕) - ---- - -## 3️⃣ 云盘够用党 - -| 维度 | 云盘 | NAS | -|:---|:---|:---:| -| 上手难度 | 无门槛 | 需要设置、维护 | -| 访问速度 | 取决于网络 | 内网快,外网看带宽 | -| 数据安全 | 平台可能跑路/审查 | 硬盘坏=数据丢 | -| 维护成本 | 0 | 换硬盘、升级系统、排错 | -| 家人共享 | 简单(共享相册) | 需要教家人用 | - -> **对于大多数家庭,云盘 + 本地移动硬盘双备份,已经足够安全。** - ---- - -## 4️⃣ NAS 不是「一次买完,一劳永逸」 - -- ⚠️ **硬盘会坏** — 3-5年寿命,坏了要换,RAID 不是备份 -- ⚠️ **系统要更新** — DSM/QTS/UNAS OS 隔三差五更新 -- ⚠️ **性能会过时** — 几年后 CPU 不够跑新应用 -- ⚠️ **万一失窃/火灾** — 数据一起没了(云盘反而安全) - ---- - -## 5️⃣ 替代方案(完全免费/低成本的) - -| 需求 | 替代方案 | 成本 | -|:---|:---|:---:| -| 手机照片备份 | Google Photos(高画质免费)/ iCloud | 免费~¥21/月 | -| 文件远程访问 | Tailscale/WireGuard + 旧电脑共享 | 免费 | -| 多设备同步 | Syncthing(P2P同步,无需服务器) | 免费 | -| 家庭影音 | 旧电脑/电视盒子 + Kodi + 移动硬盘 | 已有设备 | -| Docker 跑服务 | 云服务器(轻量云 ¥34/月) | 低 | - ---- - -## 最后的灵魂拷问 🤔 - -> **你现在遇到什么具体问题,是「没有 NAS 就解决不了」的?** - -如果想了半天想不出来,那说明—— - -**NAS 先别买,把钱省下来,等真需要了再下手也不迟。** diff --git a/src/content/posts/生活/记录生活的瞬间.md b/src/content/posts/生活/记录生活的瞬间.md deleted file mode 100644 index 8486ae6..0000000 --- a/src/content/posts/生活/记录生活的瞬间.md +++ /dev/null @@ -1,31 +0,0 @@ ---- -title: 记录生活的瞬间 -published: 2026-05-30 -image: "" -tags: [生活] -category: 生活 -draft: false ---- -# 记录生活的瞬间 - -> 一张照片,一段记忆,一个故事。 - ---- - -有些瞬间,按下快门就变成了永恒。很多时候我们忙忙碌碌,忘了停下来看看身边的美好。 - -今天翻到这张图,觉得光影和构图都还挺有意思的,就顺手记了下来。 - -![记录瞬间](/assets/images/2026-06-12-image.webp) - -*拍于某个寻常的午后* - -我觉得记录的意义在于——**当你回头看的时候,那些模糊的记忆会因为一张照片、一段文字而重新变得鲜活。** - -这也是我做这个博客的初衷之一。不管是用 Obsidian 写笔记,还是在这里发文章,都是想把点点滴滴留下来。 - -以后会多拍,多写,多记录。 - ---- - -*2026年6月12日*