<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Tools on Leanku 的博客</title><link>https://www.leanku.com/post/tools/</link><description>Recent content in Tools on Leanku 的博客</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Sun, 09 Aug 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://www.leanku.com/post/tools/index.xml" rel="self" type="application/rss+xml"/><item><title>Markdown编辑工具推荐</title><link>https://www.leanku.com/post/tools/markdown-editing-tool-recommendations/</link><pubDate>Sun, 09 Aug 2026 00:00:00 +0000</pubDate><guid>https://www.leanku.com/post/tools/markdown-editing-tool-recommendations/</guid><description>&lt;p&gt;Markdown 作为一种轻量级标记语言，因其简洁、易读、易写的特性，已成为文档撰写、学术写作、知识管理及技术博客的首选格式。市场上针对不同使用场景的编辑工具层出不穷，本文挑选了数款最具代表性的热门工具，从学术研究、知识管理到沉浸式写作进行深度解析。&lt;/p&gt;&#10;&lt;h2 id="1-zettlr专为学术研究与卡片盒笔记而生"&gt;1. Zettlr：专为学术研究与卡片盒笔记而生&lt;/h2&gt;&#10;&lt;p&gt;如果你需要撰写学术论文、研究报告或处理大量参考文献，&lt;strong&gt;Zettlr&lt;/strong&gt; 是一款不可多得的学术级 Markdown 编辑器。它在设计之初就融入了“卡片盒笔记法”（Zettelkasten），旨在无缝连接写作与文献管理。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;官方地址&lt;/strong&gt;：&lt;a href="https://www.zettlr.com/"&gt;https://www.zettlr.com/&lt;/a&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;开源状态&lt;/strong&gt;：&lt;strong&gt;完全开源&lt;/strong&gt;（GPL-3.0 协议）&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;价格模式&lt;/strong&gt;：&lt;strong&gt;完全免费&lt;/strong&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;核心亮点&lt;/strong&gt;：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;深度文献集成&lt;/strong&gt;：原生支持无缝对接 Zotero、JabRef 等文献管理工具，可直接插入 BibTeX 引用格式与生成脚注。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;学术导出扩展&lt;/strong&gt;：基于 Pandoc 引擎，支持将文档导出为 PDF、Word、EPUB 及 LaTeX 等多种格式，满足期刊排版要求。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;自动化辅助&lt;/strong&gt;：内置番茄钟、拼写检查以及自定义代码片段功能，大幅提升长时间写作的效率。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;适用人群&lt;/strong&gt;：学者、研究生、科技文章创作者及卡片盒笔记法实践者。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="2-obsidian基于本地文件的网状知识库"&gt;2. Obsidian：基于本地文件的网状知识库&lt;/h2&gt;&#10;&lt;p&gt;&lt;strong&gt;Obsidian&lt;/strong&gt;（黑曜石）不仅是一个 Markdown 编辑器，更是一个打造“第二大脑”的个人知识管理系统。它以双向链接（Bi-directional Links）和本地纯文本存储为核心理念。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;官方地址&lt;/strong&gt;：&lt;a href="https://obsidian.md/"&gt;https://obsidian.md/&lt;/a&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;开源状态&lt;/strong&gt;：&lt;strong&gt;闭源&lt;/strong&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;价格模式&lt;/strong&gt;：&lt;strong&gt;个人免费&lt;/strong&gt;（商业使用需付费，另提供官方付费同步 Obsidian Sync 服务）&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;核心亮点&lt;/strong&gt;：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;关系图谱（Graph View）&lt;/strong&gt;：以可视化图形展示笔记之间的双向链接关系，帮助发现潜在的思维交集与知识联系。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;强大的插件生态&lt;/strong&gt;：拥有极度活跃的社区，提供数千种插件（从 Kanban 画布、Dataview 数据库查询到 AI 联动），扩展性极强。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;数据自主控制&lt;/strong&gt;：所有文档均以纯文本 Markdown 格式保存在本地硬盘中，不受平台锁定限制，隐私安全性极高。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;适用人群&lt;/strong&gt;：构建知识体系的研究者、开发者、个人资料整理狂人及重度笔记用户。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="3-typora极致无缝的所见即所得标杆"&gt;3. Typora：极致无缝的“所见即所得”标杆&lt;/h2&gt;&#10;&lt;p&gt;如果你追求极致纯粹的写作体验，不希望被左侧代码、右侧预览的分屏布局分散注意力，&lt;strong&gt;Typora&lt;/strong&gt; 无疑是“所见即所得”（WYSIWYG）领域的行业标杆。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;官方地址&lt;/strong&gt;：&lt;a href="https://typora.io/"&gt;https://typora.io/&lt;/a&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;开源状态&lt;/strong&gt;：&lt;strong&gt;闭源&lt;/strong&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;价格模式&lt;/strong&gt;：&lt;strong&gt;买断制收费&lt;/strong&gt;（买断约 $14.99，提供 15 天免费试用）&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;核心亮点&lt;/strong&gt;：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;实时无缝预览&lt;/strong&gt;：输入 Markdown 语法后会自动渲染为最终视觉样式，既保持了排版的美观，又保留了纯文本的精简。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;富文本增强支持&lt;/strong&gt;：内置极佳的表格编辑交互，支持画图引擎（Mermaid）、LaTeX 数学公式渲染以及优雅的代码高亮。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;高度自定义主题&lt;/strong&gt;：支持加载不同的 CSS 主题，方便导出极具视觉美感的 PDF 或 HTML 文档。&lt;/p&gt;</description></item><item><title>使用 MinIO 自建云存储</title><link>https://www.leanku.com/post/tools/%E4%BD%BF%E7%94%A8-minio-%E8%87%AA%E5%BB%BA%E4%BA%91%E5%AD%98%E5%82%A8/</link><pubDate>Mon, 19 May 2025 20:40:01 +0800</pubDate><guid>https://www.leanku.com/post/tools/%E4%BD%BF%E7%94%A8-minio-%E8%87%AA%E5%BB%BA%E4%BA%91%E5%AD%98%E5%82%A8/</guid><description>&lt;h1 id="使用-minio-自建云存储"&gt;使用 MinIO 自建云存储&lt;/h1&gt;&#10;&lt;h2 id="1--minio-是什么"&gt;1. MinIO 是什么&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;em&gt;&lt;strong&gt;定位&lt;/strong&gt;&lt;/em&gt;：一款高性能、开源的 对象存储（Object Storage）系统，完全兼容 AWS S3 API。&lt;/li&gt;&#10;&lt;li&gt;&lt;em&gt;&lt;strong&gt;核心目标&lt;/strong&gt;&lt;/em&gt;：提供轻量级、易部署的私有云存储方案，适用于云原生和大数据场景。&lt;/li&gt;&#10;&lt;li&gt;&lt;em&gt;&lt;strong&gt;开源协议&lt;/strong&gt;&lt;/em&gt;：GNU AGPL v3（商业版提供企业级支持）。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;核心特性&#10;&lt;ol&gt;&#10;&lt;li&gt;高性能:&#10;&lt;ol&gt;&#10;&lt;li&gt;速度优势：支持并行多线程上传/下载，单节点吞吐量可达 10-100 Gbps&lt;/li&gt;&#10;&lt;li&gt;低延迟: 采用 Golang 编写，优化内存管理，响应时间在毫秒级&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;S3 完全兼容&#10;&lt;ol&gt;&#10;&lt;li&gt;无缝迁移：所有 AWS S3 SDK、CLI 工具（如 awscli）可直接对接 MinIO。&lt;/li&gt;&#10;&lt;li&gt;API 支持：覆盖 Put/Get/Object、分片上传、生命周期管理等全部 S3 操作&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;分布式架构&#10;&lt;ol&gt;&#10;&lt;li&gt;纠删码（Erasure Code）：数据分片存储，允许节点故障自动恢复（如 4节点容忍2节点失效）。&lt;/li&gt;&#10;&lt;li&gt;多租户：支持为不同业务创建隔离的存储桶（Bucket）和访问策略。&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;轻量易部署&#10;&lt;ol&gt;&#10;&lt;li&gt;单二进制文件：无需复杂依赖，Docker/Kubernetes 一键部署。&lt;/li&gt;&#10;&lt;li&gt;资源占用低：单节点运行仅需 ~200MB 内存，适合边缘计算和 IoT 设备。&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;适用场景&#10;&lt;ol&gt;&#10;&lt;li&gt;私有云存储&#10;&lt;ul&gt;&#10;&lt;li&gt;替代方案：替代阿里云 OSS、AWS S3，实现数据自主可控。&lt;/li&gt;&#10;&lt;li&gt;用例：企业文档库、备份归档。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;大数据与 AI&#10;&lt;ul&gt;&#10;&lt;li&gt;兼容性：直接对接 Hadoop HDFS、Spark、TensorFlow 的 S3 接口。&lt;/li&gt;&#10;&lt;li&gt;用例：训练数据存储、模型版本管理。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;云原生应用&#10;&lt;ul&gt;&#10;&lt;li&gt;Kubernetes 集成：通过 CSI 驱动为容器提供持久化存储。&lt;/li&gt;&#10;&lt;li&gt;用例：微服务应用的文件共享。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;边缘计算&#10;&lt;ul&gt;&#10;&lt;li&gt;轻量级：在树莓派等设备上运行，就近处理数据。&lt;/li&gt;&#10;&lt;li&gt;用例：物联网设备数据采集。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h2 id="2-部署-minio"&gt;2. 部署 MinIO&lt;/h2&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;方式一: docker部署&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 创建存储目录和配置文件&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;mkdir -p ~/minio/data ~/minio/config&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 使用 Docker 启动 MinIO（单机版）&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt;docker run -d &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt;-p 9000:9000 &lt;span class="se"&gt;\ &lt;/span&gt; &lt;span class="c1"&gt;# API 端口&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt;-p 9001:9001 &lt;span class="se"&gt;\ &lt;/span&gt; &lt;span class="c1"&gt;# 控制台端口&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt;-v ~/minio/data:/data &lt;span class="se"&gt;\ &lt;/span&gt;&lt;span class="c1"&gt;# 持久化存储&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt;-v ~/minio/config:/root/.minio &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt;-e &lt;span class="s2"&gt;&amp;#34;MINIO_ROOT_USER=admin&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt;-e &lt;span class="s2"&gt;&amp;#34;MINIO_ROOT_PASSWORD=yourpassword&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt;--name minio &lt;span class="se"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;13&lt;/span&gt;&lt;span class="cl"&gt;minio/minio server /data --console-address &lt;span class="s2"&gt;&amp;#34;:9001&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#10;&lt;li&gt;方式二: 原生二进制安装（推荐）&#10;&lt;ol&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;下载和安装&lt;/p&gt;</description></item><item><title>使用Bark 实现IOS接收通知</title><link>https://www.leanku.com/post/tools/%E4%BD%BF%E7%94%A8bark-%E5%AE%9E%E7%8E%B0ios%E6%8E%A5%E6%94%B6%E9%80%9A%E7%9F%A5/</link><pubDate>Sun, 11 May 2025 20:46:01 +0800</pubDate><guid>https://www.leanku.com/post/tools/%E4%BD%BF%E7%94%A8bark-%E5%AE%9E%E7%8E%B0ios%E6%8E%A5%E6%94%B6%E9%80%9A%E7%9F%A5/</guid><description>&lt;h1 id="bark-实现ios接收通知"&gt;Bark 实现IOS接收通知&lt;/h1&gt;&#10;&lt;h2 id="1-bark介绍"&gt;1. Bark介绍&lt;/h2&gt;&#10;&lt;pre&gt;&lt;code&gt;免费、轻量！简单调用接口即可给自己的iPhone发送推送。&#10;依赖苹果APNs，及时、稳定、可靠&#10;不会消耗设备的电量， 基于系统推送服务与推送扩展，APP本体并不需要运行。&#10;隐私安全，可以通过一些方式确保包含作者本人在内的所有人都无法窃取你的隐私。&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;h2 id="2-安装"&gt;2. &lt;a href="https://bark.day.app/#/tutorial"&gt;安装&lt;/a&gt;&lt;/h2&gt;&#10;&lt;h3 id="21-appstore-下载bark-允许通知权限"&gt;2.1 AppStore 下载Bark 允许通知权限&lt;/h3&gt;&#10;&lt;p&gt;替换内容去请求给的地址即可接收通知，各参数可参考文档&lt;/p&gt;&#10;&lt;h2 id="2-也可自己部署服务端-bark-server"&gt;2 也可自己部署服务端 bark-server&lt;/h2&gt;&#10;&lt;h3 id="22-下载安装-bark-server"&gt;2.2 下载安装 &lt;a href="https://github.com/Finb/bark-server/releases"&gt;bark-server&lt;/a&gt;&lt;/h3&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 下载二进制，不同系统注意更换版本&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;wget https://github.com/Finb/bark-server/releases/download/v2.2.0/bark-server_linux_amd64&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;4&lt;/span&gt;&lt;span class="cl"&gt;chmod +x bark-server_linux_amd64&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;5&lt;/span&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;6&lt;/span&gt;&lt;span class="cl"&gt;./bark-server_linux_amd64 -addr 0.0.0.0:8080 -data ./bark-data&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="3-使用-systemd服务单元文件来管理-bark-server-的运行"&gt;3. 使用 systemd服务单元文件来管理 bark-server 的运行&lt;/h2&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;创建编辑一个服务单元文件&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;vim /etc/systemd/system/bark-server.service&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;在文件中添加以下内容：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;Unit&lt;span class="o"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;Description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;Bark Server&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;After&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;network.target&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;Service&lt;span class="o"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;ExecStart&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/path/to/your/bark-server_linux_amd64 -addr 0.0.0.0:8080 -data /path/to/your/bark-data&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;Restart&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;always&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;User&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your_username&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;Group&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your_groupname&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;Install&lt;span class="o"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;WantedBy&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;multi-user.target&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;把 /path/to/your/bark-server_linux_amd64 和 /path/to/your/bark-data 替换成实际的文件路径，把 your_username 和 your_groupname 替换成实际的用户名和用户组名。&lt;/p&gt;</description></item><item><title>Gogs 使用指南</title><link>https://www.leanku.com/post/tools/gogs-%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/</link><pubDate>Sun, 11 May 2025 13:46:01 +0800</pubDate><guid>https://www.leanku.com/post/tools/gogs-%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/</guid><description>&lt;h1 id="gogs-使用"&gt;Gogs 使用&lt;/h1&gt;&#10;&lt;h2 id="1-什么是-gogs"&gt;1. 什么是 Gogs?&lt;/h2&gt;&#10;&lt;pre&gt;&lt;code&gt;Gogs 是一款极易搭建的自助 Git 服务。&#10;&#10;Gogs 的目标是打造一个最简单、最快速和最轻松的方式搭建自助 Git 服务。使用 Go 语言开发使得 Gogs 能够通过独立的二进制分发，并且支持 Go 语言支持的 所有平台，包括 Linux、Mac OS X、Windows 以及 ARM 平台。&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;h2 id="2-安装-linux-amd64系统为例"&gt;2. &lt;a href="https://gogs.io/docs/installation"&gt;安装&lt;/a&gt; Linux-amd64系统为例&lt;/h2&gt;&#10;&lt;h3 id="21-要求"&gt;2.1 要求&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;数据库（选择以下一项）&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="http://dev.mysql.com/"&gt;MySQL&lt;/a&gt;：版本 &amp;gt;= 5.7&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="http://www.postgresql.org/"&gt;PostgreSQL&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://github.com/pingcap/tidb"&gt;TiDB&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;或者 什么都不安装 直接使用 SQLite3&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="22-下载安装"&gt;2.2 下载安装&lt;/h3&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 下载二进制&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;wget https://github.com/gogs/gogs/releases/download/v0.13.2/gogs_0.13.2_linux_amd64.tar.gz&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;4&lt;/span&gt;&lt;span class="cl"&gt;tar -xzvf gogs_0.13.2_linux_amd64.tar.gz gogs&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;5&lt;/span&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;6&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; gogs&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;7&lt;/span&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;8&lt;/span&gt;&lt;span class="cl"&gt;./gogs web&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="23-使用-systemd服务单元文件来管理"&gt;2.3 使用 systemd服务单元文件来管理&lt;/h3&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;创建编辑一个服务单元文件&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;vim /etc/systemd/system/gogs.service&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;在文件中添加以下内容：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;Unit&lt;span class="o"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;Description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;Gogs Server&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;After&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;network.target&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;Service&lt;span class="o"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;ExecStart&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/path/gogs web&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;Restart&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;always&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;User&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your_username&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;Group&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your_groupname&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;[&lt;/span&gt;Install&lt;span class="o"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;WantedBy&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;multi-user.target&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;把 /path 替换成实际的文件路径，把 your_username 和 your_groupname 替换成实际的用户名和用户组名。&lt;/p&gt;</description></item><item><title>Harbor 使用</title><link>https://www.leanku.com/post/tools/harbor-%E4%BD%BF%E7%94%A8/</link><pubDate>Thu, 08 May 2025 13:46:01 +0800</pubDate><guid>https://www.leanku.com/post/tools/harbor-%E4%BD%BF%E7%94%A8/</guid><description>&lt;h1 id="harbor-使用"&gt;Harbor 使用&lt;/h1&gt;&#10;&lt;h2 id="1-安装harbor"&gt;1. &lt;a href="https://goharbor.io/docs/2.13.0/install-config/download-installer/"&gt;安装Harbor&lt;/a&gt;&lt;/h2&gt;&#10;&lt;p&gt;此处使用官方离线安装包&lt;/p&gt;&#10;&lt;h3 id="1-下载解压"&gt;1. 下载解压&lt;/h3&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 安装编译依赖&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 安装 Docker&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt;sudo yum install -y yum-utils&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt;sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt;sudo yum install -y docker-ce docker-ce-cli containerd.io&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt;sudo systemctl &lt;span class="nb"&gt;enable&lt;/span&gt; --now docker&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 安装 Docker Compose 页面下载的话注意版本比如 验证系统架构uname -m输出x86_64&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt;sudo curl -L &lt;span class="s2"&gt;&amp;#34;https://github.com/docker/compose/releases/download/v2.23.3/docker-compose-&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;uname -s&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;-&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;uname -m&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; -o /usr/local/bin/docker-compose&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt;sudo chmod +x /usr/local/bin/docker-compose&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 下载Harbor并解压 (我用的离线安装包包含所有依赖镜像)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;13&lt;/span&gt;&lt;span class="cl"&gt;wget https://github.com/goharbor/harbor/releases/download/v2.12.3/harbor-offline-installer-v2.12.3.tgz&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;14&lt;/span&gt;&lt;span class="cl"&gt;tar -xzvf harbor-offline-installer-v2.12.3.tgz&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;15&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; harbor&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="2-生成自签名证书ip方式"&gt;2. 生成自签名证书（IP方式）&lt;/h3&gt;&#10;&lt;p&gt;&lt;strong&gt;如果使用http则不需要设置&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Chrome 插件开发实战：一键把当前页面存为 Markdown</title><link>https://www.leanku.com/post/tools/chrome-extension-development-practice/</link><pubDate>Wed, 22 Jan 2025 00:00:00 +0800</pubDate><guid>https://www.leanku.com/post/tools/chrome-extension-development-practice/</guid><description>&lt;p&gt;从一行代码到 Chrome Web Store 上架。本文用一个具体例子走通 Chrome 插件开发完整流程：manifest.json、content script、popup 通信、文件下载、用户偏好存储、上架审核。&lt;/p&gt;&#10;&lt;h2 id="为什么要做这个插件"&gt;为什么要做这个插件&lt;/h2&gt;&#10;&lt;p&gt;我经常在浏览器里看技术文章。看到好的想存到 Obsidian，复制粘贴格式全乱。打开&amp;quot;另存为&amp;quot;保存下来是带广告、导航栏、侧边栏的 HTML。想找一个干净的 Markdown 版本，要么没有，要么是闭源插件不敢装。&lt;/p&gt;&#10;&lt;p&gt;装个现成插件不放心。写个 userscript 分发麻烦。干脆自己写一个。&lt;/p&gt;&#10;&lt;p&gt;这是个&amp;quot;改造已有网站&amp;quot;的小工具，Chrome 插件是最合适的形态。如果你还不确定插件是不是解决你问题的最佳方案，可以先看 &lt;a href="https://www.leanku.com/post/tools/chrome-extension-development-intro/"&gt;《Chrome 插件开发》&lt;/a&gt;。&lt;/p&gt;&#10;&lt;h2 id="我们要做的版本"&gt;我们要做的版本&lt;/h2&gt;&#10;&lt;p&gt;最终交付一个能本地转、能下载、能存用户偏好的插件：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;点击工具栏图标，弹出一个 popup&lt;/li&gt;&#10;&lt;li&gt;popup 上一个按钮&amp;quot;保存为 Markdown&amp;quot;&lt;/li&gt;&#10;&lt;li&gt;点击后，把当前页面转成干净的 Markdown，触发下载&lt;/li&gt;&#10;&lt;li&gt;几个 checkbox 让用户自定义：是否包含图片、是否包含代码块、文件名格式&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;这个版本足够简单，又覆盖了插件开发的核心链路：content script、popup 通信、文件下载、用户偏好存储。&lt;/p&gt;&#10;&lt;h2 id="准备工作"&gt;准备工作&lt;/h2&gt;&#10;&lt;p&gt;&lt;strong&gt;需要：&lt;/strong&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Chrome 浏览器（任何最近版本都行）&lt;/li&gt;&#10;&lt;li&gt;一个空文件夹&lt;/li&gt;&#10;&lt;li&gt;一个文本编辑器&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;strong&gt;不需要：&lt;/strong&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Node.js&lt;/li&gt;&#10;&lt;li&gt;npm&lt;/li&gt;&#10;&lt;li&gt;任何前端框架&lt;/li&gt;&#10;&lt;li&gt;任何构建工具&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;整个项目就是几个静态文件，加一个第三方库。装一个依赖就要搭构建，搭构建就要讲 webpack / vite / TypeScript，整个文章会跑偏。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;第三方库：Turndown.js&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;用来把 HTML 转成 Markdown。同类插件 80% 在用，成熟稳定。&lt;/p&gt;&#10;&lt;p&gt;下载地址：&lt;a href="https://unpkg.com/turndown@7.2.0/dist/turndown.js"&gt;https://unpkg.com/turndown@7.2.0/dist/turndown.js&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;下载下来保存到 &lt;code&gt;vendor/turndown.js&lt;/code&gt;（自己创建 &lt;code&gt;vendor&lt;/code&gt; 目录）。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;项目结构：&lt;/strong&gt;&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;markdown-saver/&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;├── manifest.json&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt;├── content.js&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt;├── popup.html&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt;├── popup.js&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt;├── icons/&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt;│ ├── icon16.png&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt;│ ├── icon32.png&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt;│ ├── icon48.png&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt;│ └── icon128.png&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt;└── vendor/&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt; └── turndown.js&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;图标先随便找 4 张占位图（每个尺寸一张），后面会讲商店要求。&lt;/p&gt;</description></item><item><title>Chrome 插件开发</title><link>https://www.leanku.com/post/tools/chrome-extension-development-intro/</link><pubDate>Wed, 15 Jan 2025 00:00:00 +0800</pubDate><guid>https://www.leanku.com/post/tools/chrome-extension-development-intro/</guid><description>&lt;h2 id="从一个真实问题开始"&gt;从一个真实问题开始&lt;/h2&gt;&#10;&lt;p&gt;我经常在浏览器里看技术文章。看到好的想存到 Obsidian，复制粘贴格式全乱。打开&amp;quot;另存为&amp;quot;保存下来是带广告、导航栏、侧边栏的 HTML。想找一个干净的 Markdown 版本，要么没有，要么是闭源插件不敢用。&lt;/p&gt;&#10;&lt;p&gt;于是我开始想：我能不能自己写一个？&lt;/p&gt;&#10;&lt;p&gt;这是个典型的&amp;quot;想动手&amp;quot;时刻。但真正动手之前，有几个更前置的问题需要想清楚：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Chrome 插件到底是什么？和 userscript、网页工具、PWA 差在哪？&lt;/li&gt;&#10;&lt;li&gt;我想做的这个事，到底该用哪种形态？&lt;/li&gt;&#10;&lt;li&gt;学 Chrome 插件的&amp;quot;投资回报&amp;quot;如何？是一次性投入还是持续折腾？&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;写这篇文章的目的，是在你打开 &lt;code&gt;manifest.json&lt;/code&gt; 之前，帮你想清楚这三个问题。&lt;/p&gt;&#10;&lt;h2 id="插件是什么"&gt;插件是什么&lt;/h2&gt;&#10;&lt;p&gt;先把&amp;quot;插件&amp;quot;这个词拆开看。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Chrome 插件&lt;/strong&gt;（Chrome Extension），也叫浏览器扩展，本质上是一段运行在 Chrome 浏览器里的代码。它能访问一些普通网页拿不到的 API，比如读取当前标签页的 URL、修改请求头、在用户点击工具栏图标时弹出一个小页面。&lt;/p&gt;&#10;&lt;p&gt;可以把它理解为：&lt;/p&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;&lt;strong&gt;插件 = 对浏览器的扩展能力 + 对已有网站的增强能力&lt;/strong&gt;&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;p&gt;注意两个关键词：&lt;strong&gt;&amp;ldquo;对浏览器&amp;rdquo;&lt;/strong&gt; 和 &lt;strong&gt;&amp;ldquo;对已有网站&amp;rdquo;&lt;/strong&gt;。这两个词决定了插件能做什么、不能做什么。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;对浏览器&lt;/strong&gt;意味着插件能拿到浏览器层面的能力，比如：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;操作标签页（关闭、新建、切换）&lt;/li&gt;&#10;&lt;li&gt;读取和修改浏览器历史&lt;/li&gt;&#10;&lt;li&gt;拦截和修改网络请求&lt;/li&gt;&#10;&lt;li&gt;在工具栏添加图标&lt;/li&gt;&#10;&lt;li&gt;监听键盘快捷键&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;strong&gt;对已有网站&lt;/strong&gt;意味着插件的核心战场是&amp;quot;改造现有网站&amp;quot;，比如：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;给维基百科加一个深色模式&lt;/li&gt;&#10;&lt;li&gt;给 GitHub 加一个一键复制文件链接的按钮&lt;/li&gt;&#10;&lt;li&gt;给掘金、知乎、CSDN 屏蔽某些干扰元素&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;strong&gt;插件能做什么、不能做什么&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;能做的：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;改造已有网站（修改 DOM、注入脚本）&lt;/li&gt;&#10;&lt;li&gt;提供一个常驻工具栏入口（点击图标触发动作）&lt;/li&gt;&#10;&lt;li&gt;跨页面保存数据（用户的偏好、笔记、历史）&lt;/li&gt;&#10;&lt;li&gt;监听浏览器事件（标签页变化、下载事件）&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;不能做（或做起来很费劲）：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;完全独立的产品（需要服务端配合的复杂功能）&lt;/li&gt;&#10;&lt;li&gt;移动端体验（Chrome 插件不适用于移动浏览器）&lt;/li&gt;&#10;&lt;li&gt;高性能要求的事（不适合跑复杂的计算任务）&lt;/li&gt;&#10;&lt;li&gt;跨浏览器一致体验（Firefox、Edge、Safari 各有差异）&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="什么时候该用插件"&gt;什么时候该用插件&lt;/h2&gt;&#10;&lt;p&gt;给几个真实场景，帮你判断。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;适合用插件的场景：&lt;/strong&gt;&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&lt;strong&gt;改造已有网站&lt;/strong&gt;：给某个你不喜欢的网站加功能或去干扰&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;跨页面工具&lt;/strong&gt;：复制当前页面内容、抓取数据、自动填表&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;浏览器层的小工具&lt;/strong&gt;：标签页管理、下载管理、截图、翻译&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;给开发者自己用&lt;/strong&gt;：调试、API 测试、页面抓取&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;&lt;strong&gt;不适合用插件的场景：&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>视频内容处理工具分享之 VideoLingo</title><link>https://www.leanku.com/post/tools/%E8%A7%86%E9%A2%91%E5%86%85%E5%AE%B9%E5%A4%84%E7%90%86%E5%B7%A5%E5%85%B7%E5%88%86%E4%BA%AB%E4%B9%8B-videolingo/</link><pubDate>Sat, 11 Jan 2025 20:46:01 +0800</pubDate><guid>https://www.leanku.com/post/tools/%E8%A7%86%E9%A2%91%E5%86%85%E5%AE%B9%E5%A4%84%E7%90%86%E5%B7%A5%E5%85%B7%E5%88%86%E4%BA%AB%E4%B9%8B-videolingo/</guid><description>&lt;h1 id="视频内容处理工具分享之-videolingo"&gt;视频内容处理工具分享之 VideoLingo&lt;/h1&gt;&#10;&lt;p&gt;&lt;a href="https://github.com/Huanshere/VideoLingo"&gt;VideoLingo&lt;/a&gt; 是目前处理视频技术内容最强的开源工具之一。它的核心优势在于不仅仅是“语音转文字”，它还会利用 AI（如 DeepSeek 或 GPT）对内容进行 NLP 断句（让文字像书一样好读）并生成总结。&lt;/p&gt;&#10;&lt;h2 id="一安装方式"&gt;一、安装方式：&lt;/h2&gt;&#10;&lt;h3 id="1-最简单一键整合包适合-windows-用户"&gt;1. 最简单“一键整合包”（适合 Windows 用户）&lt;/h3&gt;&#10;&lt;p&gt;如果你不想折腾 Python 环境，可以寻找社区维护的&lt;strong&gt;一键整合包&lt;/strong&gt;（如 GitHub 上的 &lt;code&gt;VideoLingo-OneClick&lt;/code&gt; 项目）。&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;下载&lt;/strong&gt;：从网盘或 GitHub Releases 下载解压包。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;启动&lt;/strong&gt;：双击 &lt;code&gt;启动软件.exe&lt;/code&gt; 或 &lt;code&gt;一键启动.bat&lt;/code&gt;。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;配置&lt;/strong&gt;：它会弹出一个网页界面。在左侧填入你的 &lt;strong&gt;LLM API Key&lt;/strong&gt;（支持 DeepSeek、OpenAI 等，技术总结必须用到大模型）。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h3 id="2-标准安装"&gt;2. 标准安装&lt;/h3&gt;&#10;&lt;p&gt;如果你想体验最新功能，建议通过源码安装：&lt;/p&gt;&#10;&lt;h4 id="1-准备环境"&gt;1. 准备环境&lt;/h4&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;安装 &lt;strong&gt;Python 3.10&lt;/strong&gt;（必须是这个版本）。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;安装 &lt;strong&gt;FFmpeg&lt;/strong&gt;（参考上一个回答）。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;如果你有 NVIDIA 显卡，建议安装 &lt;strong&gt;CUDA Toolkit 12.6&lt;/strong&gt; 以获得加速。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h4 id="2-源码下载与安装-在终端terminalcmd中执行"&gt;2. 源码下载与安装 在终端（Terminal/CMD）中执行：&lt;/h4&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 1. 克隆项目&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;git clone https://github.com/Huanshere/VideoLingo.git&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; VideoLingo&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 2. 安装依赖（需要 python=3.10 建议使用 conda)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt;conda create -n videolingo &lt;span class="nv"&gt;python&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;3.10.0 -y&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt;conda activate videolingo&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 3. 运行安装脚本&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt;python install.py&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="3-启动应用"&gt;3. 启动应用&lt;/h4&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;streamlit run st.py&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="3-docker安装"&gt;3. docker安装&lt;/h3&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 拉取镜像&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;docker pull rqlove/videolingo:latest&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;4&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 启动容器（CPU 模式 去掉--gpus all）&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;5&lt;/span&gt;&lt;span class="cl"&gt;docker run -d -p 8501:8501 --name videolingo rqlove/videolingo:latest&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;在浏览器输入 http://localhost:8501&lt;/p&gt;</description></item><item><title>视频下载工具分享之 yt-dlp</title><link>https://www.leanku.com/post/tools/%E8%A7%86%E9%A2%91%E4%B8%8B%E8%BD%BD%E5%B7%A5%E5%85%B7%E5%88%86%E4%BA%AB%E4%B9%8B-yt-dlp/</link><pubDate>Fri, 10 Jan 2025 20:46:01 +0800</pubDate><guid>https://www.leanku.com/post/tools/%E8%A7%86%E9%A2%91%E4%B8%8B%E8%BD%BD%E5%B7%A5%E5%85%B7%E5%88%86%E4%BA%AB%E4%B9%8B-yt-dlp/</guid><description>&lt;h1 id="视频下载工具分享之-yt-dlp"&gt;视频下载工具分享之 yt-dlp&lt;/h1&gt;&#10;&lt;p&gt;&lt;a href="https://github.com/yt-dlp/yt-dlp?tab=readme-ov-file#installation"&gt;yt-dlp&lt;/a&gt; 是一个功能强大的开源命令行视频下载工具，它本身不需要像常规软件那样运行安装程序。&lt;/p&gt;&#10;&lt;h2 id="一安装方式"&gt;一、安装方式：&lt;/h2&gt;&#10;&lt;h3 id="1-windows-用户最简单方法"&gt;1. Windows 用户（最简单方法）&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;下载 exe 文件&lt;/strong&gt;：前往 &lt;a href="https://www.google.com/search?q=https://github.com/yt-dlp/yt-dlp/releases/latest"&gt;yt-dlp GitHub 释放页&lt;/a&gt;，找到并下载 &lt;code&gt;yt-dlp.exe&lt;/code&gt;。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;创建文件夹&lt;/strong&gt;：建议在 C 盘或 D 盘根目录创建一个文件夹（如 &lt;code&gt;D:\ytdlp&lt;/code&gt;），将下载好的 &lt;code&gt;.exe&lt;/code&gt; 放进去。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;安装 FFmpeg (重要依赖)&lt;/strong&gt;：为了能下载高画质视频并自动合并音视频，你必须下载 &lt;strong&gt;FFmpeg&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;在同一目录下放入 &lt;code&gt;ffmpeg.exe&lt;/code&gt;。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;添加到 PATH (可选但建议)：将该文件夹路径添加到系统的“环境变量”中，这样你就可以在任何地方的终端直接输入 yt-dlp 使用它了。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="2-macos-用户"&gt;2. macOS 用户&lt;/h3&gt;&#10;&lt;p&gt;推荐使用 &lt;strong&gt;Homebrew&lt;/strong&gt; 快速安装：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;打开终端（Terminal），输入：&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;brew install yt-dlp ffmpeg&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="3-linux-用户"&gt;3. Linux 用户&lt;/h3&gt;&#10;&lt;p&gt;大多数发行版可以直接通过包管理器安装：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;Ubuntu/Debian&lt;/strong&gt;: &lt;code&gt;sudo apt install yt-dlp&lt;/code&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;Arch Linux&lt;/strong&gt;: &lt;code&gt;sudo pacman -S yt-dlp&lt;/code&gt; 或者直接下载二进制文件：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;sudo wget https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -O /usr/local/bin/yt-dlp&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;sudo chmod a+rx /usr/local/bin/yt-dlp&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="4-通用安装方式-python-用户"&gt;4. 通用安装方式 (Python 用户)&lt;/h3&gt;&#10;&lt;p&gt;如果你电脑里装了 Python，可以直接用 pip 安装：&lt;/p&gt;</description></item><item><title>Logstash</title><link>https://www.leanku.com/post/tools/logstash/</link><pubDate>Tue, 20 Feb 2024 17:01:01 +0800</pubDate><guid>https://www.leanku.com/post/tools/logstash/</guid><description>&lt;h1 id="logstash"&gt;Logstash&lt;/h1&gt;&#10;&lt;h2 id="alogstash-介绍"&gt;ALogstash 介绍&lt;/h2&gt;&#10;&lt;p&gt;Logstash 是一个开源的日志收集、处理和转发工具，通常与 Elasticsearch 和 Kibana 一起组成 Elastic Stack，用于集中式日志管理和数据分析。它支持多种数据源、数据处理及输出目标，常用于日志的收集和处理。&lt;/p&gt;&#10;&lt;h2 id="1-安装-logstash"&gt;1. 安装 Logstash&lt;/h2&gt;&#10;&lt;p&gt;Logstash 支持多种操作系统，安装方式可以使用包管理工具、压缩包或 Docker。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;a. 通过 apt 安装（以 Ubuntu 为例）&lt;/strong&gt;&#10;首先，添加 Elastic 的 APT 仓库：&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -&#10;sudo sh -c &amp;#39;echo &amp;#34;deb https://artifacts.elastic.co/packages/7.x/apt stable main&amp;#34; &amp;gt; /etc/apt/sources.list.d/elastic-7.x.list&amp;#39;&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;然后，更新 APT 仓库并安装 Logstash：&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;udo apt-get update&#10;sudo apt-get install logstash&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;b. 使用 .tar.gz 包安装&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;可以从官网（https://www.elastic.co/downloads/logstash）下载压缩包，解压并安装。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;tar -xvzf logstash-7.x.x.tar.gz&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; logstash-7.x.x&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="2-配置-logstash"&gt;2. 配置 Logstash&lt;/h2&gt;&#10;&lt;p&gt;Logstash 的配置文件通常由 3 个部分组成：&lt;strong&gt;输入（input）&lt;/strong&gt;、&lt;strong&gt;过滤器（filter）&lt;/strong&gt; 和 &lt;strong&gt;输出（output）&lt;/strong&gt;。&lt;/p&gt;</description></item><item><title>Brew 使用指南</title><link>https://www.leanku.com/post/tools/brew-%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/</link><pubDate>Thu, 11 May 2023 20:46:01 +0800</pubDate><guid>https://www.leanku.com/post/tools/brew-%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/</guid><description>&lt;h1 id="brew-使用指南"&gt;Brew 使用指南&lt;/h1&gt;&#10;&lt;h2 id="一什么是-brew"&gt;一、什么是 brew？&lt;/h2&gt;&#10;&lt;p&gt;全程：Homebrew&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;macOS（或 Linux）软件&lt;strong&gt;包管理器&lt;/strong&gt;。它可以让你轻松地安装、更新、卸载软件，解决软件依赖关系，你不再需要手动下载、拖拽安装或处理复杂的编译选项。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Homebrew 会将软件包安装到独立目录，并将其文件软链接至 /opt/homebrew 。&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;a href="https://brew.sh/zh-cn/"&gt;brew官网&lt;/a&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="二安装-homebrew"&gt;二、安装 Homebrew&lt;/h2&gt;&#10;&lt;p&gt;在终端（Terminal）中执行以下命令：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;/bin/bash -c &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;安装完成后，运行以下命令确保 Brew 工作正常：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;brew doctor&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="三基础使用命令"&gt;三、基础使用命令&lt;/h2&gt;&#10;&lt;h3 id="1-安装软件"&gt;1. 安装软件&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;安装命令行工具（Formula）：&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;brew install &amp;lt;formula_name&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 示例：安装 wget, tree, node&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;brew install wget tree node&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#10;&lt;li&gt;安装图形界面应用（Cask）&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;brew install --cask &amp;lt;cask_name&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 示例：安装 Chrome, VS Code, Spotify&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;brew install --cask google-chrome visual-studio-code spotify&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="2-查询软件"&gt;2. 查询软件&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;搜索软件（不确定完整包名时非常有用）：&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;brew search &amp;lt;keyword&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 示例：搜索所有与 python 相关的包&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;brew search python&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#10;&lt;li&gt;查看已安装的软件列表：&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;brew list &lt;span class="c1"&gt;# 列出所有通过 Formula 安装的命令行工具&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;brew list --cask &lt;span class="c1"&gt;# 列出所有通过 Cask 安装的应用程序&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#10;&lt;li&gt;查看某个软件的信息：&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;brew info &amp;lt;formula_name&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;brew info --cask &amp;lt;cask_name&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="3-更新软件"&gt;3. 更新软件&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;更新 Homebrew 自身（获取最新的 Formula 和 Cask 列表）：&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;brew update&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#10;&lt;li&gt;检查哪些软件可以更新：&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;brew outdated&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#10;&lt;li&gt;更新所有软件：&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;brew upgrade&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#10;&lt;li&gt;更新指定软件：&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;brew upgrade &amp;lt;formula_name&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#10;&lt;li&gt;更新 Cask 应用： 对于 Cask 应用，upgrade 命令同样有效。如果应用有自动更新功能（如 Chrome），则可能无需通过 Brew 更新。&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;brew upgrade --cask &amp;lt;cask_name&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="4-卸载软件"&gt;4. 卸载软件&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;卸载软件：&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;brew uninstall &amp;lt;formula_name&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;brew uninstall --cask &amp;lt;cask_name&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#10;&lt;li&gt;清理旧版本和缓存： Homebrew 会保留旧版本和下载缓存，定期清理可以节省空间。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;brew cleanup &lt;span class="c1"&gt;# 清理所有旧版本软件的缓存&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;brew cleanup &amp;lt;formula_name&amp;gt; &lt;span class="c1"&gt;# 清理指定软件的缓存&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;brew cleanup -n &lt;span class="c1"&gt;# 查看哪些会被清理，但不实际执行（干跑）&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="四-高级用法"&gt;四、 高级用法&lt;/h2&gt;&#10;&lt;h3 id="1-管理服务services"&gt;1. 管理服务（Services）&lt;/h3&gt;&#10;&lt;p&gt;Homebrew 可以像 systemd 一样管理一些后台服务（如 MySQL, Nginx, PostgreSQL）。&lt;/p&gt;</description></item><item><title>Netlify部署静态网站</title><link>https://www.leanku.com/post/tools/netlify%E9%83%A8%E7%BD%B2%E9%9D%99%E6%80%81%E7%BD%91%E7%AB%99/</link><pubDate>Sat, 22 Oct 2022 00:00:00 +0000</pubDate><guid>https://www.leanku.com/post/tools/netlify%E9%83%A8%E7%BD%B2%E9%9D%99%E6%80%81%E7%BD%91%E7%AB%99/</guid><description>&lt;p&gt;&lt;strong&gt;关于Netlify&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;在它的主页上可以看到它的宣传语：&lt;/p&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;用最快的方式构建最快的网站。&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;p&gt;&lt;a href="https://docs.netlify.com/"&gt;&lt;strong&gt;官方文档&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;为什么选择Netlify&lt;/strong&gt;&lt;/p&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;内置 CI/CD 支持自动构建拉取代码仓库，每次提交的自动构建并发布预览&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;能够托管服务免费 CDN&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;能够绑定自定义域名&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;能够启用免费的TLS证书启用HTTPS&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;提供 Webhooks 和 API&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;通过内置应用程序添加动态功能&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;p&gt;&lt;em&gt;&lt;strong&gt;部署一个静态网站就非常简单，此处以GitHub仓库为例&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;静态网站push到GitHub仓库&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;进入&lt;a href="https://app.netlify.com"&gt;netlify&lt;/a&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;登录 直接使用GitHub账号，授权&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;创建网站 点击New site from Git&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;选择仓库&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;ol start="2"&gt;&#10;&lt;li&gt;选择分支（Branch to deploy）&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;4.3 打包命令 （Build command）诸如 npm run build，gulp build 之类；如果本身已是静态文件，不需打包编译，这一栏则不填&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;4.4 打包后目录 （Publish directory）诸如 public,dist，_site 之类；如果本身已是静态文件，这一栏则不填&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;4.5 deploy site&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;ol start="5"&gt;&#10;&lt;li&gt;设置域名 netlify会随机生成了一个netlify下的域名，我们可以更改其前缀，并绑定到我们自己的域名下：&#10;Site settings-&amp;gt;Change site name 更换默认域名&#10;Domain settings-&amp;gt;Add custom domain添加域名，然后到域名服务商网站绑定的域名下添加一条CNAME解析，解析的主机记录即对应的netlify域名值（即 xx.netlify.com）&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;关于.netlify.toml自动部署参阅文档 &lt;a href="https://docs.netlify.com/configure-builds/file-based-configuration/"&gt;https://docs.netlify.com/configure-builds/file-based-configuration/&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;更多操作后续更新。。。&lt;/p&gt;</description></item><item><title>Hello Hugo</title><link>https://www.leanku.com/post/tools/hello-hugo/</link><pubDate>Fri, 21 Oct 2022 00:00:00 +0000</pubDate><guid>https://www.leanku.com/post/tools/hello-hugo/</guid><description>&lt;p&gt;Hugo 是用 &lt;a href="http://golang.org/"&gt;Go&lt;/a&gt; 语言写的，支持多个平台 包括 Windows, Linux, FreeBSD 和 OS X (Darwin) for x64, i386 和 ARM architectures.&lt;/p&gt;&#10;&lt;p&gt;&lt;a href="https://gohugo.io/overview/introduction/"&gt;&lt;strong&gt;官方文档&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;为什么选择hugo&lt;/strong&gt;&lt;/p&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;通过 Hugo 你可以快速搭建你的&lt;strong&gt;静态网站&lt;/strong&gt;，比如博客系统、文档介绍、公司主页、产品介绍等等。相对于其他静态网站生成器来说，Hugo 具备如下特点：&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;极快的页面编译生成速度。（ ~1 ms 每页面）&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;完全跨平台支持，可以运行在 Mac OS X, Linux, Windows, 以及更多!&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;安装方便 &lt;a href="https://www.gohugo.org/doc/overview/installing/"&gt;Installation&lt;/a&gt;&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;本地调试 &lt;a href="https://www.gohugo.org/doc/overview/usage/"&gt;Usage&lt;/a&gt; 时通过 &lt;a href="https://www.gohugo.org/doc/extras/livereload/"&gt;LiveReload&lt;/a&gt; 自动即时刷新页面。&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;完全的皮肤支持。&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;可以部署在任何的支持 HTTP 的服务器上。&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;h2 id="一安装"&gt;一.安装&lt;/h2&gt;&#10;&lt;p&gt;下载最新的 release 版本 &lt;a href="https://github.com/spf13/hugo/releases"&gt;Hugo Releases&lt;/a&gt;， Windows, Linux, FreeBSD 和 OS X (Darwin) for x64, i386 和 ARM architectures.&lt;/p&gt;&#10;&lt;p&gt;Windows安装时需要加入环境变量&lt;/p&gt;&#10;&lt;p&gt;Mac就比较方便直接执行：&lt;code&gt;brew install hugo&lt;/code&gt;&lt;/p&gt;&#10;&lt;p&gt;安装成功之后的操作如下&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#查看版本&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;hugo version&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#创建站点 如在当前目录创建名为blog的站点&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt;hugo new site blog&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; blog&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#目录如下&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt; ▸ archetypes/&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt; ▸ doc/content/&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt; ▸ data/&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt; ▸ layouts/&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt; ▸ static/&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt; config.toml&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="二创建文章"&gt;二.创建文章&lt;/h2&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#创建文章&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;hugo new post/first.md&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;4&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#新创建的文件会在 content/post/first.md&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="三安装主题"&gt;三.安装主题&lt;/h2&gt;&#10;&lt;p&gt;找到心仪的&lt;a href="https://themes.gohugo.io/"&gt;&lt;strong&gt;主题&lt;/strong&gt;&lt;/a&gt;，以PaperMod为例&lt;/p&gt;</description></item></channel></rss>