NMB的个人博客 - 2026年2月
type: channel
link: https://blog.qgdnmb.xyz/2026/02/
description: 一时兴起的买的网址，不用来做网站就浪费了
items: 为什么选择Cloudreve？打造属于你的私有云盘体验
items: 发布初版Docusaurus Theme主题(持续更新)
items: 在安全启动的情况下启用开源内核英伟达显卡驱动
items: 使用OpenWrt精准放行特定设备的IPv6流量
items: Typecho PHP 模板 API 完整参考
items: Markdown 语法大全
items: 解决脑抽把Linux引导删掉恢复记录
items: Typecho主题完整API文档

为什么选择Cloudreve？打造属于你的私有云盘体验
type: item
date: 2026-02-05T11:43:23+00:00
description: 引言：你是否需要一个真正可控的云存储？ 在数字化时代，数据存储和共享已成为我们日常生活和工作的重要组成部分。然而，公有云服务（如百度网盘、Dropbox等）往往伴随着隐私担忧、限速问题或高昂的会员费用。如果你正在寻找一种既能完全掌控数据、又具备强大功能的解决方案，那么 Cloudreve 或许正是你需要的。 什么是Cloudreve？ Cloudreve 是一款基于 Go 与 React 开发的开源自建网盘系统，支持快速搭建个人或团队的私有云存储服务。 它不仅功能丰富，还具备高度的可定制性，让你可以轻松管理文件、分享内容，并且完全掌控自己的数据。 核心特性一览： 多存储后端支持 Cloudreve 的强大之处在于其灵活的多存储策略，您可以将文件同时挂载到多个不同的存储平台。以下是其支持的部分存储后端： 存储类型 说明 备注 本地磁盘 服务器本地存储 默认支持，无需额外配置 阿里云 OSS 阿里云对象存储服务 需要 Access Key 腾讯云 COS 腾讯云对象存储服务 需要 Secret ID/Key AWS S3 亚马逊云对象存储服务 支持标准 S3 API OneDrive 微软云存储服务 支持国际版/世纪互联 金山云 KS3 金山云对象存储服务 兼容 S3 API 华为云 OBS 华为云对象存储服务 兼容 S3 API 七牛云 Kodo 七牛云对象存储服务 需要配置 Access Key 强大的文件管理 提供直观的 Web 界面，支持拖拽上传、文件夹管理、文件预览（图片、视频、文本等），在线解压缩。 灵活的分享机制 可以生成公开或密码保护的分享链接，设置有效期和下载次数限制，确保文件分享既便捷又安全。 用户与权限管理 无论是个人使用还是团队协作，Cloudreve 都支持多用户系统，并可针对不同用户或用户组设置存储空间、速度限制等。 在线预览与编辑 支持常见格式的文件的在线预览（如 Office 文档、PDF、视频等），甚至可以集成 OnlyOffice 实现在线编辑。 跨平台兼容 无论是 Windows、macOS 还是 Linux，只需简单的部署步骤，你就可以在任何环境中运行 Cloudreve。 谁适合使用 Cloudreve？ 个人用户：希望搭建私有云盘，替代公有网盘，保护隐私并摆脱限速困扰。 开发者和技术爱好者：享受自建服务的乐趣，同时拥有完全的控制权。 小型团队或企业：需要内部文件共享和协作平台，且希望数据自主管理。 教育或非营利组织：寻求低成本、高效率的文件存储与分享方案。 如何开始使用？ 部署 Cloudreve 非常简单！你可以通过 Docker 快速安装，也可以直接下载二进制文件运行。官方提供了详细的文档，即使是新手也能轻松上手。 下载最新版本：访问 Cloudreve GitHub 发布页 获取最新版本。 配置存储策略：根据需求选择本地存储或云端存储。 启动服务：运行程序，通过浏览器访问管理界面。 开始使用：上传文件、创建分享、管理用户——一切尽在掌握！ 部署提醒：家用带宽的局限性 在将 Cloudreve 部署于家庭网络环境时，一个无法回避的问题是家用宽带网络的固有局限性。这主要体现为以下几个方面： 局限性 具体表现 对 Cloudreve 使用的影响 不对称带宽 上传速率远低于下载速率。例如，一条 1000M 下载的宽带，上传速率可能仅为 30-100M（约 3-12 MB/s 的实际传输速度）。 这是最核心的瓶颈。 它严重限制了您从外部网络（如公司、外出时）上传文件到家中云盘的速度，以及与他人分享大文件的体验。 无公网 IP 运营商通常不会给家庭宽带分配公网 IPv4 地址，您的网络位于运营商的大内网中。 从外部网络无法直接通过域名或 IP 访问到您家里的 Cloudreve 服务，必须依赖内网穿透等第三方工具，增加了复杂性和不稳定性。 动态公网 IP 即使幸运地申请到了公网 IP，它通常也是动态的，每隔一段时间可能会变化。 需要配置 DDNS（动态域名解析） 服务，才能确保您的域名始终指向变化后的正确家庭 IP 地址。 端口封锁 运营商通常封锁了家庭宽带的 80、443、8080 等常用网络端口。 您无法使用标准的 HTTP/HTTPS 端口提供服务，访问 Cloudreve 时必须在域名或 IP 后加上非常用端口号（如 https://yourdomain.com:5212），不够美观且可能被浏览器提醒不安全。 网络稳定性 家庭网络环境相对数据中心不够稳定，可能遇到路由器性能瓶颈、偶发断线等问题。 可能导致服务间歇性中断，影响您和分享对象的使用体验。 应对策略与解决方案 虽然存在这些局限，但并非无解，您可以考虑以下方案来优化体验： 申请公网 IP：致电您的网络运营商，尝试申请公网 IP …

发布初版Docusaurus Theme主题(持续更新)
type: item
date: 2026-02-04T17:21:00+00:00
description: 项目名称： Docusaurus Theme for Typecho 项目目标： 旨在将Typecho博客系统的界面现代化，解决原版主题设计过时的问题。本主题在设计上尽量保持了与原版主题结构的相似性，便于用户理解和迁移。 已知问题与BUG列表 本主题目前已知存在以下问题： 二、全平台通用问题 3. 短文章布局异常：当文章内容过短时，文章底部的评论区及评论发布框的定位会出现错乱。 4. 头像服务依赖：主题默认的头像（Gravatar）服务在国内网络环境下可能无法正常访问（您在本博客看不到头像，是因为我已在后台禁用了此功能）。 5. 缺少默认Logo：主题未提供默认的站点Logo图片，需要用户自行配置。 6. 暗色模式闪烁：启用暗色模式后，在刷新页面时会出现短暂的主题闪烁。 7. 其他未知问题：可能还存在其他未被发现的问题，欢迎在使用中反馈。 您可以在本博客中实际浏览，以更直观地了解上述问题。 主题下载 如果您在了解以上问题后仍希望尝试，可以通过以下链接下载主题文件： docusaurus-theme-v6.4.zip

在安全启动的情况下启用开源内核英伟达显卡驱动
type: item
date: 2026-02-04T06:09:39+00:00
description: 前提条件： 主板启用了安全启动且显卡内核驱动未签名 Linux系统（Debian13） 熟练命令行操作 一颗健康且正常的大脑与一双手和一对眼 步骤1：安装所需工具 Bash | 复制 sudo apt update sudo apt install mokutil openssl zstd 步骤2：创建签名密钥 Bash | 复制 # 创建目录存放密钥 sudo mkdir -p /var/lib/shim-signed/mok/ cd /var/lib/shim-signed/mok/ # 创建密钥对 sudo openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=NVIDIA Driver Signing Key/" # 设置权限 sudo chmod 600 MOK.priv MOK.der 步骤3：注册密钥到 MOK Bash | 复制 sudo mokutil --import MOK.der 这会提示设置一个密码（请记住，重启时需要） 步骤4：在启动时注册密钥 重启后会出现蓝色界面（MOK Management） 选择 "Enroll MOK" → "Continue" → "Yes" 输入之前设置的密码 选择 "Reboot" 步骤5：为 NVIDIA 模块签名 重启后，找到模块位置 | 复制 modinfo nvidia | grep filename #通常位置：/lib/modules/$(uname -r)/updates/dkms/nvidia.ko 情况一 模块后戳为.ko | 复制 #为模块签名 sudo /usr/src/linux-headers-\((uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der \)(modinfo -n nvidia) sudo /usr/src/linux-headers-\((uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der \)(modinfo -n nvidia_modeset) sudo /usr/src/linux-headers-\((uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der \)(modinfo -n nvidia_drm) sudo /usr/src/linux-headers-\((uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der \)(modinfo -n nvidia_uvm) sudo /usr/src/linux-headers-\((uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der \)(modinfo -n nvidia-peermem) 情况二 模块后戳为.ko.zst Bash | 复制 # 创建临时目录 sudo mkdir -p /tmp/nvidia-modules cd /tmp/nvidia-modules # 解压所有 NVIDIA 模块 sudo unzstd /lib/modules/$(uname -r)/updates/dkms/nvidia.ko.zst -o nvidia.ko sudo unzstd /lib/modules/$(uname -r)/updates/dkms/nvidia-modeset.ko.zst -o nvidia-modeset.ko sudo unzstd /lib/modules/$(uname -r)/updates/dkms/nvidia-drm.ko.zst -o nvidia-drm.ko sudo unzstd /lib/modules/$(uname -r)/updates/dkms/nvidia-uvm.ko.zst -o nvidia-uvm.ko sudo unzstd /lib/modules/$(uname -r)/updates/dkms/nvidia-peermem.ko.zst -o nvidia-peermem.ko # 为解压后的模块签名 sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 /var/lib/shim-signed/mok/MOK.priv /var/lib/shim-sign…

使用OpenWrt精准放行特定设备的IPv6流量
type: item
date: 2026-02-04T06:05:59+00:00
description: 本教程将详细指导您如何通过OpenWrt路由器实现所需功能：允许特定设备完全绕过IPv6防火墙限制， 以及将该设备特定端口的入站流量重定向到内网服务器。本教程源自个人进行本服务器网络架构搭建的过程。 应用场景 假设您家中有一个设备（如一台NAS或家庭服务器），您希望： 该设备能无限制地接受IPv6互联网的访问（入站），且不影响IPv6防火墙对其他IPv6设备的保护。 公网用户可以通过IPv6访问该设备上托管的服务 我们将使用OpenWrt强大的防火墙和DHCP功能来实现这一精细化的控制。 第一步：核心思路与准备工作 核心思路：为特定设备分配一个固定的IPv6地址后缀，然后基于此后缀来配置防火墙规则。 这种方法精准、灵活，不依赖于物理网络拓扑变化。 在开始前，请准备好： 一个已安装OpenWrt的路由器。 目标设备的MAC地址（例如：FF:FF:F7:F5:F7:9F）。 要重定向到的内部服务器的IPv4或IPv6地址（例如：192.168.1.200或240e:007:3ccc:996:ffff:ffff:ffff:hffc）。 以上内容都可以从OpenWrt Web界面查看 第二步：为设备分配固定的IPv6后缀 首先，我们需要确保目标设备每次都能获取到一个固定的、易于标识的IPv6地址后缀（如::200）。 登录OpenWrt LUCI管理界面。 进入“网络” -> “DHCP/DNS”。 切换到“静态地址分配”。 点击“添加”按钮新建一条静态租约，并按如下信息填写： MAC地址：填写您目标设备的MAC地址（如FF:FF:F7:F5:F7:9F）。 IPv4地址：设置为固定地址（例如192.168.1.200）。 IPv6后缀：绑定好目标设备的DUID 以上内容可以在状态>概览点击设为静态进行部分设置 点击“保存并应用”。 重启目标设备的网络连接，使其重新获取IP地址。之后，请在设备上使用ipconfig（Windows）或ip addr show（Linux）命令确认其获取到的IPv6地址后缀如::200或::ffff:ffff:ffff:hffc。 第三步：配置防火墙，放行该设备的所有IPv6流量 接下来，我们创建一条防火墙规则，允许拥有该固定后缀的设备的所有IPv6流量通过。 进入“网络” -> “防火墙” -> “通信规则”标签页。 点击“添加”新规则，并进行如下配置： 名称：DMZv6（可自定义） 协议：any（允许所有协议） 源区域：wan 目标区域：lan 源地址：::200/::ffff:ffff:ffff:ffff或::ffff:ffff:ffff:hffc/::ffff:ffff:ffff:ffff 这是最关键的一步。此掩码确保了无论公网IPv6前缀如何变化，规则都只匹配我们设定的固定后缀::200。 操作：接受 点击“保存并应用”。 至此，该设备已能无限制地访问IPv6互联网。您可以在设备上访问 test-ipv6.com 来验证连接是否成功。 最后的重要提示： 安全警告：此操作使设备和服务暴露于公网，请确保设备和服务器的系统安全、SSH密码安全。 动态DNS（DDNS）：由于运营商会动态分配IPv6前缀，您必须配置IPv6 DDNS服务（如使用OpenWrt的ddns-scripts或服务器安装ddns-go），将一个固定域名（如example.com）解析到您变化中的IPv6地址，以便进行外网访问。 测试：您可以从外部网络（如手机移动数据）使用telnet example.com 22命令测试端口是否通畅。 通过以上三个步骤，您就成功地实现了OpenWrt下基于IPv6的精细化管理。

Typecho PHP 模板 API 完整参考
type: item
date: 2026-02-03T15:42:00+00:00
description: 本文档汇集了 Typecho 主题和插件开发中所有可用的 PHP 模板 API 及函数。 目录 Widget\Archive - 主题核心 API Widget\Base\Contents - 内容 API Widget\Base\Comments - 评论 API Widget\Options - 系统配置 API Utils\Helper - 辅助工具 API Hook 系统完整列表 Widget\Archive - 主题核心 API Widget\Archive 是主题开发中最核心的 API，提供了内容循环、分页、页面判断等功能。 循环控制 have() - 检查是否有内容 Php | 复制 while ($this->have()) { // 循环内容 } 返回值: bool - 是否有更多内容 next() - 移动到下一项 Php | 复制 while ($this->have()) { $this->next(); // 处理当前项 } 内容输出 title(\(length = 0, \)trim = '...') - 输出标题 Php | 复制 $this->title(); // 完整标题 $this->title(50, '...'); // 截取标题 参数: $length - 截取长度，0 表示不截取 $trim - 截取后缀 content($more = null) - 输出内容 Php | 复制 $this->content(); // 完整内容 $this->content('阅读全文'); // 带 more 标签截取 参数: $more - more 标签的链接文字 excerpt(\(length = 100, \)trim = '...') - 输出摘要 Php | 复制 $this->excerpt(); // 默认 100 字 $this->excerpt(200, '——'); // 自定义截取 date($format = null) - 输出日期 Php | 复制 $this->date(); // 使用后台设置格式 $this->date('Y-m-d H:i:s'); // 自定义格式 分类与标签 category(\(split = ',', \)link = true, $default = null) - 输出分类 Php | 复制 $this->category(); // 逗号分隔，带链接 $this->category(' / ', false); // 斜线分隔，无链接 $this->category(',', true, '未分类'); // 带默认值 tags(\(split = ',', \)link = true, $default = null) - 输出标签 Php | 复制 $this->tags(); // 逗号分隔，带链接 $this->tags(' ', false); // 空格分隔，纯文本 directory(\(split = '/', \)link = true, $default = null) - 输出多级分类 Php | 复制 $this->directory(' > '); // 输出完整分类路径 作者信息 author($item = 'screenName') - 输出作者信息 Php | 复制 $this->author(); // 昵称 $this->author('url'); // 作者主页 $this->author('mail'); // 作者邮箱 可用字段: screenName, url, mail, uid 评论相关 commentsNum(...$args) - 输出评论数 Php | 复制 $this->commentsNum(); // 直接输出数字 $this->commentsNum('%d 评论'); // 带单位 $this->commentsNum('暂无评论', '1 条评论', '%d 条评论'); // 复数处理 comments() - 获取评论归档对象 Php | 复制 \(comments = \)this->comments(); while ($comments->have()) { $comments->next(); // 处理评论 } 返回值: \Widget\Comments\Archive pings() - 获取引用归档对象 Php | 复制 \(pings = \)this->pings(); 返回值: \Widget\Comments\Ping 分页导航 pageNav(\(prev = '«', \)next = '»', \(splitPage = …

Markdown 语法大全
type: item
date: 2026-02-03T14:33:00+00:00
description: 完整 Markdown 语法与扩展功能参考手册 标题 一级标题 二级标题 三级标题 四级标题 五级标题 六级标题 段落与换行 这是第一段。在 Markdown 中，段落由空行分隔。 这是第二段。 手动换行：在行尾添加两个空格，然后回车。 就像这样。 或者直接使用反斜杠换行\ 这是新行。 文本样式 粗体文本 粗体文本（替代语法） 斜体文本 斜体文本（替代语法） 粗斜体文本 粗斜体文本 粗斜体文本 删除线文本 高亮文本（GFM 扩展） 上标：H2O 或 H2O 下标：X2 或 X2 行内代码 列表 无序列表 项目一 嵌套项目一 深度嵌套 嵌套项目二 项目二 替代符号 嵌套 另一种符号 嵌套 有序列表 第一项 嵌套第一项 嵌套第二项 第二项 第三项 任务列表 已完成任务 未完成任务 另一个任务 定义列表 术语一 定义一 另一个定义 术语二 定义二 链接 内联链接 引用链接 相对路径链接 同一页面锚点 https://自动链接.com email@example.com 图片 带尺寸的图片： 带链接的图片： 代码块 围栏代码块 Javascript | 复制 function helloWorld() { console.log("Hello, world!"); return true; } Python | 复制 def fibonacci(n): if n <= 1: return n return fibonacci(n-1) + fibonacci(n-2) 缩进代码块（4个空格或1个制表符） // 这是缩进代码块 const x = 10; console.log(x); 带行号的代码块（部分扩展） Diff | 复制 - const oldCode = "deprecated"; + const newCode = "recommended"; 引用 这是一级引用。 这是嵌套引用。 返回一级引用。 多段落引用： 这是第二个段落。 嵌套在引用中。 水平线 表格 表头左对齐 表头居中 表头右对齐 单元格 单元格 单元格 长文本单元格 粗体 $9.99 代码 斜体 100 简单表格： 左对齐表头 | 居中表头 | 右对齐表头 --- | :---: | ---: 内容 | 内容 | 内容 脚注 这是一个带脚注的句子1。另一个脚注2。 数学公式（部分扩展支持） 行内公式 质能方程：\(E = mc^2\)，勾股定理：\(a^2 + b^2 = c^2\) 块级公式 \[\int_{-\infty}^{\infty} e^{-x^2} dx = \sqrt{\pi}\] \[\begin{pmatrix} a & b \\ c & d \end{pmatrix}\] 转义字符 *星号* _下划线_ `反引号` [左括号] (圆括号) #井号 \ 反斜杠 ~ 波浪线 - 连字符 . 句点 ! 感叹号 特殊元素 折叠/详情 注释 内联 HTML HTML 段落 Ctrl+C 复制 进度条（非标准） 进度：75% 米尺 使用量：6 out of 10 表情符号 :smile: :heart: :+1: :-1: :rocket: 直接 Unicode 表情：😀 ❤️ 🚀 图表（Mermaid，部分扩展支持） graph TD; A[开始] --> B{判断}; B -->|是| C[执行操作]; B -->|否| D[结束]; C --> D; pie title 饼图示例 "苹果" : 45.0 "香蕉" : 25.0 "橙子" : 30.0 横排卡片（自定义语法） ::: card-group :: card 卡片 1 内容 :: :: card 卡片 2 更多内容 :: :: 提示框/告警框（自定义语法） [!NOTE] 这是一个提示信息。 [!TIP] 这是一个小技巧。 [!WARNING] 这是一个警告。 [!DANGER] 危险操作！ ℹ️ 容器语法测试 这是一个信息说明块，用于补充背景知识。 ⚠️ 容器语法测试 这是一个警告信息，用于提醒读者注意潜在问题。 时间戳 2024年元旦 缩写 这是 HTML 的缩写：*[HTML]: HyperText Markup Language 插入符号 这是 插入 文本。 键盘按键 按 Ctrl + Alt + Delete 重启。 内联属性（部分扩展） 这是一个 {.red #special}带属性的段落。 锚点 章节标题 跳转到第一节。 术语表 术语 ~ 定义 另一个术语 ~ 另一个定义 任务列表进度 任务完成情况： [2/5] 任务 1 任务 2 任务 3 任务 4 任务 5 内联属性（属性列表） 特殊标题 {#custom-id .class-name data-count=5}…

解决脑抽把Linux引导删掉恢复记录
type: item
date: 2026-02-03T10:45:53+00:00
description: 准备工作 Linux Live USB（如Ubuntu、Linux Mint等） 确保电脑从Live USB启动 Bash | 复制 # 在Live环境中安装并使用Boot Repair sudo add-apt-repository ppa:yannubuntu/boot-repair sudo apt update sudo apt install boot-repair # 运行Boot Repair sudo boot-repair 重启后在你原来的系统上，再执行以上命令

Typecho主题完整API文档
type: item
date: 2026-02-03T05:28:00+00:00
description: 本文档基于Typecho默认模板代码和官方文档整理，涵盖了所有可用的PHP模板API。 整理时间：2026年2月 模板路径：/home/nmb/code/博客UI增强/md/default/ 📋 目录结构 Bash | 复制 default/ ├── 404.php # 404错误页面 ├── comments.php # 评论模块 ├── footer.php # 页脚模块 ├── functions.php # 主题配置与自定义函数 ├── header.php # 页头模块 ├── index.php # 首页/文章列表 ├── page.php # 独立页面 ├── post.php # 文章详情页 ├── sidebar.php # 侧边栏 ├── style.css # 主题样式 ├── grid.css # 网格布局样式 ├── normalize.css # CSS重置样式 ├── screenshot.png # 主题缩略图 └── img/ # 图片资源目录 📊 API统计概览 类别 数量 说明 核心对象 $this API 约35个 模板核心方法 选项对象 $this->options API 约18个 站点设置方法 用户对象 $this->user API 3个 用户相关方法 评论对象 API 约15个 评论相关方法 Widget类 API 8个 内容组件类 全局函数 API 6个 辅助函数 表单元素 API 3种 主题配置元素 文件结构说明 文件名 作用 必须性 style.css 主题样式文件 否 screenshot.png 主题缩略图 否 index.php 首页以及说明文件 是 404.php 404页面文件 否 archive.php 通用（分类、搜索、标签、作者）页面文件 否 category.php 分类页面文件 否 search.php 搜索页面文件 否 tag.php 标签页面文件 否 author.php 作者页面文件 否 comments.php 评论页面文件 否 footer.php 底部页面文件 否 functions.php 主题函数文件 否 header.php 头部页面文件 否 page.php 独立页面文件 否 post.php 日志页面文件 否 sidebar.php 侧边栏页面文件 否 注：如果archive.php不存在，index.php也会作为通用页面，实现archive.php的工作。 一、核心对象 $this API 1.1 模板加载API 方法 参数 返回值 说明 使用示例 need() \(file` | void | 引入模板文件 | `\)this->need('header.php')$this->need('footer.php') 1.2 页面类型判断API 方法 参数 返回值 说明 使用示例 is() \(type, \)param bool 判断当前页面类型 \(this->is('index')` `\)this->is('post')\(this->is('page')` `\)this->is('category')\(this->is('category', 'default')` `\)this->is('tag')\(this->is('author')` `\)this->is('archive')\(this->is('single')` `\)this->is('search') 页面类型判断示例： Php | 复制 <?php if ($this->is('post')): ?> <?php elseif ($this->is('page')): ?> <?php elseif ($this->is('category', 'default')): ?> <?php endif; ?> 1.3 文章循环API 方法 参数 返回值 说明 使用示例 have() 无 bool 是否有文章 $this->have() next() 无 void 移动到下一篇文章 $this->next() 文章循环示例： Php | 复制 <?php if ($this->have()): ?> <?php while ($this->next()): ?> <?php $this->title() ?> <?php $this->content() ?> <?php endwhile; ?> <?php else: ?> 没有找到内容 <?php endif; ?> 1.4 文章内容API 方法 参数 返回值 说明 使用示例 content() \(more` | void | 输出文章内容 | `\)this->content(_t(…