chore: 优化文章结构,把一些之前用AI生成的文章都删除掉了

This commit is contained in:
2026-09-15 19:53:43 +08:00
parent 23484a0433
commit c597427b9a
23 changed files with 14 additions and 3641 deletions
@@ -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 无缝协作,让笔记从"手动记录"升级为"自动化管理"。当前已跑通**微信 → 记录 → 分析 → 报告**的完整链路,未来可扩展到更多场景。
@@ -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)初始化是否正确
@@ -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 → 配好导航 → 构建部署**
它没有复杂的管理后台,没有数据库依赖,所有的「管理」就是编辑文件和配置。一旦上手,你会发现这种质朴的方式反而特别高效和可控 🦞
@@ -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
<div class="grid cards" markdown>
- :fontawesome-brands-html5: __HTML__ 内容与结构
- :fontawesome-brands-js: __JavaScript__ 交互
- :fontawesome-brands-css3: __CSS__ 样式
</div>
```
### 复杂卡片
```markdown
<div class="grid cards" markdown>
- :material-clock-fast:{ .lg .middle } __5 分钟上手__
---
快速安装并开始使用
[:octicons-arrow-right-24: 开始](#)
- :fontawesome-brands-markdown:{ .lg .middle } __纯 Markdown__
---
专注于内容,生成响应式静态站
[:octicons-arrow-right-24: 参考](#)
</div>
```
### 通用网格(可混排不同类型)
```markdown
<div class="grid" markdown>
::: info
左侧卡片
:::
::: warning
右侧卡片
:::
</div>
```
---
## 七、文本格式
### 配置
```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
@@ -1,457 +0,0 @@
---
title: VitePress 博客从零到上手完全指南
published: 2026-06-28
image: ""
tags: [教程, VitePress, 博客]
category: 建站
draft: false
---
你已经顺利安装了 VitePress 并看到了默认主页,但下一步该做什么?怎么发布文章?怎么让它像个真正的博客?这篇文章会手把手带你走完整个过程。
<!-- more -->
## 什么是 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),里面有很多实用的功能等着你发掘。
祝你写博愉快!📝
@@ -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` 里添加了。
@@ -1,11 +0,0 @@
---
title: 又一个博客站
published: 2024-06-01
image: ""
tags: [博客]
category: 建站
draft: false
---
![又一个博客站](/assets/images/又一个博客站图1.webp)
非常难受,自己的树莓派出问题了,这个小东西还是有些不稳定,不太想折腾了,准备老老实实用我的腾讯云服务器。我之前浪费了大量的精力,搭建了我的 vanblog,但是却没有什么用。之后了,我要把我的这个 vanblog 的博客里面的东西迁移出来,有几篇文章也是花了比较长的时间才写出来的。还是 Obsidian 好用啊,数据完全在本地存储,可控性更高一点。而且手机、电脑三端同步,它总有一个备份的。
-10
View File
@@ -1,10 +0,0 @@
---
title: 伪需求
published: 2025-03-01
image: ""
tags: [思考]
category: 思考
draft: false
---
我们会发现,很多时候在消费主义的影响下,存在着一些伪需求。本来是不需要的东西,在各类消费信息的刺激下,也会不断产生一种购买错觉,我个人认为这就是一种伪需求。其实个人的设备已经是可以实现这些功能的,但是依然会觉得买了新设备会更好。但是如果真的购买之后,便会发现自己好像实际上没有此类需求的
立足现有条件,充分发挥其功用,如无必要,勿增实体。例如电子书阅读器,其本身主要起到一个方便阅读的效果,减少携带的纸质书籍。同时以更低的价格阅读,性能迭代并不是很大,所以说要尽可能的延长其使用时间才是正确的。Kindle使用了4年时间,由于书源下载越来越困难,再加之国产替代就不再使用了,但确实是属于物尽其用了,读了很多书,很有收获。
@@ -3,7 +3,7 @@ title: 关于 AI 的思考
published: 2026-06-05
image: ""
tags: [AI, 思考]
category: AI
category: 思考
draft: false
---
AI 发展越来越快,各式各样的 claw 龙虾🦞层出不穷、日新月异,真的是令人眼花缭乱,AI 工具很多,我们该怎么使用,这是一个新的问题。
@@ -14,4 +14,5 @@ draft: false
有的时候选择很多,但是确实要想一想,自己想要什么,要解决什么问题,有没有必要增加,如果能够依托既有的设备也能够解决,那么就没有必要。只有认识到这个问题,才能不会出现无用无效的物品或者努力,![[伪需求]]这个和我之前想的[[伪需求]]不谋而合,想买的东西很多,想实现的事情也很多。自己想法也就变的越来越多。
就如电子书阅读器,NAS这些东西好像是自己特别需要,但实际上却没有那么适合的使用场景。我似乎并不需要这样一个设备去存储我的那么多文件照片。
就如电子书阅读器,NAS这些东西好像是自己特别需要,但实际上却没有那么适合的使用场景。我似乎并不需要这样一个设备去存储我的那么多文件照片。我们会发现,很多时候在消费主义的影响下,存在着一些伪需求。本来是不需要的东西,在各类消费信息的刺激下,也会不断产生一种购买错觉,我个人认为这就是一种伪需求。其实个人的设备已经是可以实现这些功能的,但是依然会觉得买了新设备会更好。但是如果真的购买之后,便会发现自己好像实际上没有此类需求的
立足现有条件,充分发挥其功用,如无必要,勿增实体。例如电子书阅读器,其本身主要起到一个方便阅读的效果,减少携带的纸质书籍。同时以更低的价格阅读,性能迭代并不是很大,所以说要尽可能的延长其使用时间才是正确的。Kindle使用了4年时间,由于书源下载越来越困难,再加之国产替代就不再使用了,但确实是属于物尽其用了,读了很多书,很有收获。
@@ -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,20 +86,16 @@ $\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 $
### 希腊字母
@@ -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 打开那个文件夹,结束
```
**零成本、零维护、不掉链子。**
---
你对哪个方向最感兴趣?同步先跑起来,还是想一步到位把博客发布也搭了?我可以给你每一步的详细命令。
@@ -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 手册。
---
@@ -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 一键 | 任意静态托管 |
| **适合场景** | 个人笔记库转网站 | 正式的文档知识库 |
---
@@ -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)
@@ -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)
@@ -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*
@@ -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 先别买,把钱省下来,等真需要了再下手也不迟。**
@@ -1,31 +0,0 @@
---
title: 记录生活的瞬间
published: 2026-05-30
image: ""
tags: [生活]
category: 生活
draft: false
---
# 记录生活的瞬间
> 一张照片,一段记忆,一个故事。
---
有些瞬间,按下快门就变成了永恒。很多时候我们忙忙碌碌,忘了停下来看看身边的美好。
今天翻到这张图,觉得光影和构图都还挺有意思的,就顺手记了下来。
![记录瞬间](/assets/images/2026-06-12-image.webp)
<small>*拍于某个寻常的午后*</small>
我觉得记录的意义在于——**当你回头看的时候,那些模糊的记忆会因为一张照片、一段文字而重新变得鲜活。**
这也是我做这个博客的初衷之一。不管是用 Obsidian 写笔记,还是在这里发文章,都是想把点点滴滴留下来。
以后会多拍,多写,多记录。
---
*2026年6月12日*