分类: 未分类

  • Hugo 快速上手:从零搭建极速静态网站

    Hugo 是基于 Go 语言的高性能静态网站生成器,特点是构建速度极快、单文件可执行、无需额外依赖,适合快速搭建博客、文档或个人网站。

    安装环境

    请确保你的电脑已安装以下工具:

    1. Hugo(Extended/Deploy 版本):
    2. Git:用于主题管理和版本控制。
    3. 终端选择:Windows 推荐 PowerShell,macOS/Linux 使用原生终端。

    创建站点

    快速初始化站点结构并配置基础主题:

    # 1. 创建项目目录
    hugo new site qixinlee
    cd qixinlee
    
    # 2. 初始化 Git 仓库
    git init
    
    # 3. 添加 Ananke 主题为子模块
    git submodule add https://github.com/theNewDynamic/gohugo-theme-ananke.git themes/ananke
    
    # 4. 配置主题
    echo "theme = 'ananke'" >> hugo.toml

    创建文章

    Hugo 使用 Markdown 编写内容。执行 hugo new 命令会自动根据模板生成带有 Front Matter(元数据)的文件。

    hugo new content content/posts/my-first-post.md

    使用编辑器(如 VS Code)打开该文件,编辑内容:

    +++
    date = '2026-01-18T14:18:17+08:00'
    draft = true
    title = '我的第一篇文章'
    +++
    
    ## Hello World
    
    这是我的 Hugo 站点首篇文章。
    
    * 个人站点:[启鑫的黑板报](https://www.qixinlee.com)

    draft = true 表示草稿状态,默认不会生成到静态站点。

    本地预览

    hugo server -D
    • -D:渲染包含 draft: true 的草稿文件。
    • 默认访问地址:http://localhost:1313/
    • 在本地预览模式下,修改文件保存后,浏览器会自动刷新。

    配置你的站点

    打开根目录下的 hugo.toml 文件修改基本信息:

    配置项说明示例
    baseURL你的正式域名https://www.qixinlee.com/
    languageCode网站语言zh-cn
    title网站标题启鑫的黑板报
    theme当前使用的主题ananke

    构建与发布

    当内容确认无误后,执行静态化编译:

    1. 将文章头部的 draft = true 改为 draft = false。
    2. 在项目根目录运行构建命令:
    hugo
    • 构建完成后,根目录下会生成 public/ 文件夹。
    • 该文件夹包含纯静态的 HTML、CSS 和 JS 资源。
    • 直接将 public/ 目录内容上传至 GitHub Pages、Vercel、Netlify 或私有 Nginx 即可完成上线。
  • Pandoc 入门指南:打造自动化、跨平台的文档生产力工具

    Pandoc 被誉为文档界的“瑞士军刀”,是一个强大的通用文档转换工具(Universal Document Converter)。它不仅能实现多种标记语言与出版格式之间的高保真转换,更能通过过滤器(Filters)和模板(Templates)系统,构建出一套自动化、可扩展的文档生产流水线。

    • 多格式支持:涵盖 Markdown, LaTeX, HTML, Word (docx), EPUB, PDF 等数十种格式。
    • 专业级排版:集成 XeLaTeX / LuaLaTeX 引擎,支持复杂公式、中英混排及学术参考文献。
    • 高度可扩展:支持通过 Lua 或 Python 编写过滤器,对文档 AST(抽象语法树)进行深度定制。
    • 自动化友好:命令行操作,可轻松集成至 CI/CD 流程、GitHub Actions 或个人知识管理系统。

    实际应用

    • 学术论文:Markdown / LaTeX 写作 → PDF / DOCX / HTML,自动管理文献引用。
    • 技术文档:统一 Markdown 源文件 → 多格式输出(HTML、PDF、EPUB);可集成 CI/CD 自动发布。
    • 电子书与报告:EPUB、PDF、HTML 输出,自定义模板实现品牌风格。
    • 知识管理:Obsidian、Joplin 等笔记 Markdown → 高质量 PDF 输出,便于归档和分享。

    常用命令

    Pandoc 的基本语法结构为:pandoc [输入文件] -o [输出文件] [参数]。

    1. 基础转换(Markdown 转 PDF/Word)

    默认情况下,PDF 导出需要系统安装了 LaTeX 环境。

    • 转为 PDF
    pandoc input.md -o output.pdf
    • 转为 Word (docx)
    pandoc input.md -o output.docx

    2. 中文 PDF 排版优化(重点)

    直接导出中文 PDF 常会遇到乱码或字体问题,建议指定 xelatex 引擎并配置中文字体。

    pandoc input.md -o output.pdf --pdf-engine=xelatex -V mainfont="Noto Sans SC" -V CJKmainfont="Noto Sans SC" -V geometry:margin=1in

    参数说明:--pdf-engine 指定引擎;-V 用于定义变量(字体、页边距等)。

    3. 多文件合并处理

    如果你正在写一本书或长篇报告,可以将多个 Markdown 文件合并导出一个文件。

    pandoc chapter1.md chapter2.md chapter3.md -o full_book.pdf

    4. 学术写作:参考文献与引用

    配合 .bib 文献数据库文件,Pandoc 可以自动生成符合标准的引用格式。

    pandoc input.md --bibliography=refs.bib --citeproc -o output.pdf

    注意:较新版本的 Pandoc 使用 --citeproc 代替了旧版的 --filter pandoc-citeproc。

    5. 自定义模板转换

    当你需要高度定制的画风(如公司固定报告格式)时,可以使用自定义模板。

    pandoc input.md --template=mytemplate.tex -o output.pdf

    6. 网页与独立文档

    如果你想生成一个可以直接在浏览器打开的 HTML 文件,记得加上 --standalone 以包含 CSS 和头部信息。

    • 输出 HTML
    pandoc input.md -t html -o output.html --standalone
    • 带元数据的 Word 导出
    pandoc input.md -o output.docx --standalone
  • 使用 nc(netcat)进行网络故障排查

    一、nc 在网络排错体系中的技术定位

    1. nc 解决的核心问题

    nc(netcat)的唯一目标是验证:在指定路径与方向上,L3/L4 层通信是否成立。

    换句话说,nc 回答的是一个极其具体的问题:

    在当前网络拓扑与安全策略下,这个 IP + 端口,是否真的可达?

    nc 不关心:

    • 应用协议是否合法
    • 业务逻辑是否正确
    • 数据是否符合预期

    它只关注 网络层与传输层是否建立通信条件。

    2. nc 的能力边界

    从 OSI 分层角度看,nc 的作用严格限定在:

    • L3(IP 路由可达性)
    • L4(TCP / UDP 端口连通性)

    因此,nc 适合用于判断:

    • 是否存在路由问题
    • 防火墙 / ACL 是否阻断
    • NAT / 端口映射是否生效
    • 端口是否存在监听进程
    • TCP 与 UDP 行为差异导致的误判

    但 nc 无法替代:

    • 抓包分析(tcpdump / Wireshark)
    • 应用层协议验证(HTTP / TLS / SQL)

    3. nc 在标准排错链路中的位置

    在成熟的网络排错流程中,nc 位于关键的分界点:

    ping → nc → tcpdump → 应用层分析

    其作用是:
    在进入复杂分析之前,先确认“网络是否真的通”。

    二、nc 的工作机制与判定逻辑

    1. TCP 场景的判定模型

    在 TCP 场景中,nc 的行为等同于一个最小化的客户端:

    • 主动发起 TCP 三次握手
    • 根据返回结果判断链路状态

    其输出具有明确语义:

    nc 行为网络含义
    succeededTCP 会话建立成功
    refused对端可达,但端口未监听
    timeout路由或防火墙丢弃

    TCP 场景下,nc 的结论是确定性的。

    2. UDP 场景的判定局限

    UDP 不存在连接状态,nc 在 UDP 场景中仅完成一件事:

    • 发送 UDP 数据包

    这意味着:

    • 无返回 ≠ 不通
    • timeout ≠ 失败
    • nc 输出本身不具备充分判定能力

    UDP 场景下,nc 只能作为发包工具,不能作为结论工具。

    三、典型网络故障场景与应用

    场景一:ICMP 可达,但业务不可用

    问题本质

    • ping 验证的是 ICMP
    • 业务使用的是 TCP / UDP

    ICMP 成功不能推导业务端口可达。

    nc 验证方式

    nc -vz server_ip 443

    判定逻辑

    • succeeded:网络路径与端口策略成立
    • refused:服务未监听或未启动
    • timeout:中间防火墙或路由阻断

    场景二:验证防火墙策略是否生效

    客户端侧验证

    nc -vz -w 3 server_ip 22

    工程化解读

    nc 结果结论
    succeeded策略允许
    refused端口关闭
    timeout高概率被防火墙丢弃

    在 TCP 排错中,timeout 是最典型的安全策略阻断信号。

    场景三:VPN / UDP 业务异常(500 / 4500 / DNS)

    nc 的使用方式

    nc -vu -w 3 server_ip 500

    必须明确的事实

    • UDP 无握手
    • nc 不会确认对端状态
    • 无输出是常态

    正确排查模型

    tcpdump -ni any udp port 500

    结论依据:

    • 无出包:本机或路由问题
    • 有出包无回包:防火墙或对端异常

    场景四:NAT / 端口映射验证

    服务端监听

    nc -l 8080

    外部测试

    nc public_ip 8080

    结论判断

    • 成功连接:NAT / DNAT 生效
    • 无法连接:映射或安全策略问题

    场景五:区分网络问题与应用问题

    这是 nc 在工程实践中最核心的价值。

    方法论

    • 使用 nc 直接访问端口
    • 绕过真实应用逻辑
    nc -vz app_server 3306

    结论划分

    • nc 可连:网络层成立,问题属于应用或配置
    • nc 不可连:网络、防火墙或监听异常

    四、标准化 nc 网络排错流程

    在实际运维中,推荐固定以下执行顺序:

    1. DNS 解析是否正确

    nslookup host

    2. IP 层是否可达

    ping host

    3. 端口层是否可达

    nc -vz host port

    4. 是否真实发包

    tcpdump -ni any port port

    5. 检查防火墙、NAT、监听状态

    五、nc 输出结果

    TCP 场景

    输出技术结论
    succeeded端口连通
    refused端口未监听
    timeout路由或防火墙阻断

    UDP 场景

    现象正确理解
    无任何输出正常行为
    timeout无法作为失败依据
    ICMP 不可达明确不通

    UDP 排错必须结合抓包或服务端日志。

    六、常用 nc 排错命令速查

    # TCP 端口连通性测试
    nc -vz -w 3 host port
    
    # UDP 发包测试
    nc -vu -w 3 host port
    
    # 禁用 DNS 解析
    nc -n host port
    
    # 监听端口
    nc -l port
    
    # 抓包辅助分析
    tcpdump -ni any port port

  • Debian 使用 Speedtest CLI 进行网络测速

    Speedtest CLI 让用户能够快速、稳定地测试网络带宽和延迟,适用于服务器运维监控、自动化网络状态记录,以及内网环境下的测速优化。

    安装

    # 安装必要的依赖
    apt-get install curl
    
    # 安装脚本
    curl -s https://packagecloud.io/install/repositories/ookla/speedtest-cli/script.deb.sh | bash
    
    # 安装
    apt-get install speedtest

    运行测速

    speedtest
  • SSH 报错REMOTE HOST IDENTIFICATION HAS CHANGED解决方法

    一、问题背景

    重装服务器系统再次连接 SSH 连接时,会出现如下报错:

    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    @    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
    Host key verification failed.

    提示信息中可能还会包含:

    Offending ECDSA key in /Users/username/.ssh/known_hosts:26
    Host key for 192.168.XXX.XXX has changed

    二、为什么会发生

    SSH 通过 主机密钥(Host Key) 验证服务器身份:

    1. 第一次连接服务器时,SSH 会保存服务器的公钥指纹到本地:
    2. 后续连接时,会对比服务器发来的指纹与本地保存的指纹。
    3. 如果指纹不一致,SSH 会拒绝连接,防止中间人攻击。
    • 重装系统时,服务器会重新生成新的 SSH 主机密钥。
    • 因此,旧的指纹与新的不匹配。
    • SSH 就会报“REMOTE HOST IDENTIFICATION HAS CHANGED”。

    三、解决方法

    在本地终端执行:

    ssh-keygen -R <服务器IP>
    ssh root@<服务器IP>

    首次连接会提示:

    Are you sure you want to continue connecting (yes/no)?

    输入:

    yes
  • Debian 13(Trixie)上禁用 IPv6

    在 Debian 13(Trixie) 上通过 GRUB 内核参数 的方式彻底禁用 IPv6。

    一、禁用原理

    通过向 Linux 内核传递启动参数 ipv6.disable=1,在系统启动时直接禁用 IPv6 协议栈,相比 sysctl 或 NetworkManager 方式更加彻底,不会被系统服务重新启用。


    二、操作步骤

    编辑 GRUB 配置文件

    使用文本编辑器打开 GRUB 默认配置文件:

    nano /etc/default/grub

    修改内核启动参数

    找到如下这一行:

    GRUB_CMDLINE_LINUX_DEFAULT="quiet"

    修改为:

    GRUB_CMDLINE_LINUX_DEFAULT="quiet ipv6.disable=1"

    如果该行中已有其他参数,请保留原参数,只需追加 ipv6.disable=1 即可。

    更新 GRUB 配置

    执行以下命令使配置生效:

    update-grub

    确认命令执行过程中未报错。

    重启系统

    reboot