chore: 优化文章结构,把一些之前用AI生成的文章都删除掉了
This commit is contained in:
@@ -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)
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
> 引用文字
|
|
||||||
|
|
||||||
- 无序列表
|
|
||||||
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!')
|
|
||||||
```
|
|
||||||
|
|
||||||
### 图片
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
### 链接
|
|
||||||
|
|
||||||
[访问 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
|
|
||||||

|
|
||||||
```
|
|
||||||
|
|
||||||
也可以放在文章同级目录(相对路径):
|
|
||||||
|
|
||||||
```markdown
|
|
||||||

|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 第七步:发布到互联网
|
|
||||||
|
|
||||||
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
|
|
||||||
---
|
|
||||||

|
|
||||||
|
|
||||||
非常难受,自己的树莓派出问题了,这个小东西还是有些不稳定,不太想折腾了,准备老老实实用我的腾讯云服务器。我之前浪费了大量的精力,搭建了我的 vanblog,但是却没有什么用。之后了,我要把我的这个 vanblog 的博客里面的东西迁移出来,有几篇文章也是花了比较长的时间才写出来的。还是 Obsidian 好用啊,数据完全在本地存储,可控性更高一点。而且手机、电脑三端同步,它总有一个备份的。
|
|
||||||
@@ -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
|
published: 2026-06-05
|
||||||
image: ""
|
image: ""
|
||||||
tags: [AI, 思考]
|
tags: [AI, 思考]
|
||||||
category: AI
|
category: 思考
|
||||||
draft: false
|
draft: false
|
||||||
---
|
---
|
||||||
AI 发展越来越快,各式各样的 claw 龙虾🦞层出不穷、日新月异,真的是令人眼花缭乱,AI 工具很多,我们该怎么使用,这是一个新的问题。
|
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
|
published: 2026-06-12
|
||||||
image: ""
|
image: ""
|
||||||
tags: [教程, 工具]
|
tags: [教程, 工具]
|
||||||
category: 教程
|
category: 教程
|
||||||
draft: false
|
draft: false
|
||||||
---
|
---
|
||||||
# 📐 LaTeX 数学公式使用教程
|
# LaTeX 数学公式使用教程
|
||||||
|
|
||||||
> 本站已启用 KaTeX 引擎,支持在文章中使用 LaTeX 语法书写数学公式。
|
> 本站已启用 KaTeX 引擎,支持在文章中使用 LaTeX 语法书写数学公式。
|
||||||
|
|
||||||
@@ -72,7 +72,7 @@ $\sqrt[n]{x}$
|
|||||||
|:---|:---|
|
|:---|:---|
|
||||||
| `\frac{a}{b}` | $\frac{a}{b}$ |
|
| `\frac{a}{b}` | $\frac{a}{b}$ |
|
||||||
| `\sqrt{x}` | $\sqrt{x}$ |
|
| `\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$ |
|
| `\sum_{i=1}^{n} i` | $\sum_{i=1}^{n} i$ |
|
||||||
| `\int_{a}^{b} f(x) \, dx$ | $\int_{a}^{b} f(x) \, dx$ |
|
| `\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$ |
|
| `\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!$ |
|
| `\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 $
|
$ \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 的笔记格式(用相对路径 ``)。
|
|
||||||
|
|
||||||
| 内存占用 | ~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,现在一定的时间来进行学习,主要是强化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 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
|
|
||||||
---
|
|
||||||
# 记录生活的瞬间
|
|
||||||
|
|
||||||
> 一张照片,一段记忆,一个故事。
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
有些瞬间,按下快门就变成了永恒。很多时候我们忙忙碌碌,忘了停下来看看身边的美好。
|
|
||||||
|
|
||||||
今天翻到这张图,觉得光影和构图都还挺有意思的,就顺手记了下来。
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
<small>*拍于某个寻常的午后*</small>
|
|
||||||
|
|
||||||
我觉得记录的意义在于——**当你回头看的时候,那些模糊的记忆会因为一张照片、一段文字而重新变得鲜活。**
|
|
||||||
|
|
||||||
这也是我做这个博客的初衷之一。不管是用 Obsidian 写笔记,还是在这里发文章,都是想把点点滴滴留下来。
|
|
||||||
|
|
||||||
以后会多拍,多写,多记录。
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
*2026年6月12日*
|
|
||||||
Reference in New Issue
Block a user