Git Submodule 是一个强大但常被误解的功能。它允许你将一个 Git 仓库嵌入到另一个 Git 仓库中,保持两者的独立性。本文将带你全面了解 Submodule 的工作原理和实际应用。 什么是 Git Submodule? Git Submodule 允许你将一个 Git 仓库作为另一个 Git 仓库的子目录。它能保持子项目独立开发的同时,将子项目纳入主项目的版本控制中。 典型使用场景 库的复用:多个项目共享同一个代码库 第三方依赖:管理开源库或框架的特定版本 主题管理:如 Hugo 博客使用第三方主题 微服务架构:相关服务的代码组织 基础操作 添加 Submodule 1# 基本语法 2git submodule add …
Read More在现代 Linux 系统管理中,网络文件系统(Network File System,NFS)扮演着至关重要的角色。无论是 Web 服务器集群共享静态资源、容器环境下的持久化存储,还是企业级的备份集中化存储,NFS 都是不可或缺的基础设施组件。 本文将系统性地介绍 NFS 的核心概念、从基础配置到高级应用、从性能调优到安全加固,帮助你全面掌握这一强大的网络存储技术。 NFS 核心概念 什么是 NFS? NFS(Network File System)是由 Sun Microsystems 开发的分布式文件系统协议,允许客户端系统像访问本地文件一样访问远程服务器上的文件。NFS 基于 ONC RPC(Open Network …
Read More在当今的互联网环境中,HTTPS 已成为网站的标配。Let's Encrypt 提供免费的 SSL 证书,使得任何网站都能轻松启用加密连接。acme.sh 是一款优秀的 ACME 协议客户端,它完全用 Shell 脚本编写,无需 Python 等依赖,支持多种验证方式和 DNS 提供商,是证书自动化管理的理想选择。 本文将全面介绍 acme.sh 的安装方法、核心功能以及实际应用场景,帮助你构建自动化的 SSL 证书管理体系。 acme.sh 核心概念 什么是 acme.sh? acme.sh 是一个用纯 Shell 语言编写的 ACME 协议客户端,用于从 Let's Encrypt、ZeroSSL、Buypass 等 CA 机构 …
Read More在 Golang 开发过程中,经常需要在不同项目间切换使用不同版本的 Go。有的项目依赖 Go 1.18,有的需要 Go 1.21,还有的可能要测试最新的 Go 1.22 beta 版本。手动安装和切换多个 Go 版本不仅繁琐,还容易出错。goenv 是一个简单高效的 Golang 多版本管理工具,它借鉴了 rbenv 和 pyenv 的设计理念,通过 shim 机制实现了优雅的版本切换。 简介 什么是 goenv goenv(syndbg/goenv)是一个 Golang 多版本管理工具,允许用户在同一台机器上安装、管理和切换多个 Go 版本。它的设计灵感来自于 Ruby 的 rbenv 和 Python 的 pyenv,因此如果 …
Read MoreChrony 是一款开源的网络时间协议 (NTP) 实现,专为 Linux 系统设计。相比于传统的 ntpd,Chrony 在处理不稳定的网络环境、间歇性网络连接以及虚拟机环境时表现更为出色。 Chrony vs ntpd 特性 Chrony ntpd 网络中断恢复 快速同步 同步较慢 虚拟机支持 优秀 一般 时钟频率调整 动态调整 固定调整 配置复杂度 简单 较复杂 内存占用 较低 较高 安装 Chrony Debian/Ubuntu 1sudo apt update 2sudo apt install chrony RHEL/CentOS/Rocky/AlmaLinux 1sudo dnf install chrony Arch …
Read More在Linux系统管理中,防火墙是保障服务器安全的第一道防线。对于许多系统管理员而言,直接配置底层的 iptables 规则往往过于复杂且容易出错。UFW(Uncomplicated Firewall,即简单防火墙)正是为了解决这一痛点而诞生的。作为 Ubuntu 和 Debian 系统的默认防火墙配置工具,UFW 通过简洁的命令行语法封装了复杂的 iptables 规则,让用户能够轻松、高效地管理防火墙策略。 本文将详细介绍 UFW 的核心概念、安装步骤以及常见场景下的配置方法,帮助你快速构建坚固的系统安全屏障。 UFW 核心概念 什么是 UFW? UFW 是 iptables 的前端工具,设计目标是简化防火墙管理。它将复杂的 …
Read MoreGo 语言内置了强大的测试框架,通过 go test 命令可以方便地进行单元测试、基准测试和示例测试。 基本概念 测试文件以 _test.go 结尾 测试函数以 Test 开头,参数为 *testing.T 基准测试函数以 Benchmark 开头,参数为 *testing.B 示例函数以 Example 开头,无参数 常用命令 1go test # 运行当前目录下的所有测试 2go test -v # 显示详细输出 3go test -run TestName # 运行指定的测试函数 4go test ./... # 递归测试所有子目录 5go test -cover # 显示测试覆盖率 6go test -bench . # 运 …
Read MoreDelve是Go语言专用调试工具,支持断点、单步执行和变量查看。通过go install安装后可用dlv debug调试程序,dlv test调试测试,支持命令行与VS Code等IDE集成,提升开发效率。 在Go语言开发中,调试是排查问题的重要环节。Delve(dlv)是专为Go设计的调试器,功能强大且使用方便。它支持断点、变量查看、单步执行等常见调试操作,特别适合在命令行或IDE中集成使用。 安装 Delve 1# 方法1: 使用 go install (推荐) 2go install github.com/go-delve/delve/cmd/dlv@latest 3 4# 方法2: 从源码安装 5git clone …
Read MoreShell 数组和 for 循环的最佳实践在于确保代码的健壮性 (Robustness),尤其是在处理包含空格或特殊字符的数组元素时。 🧩 一、定义数组的标准写法 1# ✅ 正确:使用括号 + 双引号,保证空格安全 2dirs=( 3 "/opt/app/logs" 4 "/opt/app data" 5 "/tmp/test" 6) ❌ 错误写法: 1dirs=/opt/app/logs /opt/app data /tmp/test 这会被当成多个命令执行。 🔁 二、安全遍历数组 ✅ 推荐写法 1for dir in "${dirs[@]}"; do 2 echo "Processing directory: $dir" …
Read MoreLinux中的less命令主要用来浏览文件内容,与more命令的用法相似,不同于more命令的是,less命令可往回卷动浏览以看过的部分。less的用法比起more更加的有弹性。在more的时候,我们并没有办法向前面翻,只能往后面看,但若使用了less时,就可以使用 [pageup] [pagedown]等按键的功能来往前往后翻看文件,更容易用来查看一个文件的内容!除此之外,在less里头可以拥有更多的搜索功能,不止可以向下搜,也可以向上搜。 命令格式 less [参数] 文件 命令功能 less和more类似,但是使用less可以随意浏览文件,而more仅能向前移动,却不能向后移动,more启动时会加载整个文件。而且less在查看 …
Read More