Appearance
shell 是基于命令式编程的,在众多方面特性的处理上,与其他通用高级语言不同。shell 的每一行都可以看作是一个命令,每行的第一个单词代表了命令的名称,
shell 的语法内容包括三个部分:
注释
#! /bin/bash # shebang,在脚本的第一行,用于指定解释器,例如:。 #:单行注释;
变量
shell 的变量是基于字符串的,变量没有类型,都是字符串。变量名和等号之间不能有空格,变量名只能包含字母、数字和下划线,且不能以数字开头。如果需要空格需要使用引号。
var=12 # 直接赋值 var1="hello $var" # 双引号赋值,双引号可以展开变量并保留特殊符号的转义。 var='hello' # 单引号赋值,单引号不能展开变量,也不能保留特殊符号的转义。 var=`echo "hello"` # 反引号赋值,反引号可以执行命令并返回结果。 var=$(echo "hello") var1=${var}
由于 shell 的变量是基于字符串的,因此,在进行数值计算的时候,需要使用一些内置或者第三方命令,如 expr 命令或者 $(()) 来进行数值计算。
expr
$(())
变量声明 shell 的变量声明有两种方式,一种是直接赋值,另一种是使用 declare 命令。
declare
var=12 declare -i var=12
declare 命令可以用来声明变量的类型,例如:-i 表示整数,-r 表示只读,-a 表示数组,-f 表示函数,-x 表示环境变量。
-i
-r
-a
-f
-x
字符串
字符串的拼接,可以直接使用加号进行拼接,也可以使用双引号进行拼接。
str1="hello" str2="world" str3=$str1$str2 str4="$str1 $str2" echo $str3 echo $str4
字符串操作是 shell 中非常重要的部分,包括字符串的截取、替换、查找、删除等操作。
常用字符串操作命令:
echo
printf
cut
sed
grep
awk
tr
包括插值符号自身也对字符串处理提供了强大的内置动能。
str="hello world" echo $str printf "%s\n" $str echo ${str:0:5} echo ${str:6:5} echo ${str#hello} echo ${str%world} echo ${str//o/O} echo ${str/o/O} echo ${str//o} echo ${str/o/}
条件判断 条件判断语句,if、elif、else、fi。条件判断语句可以嵌套,也可以使用 && 和 || 来连接多个条件判断语句。
&&
||
shell 中的条件判断时,判断的是一个命令的退出码,如果为则为真,如果不为零则为假,这个与 C 语言是不一样的。
if my_cmd 123; then echo "my_cmd 123 return 0" elif my_cmd 1234; then echo "my_cmd 1234 return 0" else echo "not 0" fi
test 命令,用于检查某个条件是否成立,如果条件成立则返回 0(真),否则返回 1(假)。test 命令可以接受多种类型的参数,包括字符串、数字和文件。
[ 命令,是 test 命令的语法糖,需要用 ] 结尾。[[ 是 bash 内置的命令,需要以 ]] 结尾,功能比 test 更加强大,支持正则表达式。语义更好。
[
]
[[
]]
test -e file [ -e file ] [[ -e file ]]
循环 循环语句,for、while、until。循环语句可以嵌套,也可以使用 break 和 continue 来控制循环的执行。
break
continue
for i in {1..10}; do echo $i done while [ $i -lt 10 ]; do echo $i i=$((i+1)) done until [ $i -gt 10 ]; do echo $i i=$((i+1)) done
数组和字典 shell 的数组是基于字符串的,数组没有类型,都是字符串。数组名和等号之间不能有空格,数组名只能包含字母、数字和下划线,且不能以数字开头。如果需要空格需要使用引号。
arr=(1 2 3 4 5) arr[0]=1 arr[1]=2 arr[2]=3 arr[3]=4 arr[4]=5 echo ${arr[0]} echo ${arr[1]} echo ${arr[2]} echo ${arr[3]} echo ${arr[4]} echo ${arr[@]} echo ${#arr[@]} echo ${!arr[@]}
字典,在 shell 中的键值对数据容器,其声明必须使用 declare -A 命令,并且键值对之间使用空格隔开,键和值之间使用等号隔开。
declare -A
declare -A dict dict["key1"]="value1" dict["key2"]="value2" dict["key3"]="value3" echo ${dict["key1"]} echo ${dict["key2"]} echo ${dict["key3"]} echo ${dict[@]} echo ${#dict[@]} echo ${!dict[@]}
正则表达式 shell 中的正则表达式和 Perl 中的正则表达式语法基本一致,包括元字符、转义字符、字符类、量词、断言等。常用的正则表达式命令有 grep、sed、awk 等。
echo "hello world" | grep "hello" echo "hello world" | sed "s/hello/HELLO/g" echo "hello world" | awk '{print $1}' echo "hello world" | tr 'o' 'O'
文件操作 shell 中的文件操作包括文件的创建、删除、重命名、复制、移动、查看等操作。常用的文件操作命令有 touch、rm、mv、cp、ls、cat、more、less、head、tail、grep 等。
touch file rm file mv file newfile cp file newfile ls cat file more file less file head file tail file grep "hello" file
函数 函数定义,function、()、{}。函数可以接受参数,参数可以通过 $1、$2 等来获取,也可以通过 $@ 来获取所有参数。函数的状态值可以通过 return 语句进行返回,也可以通过函数体中最后一条语句的执行状态进行返回。函数的状态值可以通过 来获取,?来获取,? 表示上一条命令的执行状态,0 表示成功,非 0 表示失败。区分于其他高级语言,在 shell 中,函数的“返回值”是一个整数,表示函数的执行状态,0 表示成功,非 0 表示失败。而想要达到像其他高级语言中的返回一个值和变量的效果需要借助 echo 命令,通过标准输入和标准输出来完成。echo 返回一个字符串,通过管道或者重定向来获取,代表这个程序的标准输出,该字符串以换行符结束,在同一个程序中可以输出多个字符串,字符串之间使用换行符隔开,通过捕获$()和重定向>输出来获取函数的返回值。
$1
$2
$@
$()
>
function myfunc() { echo "hello $1" } myfunc "world"
管道与重定向
在 shell 中,标准输入、标准输出和标准错误输出是三个重要的概念。标准输入是程序从外部获取数据的通道,标准输出是程序向外部输出数据的通道,标准错误输出是程序向外部输出错误信息的通道。而在 shell 中,标准输入、标准输出和标准错误输出默认都是终端,也就是命令行窗口。一个函数、命令、程序的执行结果,默认都会输出到标准输出。
可以通过 > 来重定向标准输出,2> 来重定向标准错误输出,&> 来重定向标准输出和标准错误输出。重定向的文件可以是一个文件,也可以是一个设备,比如 /dev/null。/dev/null 是一个特殊的设备,它将所有的数据都丢弃,相当于一个黑洞。
2>
&>
/dev/null
在 shell 中,需要通过输入命令来执行相应的逻辑,一般命令是一行语句,以换行符结束。shell 会逐行读取用户输入的命令,并把它传递给内核去执行。命令的格式是一行语句,以一个命令名称开始,后面跟一串参数,参数之间使用空格隔开。
如何获取命令?命令就是一个程序,shell 读取机器上快速路径 path 中的全局程序,或者从当前脚本中读取声明的函数,或者从文件系统中指定程序。
执行一行命令的时候,shell 会创建一个子进程来执行命令,子进程会继承父进程的文件描述符,然后子进程会执行命令,当命令执行完毕后,子进程会退出,然后 shell 会继续等待用户输入命令。这也可以认为是面向过程的编程方式。
在 shell 中,可以使用 shell 函数的方式来拆分逻辑,一个函数就相当于一个命令,一个过程,一个小型的程序。可以通过定义函数,来定义一个命令,函数体是多行子命令,函数体中的代码可以调用其他命令,也可以调用其他函数。
每条命令行语句都由命令和参数组成,命令是程序的名字,参数是传递给程序的选项,参数可以是一个,也可以是多个。每行的第一个单词是命令,后面的单词是参数,参数会在命令执行时被传递给命令,以一个数组的形式进行传递,数组的索引下标 0 为命令,下标 1 开始为参数。
函数的状态值,函数的状态值是一个整数,表示函数的执行状态,0 表示成功,非 0 表示失败。函数的状态值可以通过 return 语句进行返回,也可以通过函数体中最后一条语句的执行状态进行返回。函数的状态值可以通过 来获取,?来获取,? 表示上一条命令的执行状态,0 表示成功,非 0 表示失败。
shell 在进行执行的时候,会将系统中定义的环境变量加载到 shell 中,作为 shell 的变量来供给 shell 脚本中的逻辑进行使用,可以通过echo命令来查看环境变量,也可以通过export命令来设置环境变量,环境变量是全局变量,可以在整个 shell 中访问。
export
shell 脚本的错误处理基于 set -e 心智模型。
set -eEo pipe function error_handler() { local lineno=$1 echo '...' } trap 'error_handler $LINENO; exit 1' ERR
最隐蔽的陷阱:local 声明与赋值合写时,赋值部分的退出码会被 local 命令自己的成功码覆盖——命令替换 $(...) 的失败被静默吞掉。
local
$(...)
get_version() { local version=$(cat VERSION.txt) # ← 陷阱 echo "$version" } version=$(get_version) || echo "获取版本失败" # ← 永远不会走到"失败"分支
当 VERSION.txt 不存在时,cat 失败(退出码 1)——但 local 这个内建命令本身成功了(成功地声明了变量并赋了空值),它的退出码 0 覆盖了命令替换的非零退出码。函数返回 0,set -e 不触发、|| 分支不执行,错误被完全吞掉。
VERSION.txt
cat
set -e
修复方式是声明与赋值分离——赋值行的退出码就属于命令替换本身:
get_version() { local version # ① 只声明 version=$(cat VERSION.txt) # ② 赋值——失败码正确传播 echo "$version" }
这个模式应该成为肌肉记忆:local x; x=$(cmd),永远不写 local x=$(cmd)。适用于 local、declare、export、readonly 所有的变量声明内建——它们都有同样的退出码覆盖行为。
local x; x=$(cmd)
local x=$(cmd)
readonly
Shell 的错误处理陷阱成群出现:
set -e 在条件上下文中失效。cmd || true、if cmd; then、while cmd 这些条件位置中,cmd 的失败不会触发 set -e(这是设计——条件判断本来就是"测试失败")。坑点在于函数在条件中被调用时,函数内部的所有命令都不受 set -e 约束——函数内一个该失败的命令失败了,函数继续执行到下一个 return 0,错误升级为"函数返回错误值"而非"脚本退出"。
cmd || true
if cmd; then
while cmd
cmd
管道只看最后一个命令。cmd1 | cmd2 的退出码是 cmd2 的——cmd1 崩溃不影响整体。set -o pipefail 修复(任一命令失败则整体失败)。陷阱残留:pipefail 开启后,grep 在"没匹配到"时返回 1——cat log | grep ERROR 在没有错误日志时会触发退出,这是 grep 的语义而非 bug,但经常被当成 bug 排查半天。
cmd1 | cmd2
cmd2
cmd1
set -o pipefail
cat log | grep ERROR
算术的返回值语义。((count++)) 在 count 为 0 时返回 1(0 是假值)——set -e 下这会让脚本意外退出。修复用 ((++count)) 或 count=$((count+1))(赋值永远返回 0)。
((count++))
((++count))
count=$((count+1))
命令替换不继承 errexit。result=$(failing_func) 中,只要函数整体返回 0(比如最后一行是 echo),赋值就成功——命令替换是"错误被吞"的重灾区。
result=$(failing_func)
把这些陷阱的防御固化为脚本开头:
#!/bin/bash set -euo pipefail # 严格模式三件套 IFS=$'\n\t' # 防止未引用变量的分词意外
更可靠的防御是 ShellCheck——静态分析器能直接指出"SC2155: local 声明与赋值合写会掩盖命令替换的退出码"这类问题,把它加入 CI 比人肉记忆可靠。
/abstract - 目录 /ai - 人工智能 /ai/app - 大模型应用 /ai/app/api/openai-rpc - OpenAI_API /ai/app/arch - 应用架构 /ai/app/arch/api - API 设计 /ai/app/arch/caching - Prompt Caching /ai/app/arch/gateway - 网关与缓存 /ai/app/arch/routing - 模型路由 /ai/app/auto - 自动化 /ai/app/auto/impl - 实现原理 /ai/app/auto/traditional - 传统自动化 /ai/app/engine - 推理引擎 /ai/app/engine/llama/cpp /ai/app/engine/llama_cpp - llama.cpp /ai/app/engine/mistral/rs /ai/app/engine/mistral_rs - mistral.rs /ai/app/engine/rust/infer /ai/app/engine/rust_infer - Rust 推理引擎 /ai/app/engine/vllm - vLLM /ai/app/finetune - 微调 /ai/app/lib - 框架库 /ai/app/lib/langchain - LangChain /ai/app/lib/langchain/langgraph - LangGraph /ai/app/lib/langchain/runnable - LCEL 与 Runnable /ai/app/lib/packages - 常用包 /ai/app/multimodal - 多模态 /ai/app/multimodal/audio - 语音交互 /ai/app/multimodal/generation - 媒体生成 /ai/app/multimodal/vision - 视觉理解 /ai/app/overlay - Overlay /ai/app/overlay/agent - 智能体 /ai/app/overlay/agent/a2a - A2A 协议 /ai/app/overlay/agent/case - 应用实战 /ai/app/overlay/agent/case/claude/code /ai/app/overlay/agent/case/claude_code - Claude Code /ai/app/overlay/agent/case/cline - Cline /ai/app/overlay/agent/cua - Computer Use Agent /ai/app/overlay/agent/deep/agent /ai/app/overlay/agent/deep_agent - Deep Agent /ai/app/overlay/agent/loop - Agent 循环 /ai/app/overlay/agent/mcp - MCP Server /ai/app/overlay/agent/safety - 安全防护 /ai/app/overlay/agent/safety/content - 内容安全 /ai/app/overlay/agent/safety/guardrails - Guardrails /ai/app/overlay/agent/safety/injection - Prompt 注入 /ai/app/overlay/agent/skills - Skills /ai/app/overlay/agent/tools - 工具调用 /ai/app/overlay/ops - LLMOps /ai/app/overlay/ops/eval - 评估框架 /ai/app/overlay/ops/monitor - 可观测性 /ai/app/overlay/ops/test - 测试策略 /ai/app/overlay/rag - RAG /ai/app/overlay/rag/agentic/rag /ai/app/overlay/rag/agentic_rag - Agentic RAG /ai/app/overlay/rag/data - 数据工程 /ai/app/overlay/rag/data/parsing - 文档解析 /ai/app/overlay/rag/data/processing - 数据处理 /ai/app/overlay/rag/embedding - Embedding /ai/app/overlay/rag/graphrag - GraphRAG /ai/app/overlay/rag/retrieval - 检索质量 /ai/app/overlay/rag/vector/db /ai/app/overlay/rag/vector_db - 向量数据库 /ai/app/overlay/session - 会话管理 /ai/app/overlay/session/compression - 上下文压缩 /ai/app/overlay/session/context - Context Engineering /ai/app/overlay/session/prompt - 提示词 /ai/app/overlay/ui - AI UI /ai/compute - AI 引擎 /ai/compute/api - 标准接口 /ai/compute/api/cpu - SIMD /ai/compute/api/cuda - CUDA /ai/compute/api/opencl - OpenCL /ai/compute/api/simt - SIMT /ai/compute/api/triton - Triton /ai/compute/deploy - 部署 /ai/compute/deploy/eco - 部署工具 /ai/compute/deploy/hardware - 硬件 /ai/compute/deploy/llmops - LLMOps /ai/compute/deploy/multi-gpu - 多卡推理 /ai/compute/deploy/onnx-deploy - ONNX 部署 /ai/compute/deploy/optimization - 推理优化 /ai/compute/deploy/quantization - 模型量化 /ai/compute/deploy/serving - 服务部署 /ai/compute/distributed - 集群 /ai/compute/distributed/comm - 集合通信 /ai/compute/distributed/parallel - 模型拆分 /ai/compute/engine - 主流引擎 /ai/compute/engine/deepspeed - DeepSpeed /ai/compute/engine/other - 其他 /ai/compute/engine/pytorch - PyTorch /ai/compute/engine/vllm - vLLM /ai/compute/impl - 设计实现 /ai/compute/impl/kvcache - KV Cache /ai/compute/impl/moe - 混合专家 /ai/compute/impl/speculative - 投机解码 /ai/compute/kernel - 算子 /ai/compute/kernel/concepts - 概念索引 /ai/compute/kernel/flashattention - FlashAttention /ai/compute/kernel/format - 模型格式 /ai/compute/kernel/fusion - 算子融合 /ai/compute/kernel/gguf - GGUF /ai/compute/kernel/marlin - Marlin /ai/compute/kernel/onnx - ONNX /ai/compute/kernel/optimization - 算子优化 /ai/compute/kernel/quant/matrix /ai/compute/kernel/quant_matrix - 量化选型 /ai/compute/kernel/quantization - 量化算法 /ai/compute/kernel/utils - 模型工具 /ai/compute/stack - 计算栈 /ai/cpp - C++ /ai/neural - 神经网络 /ai/neural/dl - 深度学习 /ai/neural/dl/audio - 听觉 /ai/neural/dl/backforward - 反向传播 /ai/neural/dl/cnn - CNN /ai/neural/dl/diffusion - Diffusion /ai/neural/dl/multimodal - 多模态 /ai/neural/dl/nlp - NLP /ai/neural/dl/recommend - 推荐 /ai/neural/dl/rnn - RNN /ai/neural/dl/transformer - Transformer /ai/neural/dl/vision - 视觉 /ai/neural/dl/vit - ViT /ai/neural/llm - LLM /ai/neural/llm/arch - 架构 /ai/neural/llm/finetune - 微调 /ai/neural/llm/memo - 记忆 /ai/neural/llm/pretraind - 基座模型 /ai/neural/math - 数学基础 /ai/neural/ml - 机器学习 /ai/neural/ml/bf - 梯度下降法 /ai/neural/ml/loss - 损失函数 /ai/neural/ml/reinforce - 强化学习 /ai/neural/ml/supervised - 监督学习 /ai/neural/ml/unsupervised - 无监督学习 /ai/neural/numpy - Numpy /ai/neural/pytorch - PyTorch /ai/neural/sklearn - sklearn /ai/python - Python /ai/python/basic - 语言基础 /ai/python/basic/module - 模块系统 /ai/python/fastapi - FastAPI /ai/python/jupyter - jupyter /ai/python/uv - uv /ai/symbol - 符号逻辑 /ai/symbol/expert-system - 专家系统 /ai/symbol/logic - 数理逻辑基础 /ai/symbol/neuralify - 神经符号融合 /ai/symbol/outline - 学习路线 /ai/symbol/prolog - Prolog /ai/symbol/reasoning - 推理引擎与搜索 /ai/symbol/representation - 知识表示 /basic - 理论基础 /basic/algo - 算法 /basic/algo/compress - 压缩 /basic/algo/crypto - 加密和解密 /basic/algo/model - 算法模型 /basic/algo/model/bit - 位运算 /basic/algo/model/dp - 动态规划 /basic/algo/model/leetcode - leetcode 题型 /basic/algo/model/recrusion - 递归 /basic/algo/model/struct - 数据结构辅助 /basic/algo/sort - 排序算法 /basic/algo/string - 字符串算法 /basic/algo/struct - 数据结构 /basic/algo/struct/graph - 图 /basic/algo/struct/traversal - 图遍历 /basic/algo/struct/tree - 树 /basic/compile - 编译原理 /basic/compile/advance - 高级语言 /basic/compile/dsl - DSL /basic/compile/dsl/glob - glob /basic/compile/dsl/regex - 正则表达式 /basic/compile/lang - 编程语言概览 /basic/db - 数据库 /basic/db/cmp - SQL /basic/db/nf - 范式 /basic/graphic - 图形学 /basic/graphic/2d - 2D 图形 /basic/graphic/3d - 3D 场景渲染 /basic/hardware - 硬件组成 /basic/hardware/coding - 编码 /basic/hardware/cpu - CPU /basic/hardware/gpu - GPU /basic/hardware/interrupt - 中断 /basic/hardware/motherboard - 主板 /basic/hardware/storage - 存储 /basic/hardware/topo - CPU 拓扑 /basic/network - 网络协议 /basic/network/ether - 以太网 /basic/network/http - HTTP /basic/network/ip - IP /basic/network/protocol - 网络协议 /basic/network/tcp - TCP /basic/network/udp - UDP /basic/os - 操作系统 /basic/os/mm - 内存管理 /basic/os/schd - 调度 /client - 客户端
/client/art - 美术设计 /client/art/mime - 媒体文件 /client/art/render - 渲染 /client/art/toolchain - 工具链 /client/csharp - C# /client/csharp/async - 异步编程 /client/csharp/basic - 语言基础 /client/csharp/dotnet - .NET /client/csharp/msbuild - MSBuild /client/csharp/nuget - NuGet /client/csharp/unity - Unity /client/game - 游戏引擎 /client/game/cocos - Cocos /client/game/godot - Godot /client/game/unity - Unity /client/game/unreal - Unreal /client/gui - 图形应用 /client/gui/arch - 架构 /client/gui/arch/observe - 可观测性 /client/gui/ergonomic - 人机关系 /client/gui/ergonomic/interact - 人机交互 /client/gui/ergonomic/screen - 屏幕 /client/gui/framework - UI 框架 /client/gui/framework/cross - 跨平台 /client/gui/framework/electron - Electron /client/gui/framework/flutter - Flutter /client/gui/framework/flutter/dart - Dart /client/gui/framework/reactnative - ReactNative /client/gui/platform - UI 平台 /client/gui/platform/android - Android /client/gui/platform/gnome - Gnome /client/gui/platform/ios - Apple /client/gui/platform/web-env - Web 宿主 /client/gui/platform/windows - Windows /client/gui/security - 安全 /client/gui/security/access - 应用权限 /client/gui/security/antiattack - 网络攻击 /client/gui/security/auth - 登录鉴权 /client/gui/security/privacy - 隐私保护 /client/gui/security/sandbox - 沙箱 /client/render - 渲染引擎 /client/render/api - 标准接口 /client/render/api/directx - DirectX /client/render/api/opengl - OpenGL /client/render/api/sdl - SDL /client/render/api/vulkan - Vulkan /client/render/api/vulkan/icd - ICD /client/render/api/vulkan/spirv - SPIR-V /client/render/api/webgl /client/render/api/webgpu - WebGPU /client/render/basic - 渲染基础 /client/render/basic/mapping - 贴图 /client/render/basic/scene - 3D 场景 /client/render/engine - 主流引擎 /client/render/engine/cycles - Cycles /client/render/engine/godot - Godot /client/render/engine/skia - Skia /client/render/raster - 光栅化管线 /client/render/raster/ae - 后处理 /client/render/raster/illumination - 光照模型 /client/render/raster/rast - 光栅化算法 /client/render/raytrace - 光线追踪管线 /client/render/raytrace/bvh - 加速算法 /client/render/raytrace/denoise - 降噪 /client/render/raytrace/integrate - 混合渲染管线 /client/render/shader - 着色器 /client/render/shader/optimization - 着色器优化 /client/render/shader/patterns - 常见模式 /client/render/stack - 计算栈 /client/render/vec/compose /client/render/vec_compose - 矢量合成管线 /client/rust - Rust /client/rust/basic - 语言基础 /client/rust/basic/assets - 静态资源管理 /client/rust/basic/closure - 闭包 /client/rust/basic/ld - 链接库 /client/rust/basic/macro - 宏 /client/rust/basic/mod - 模块系统 /client/rust/basic/ref - 智能指针 /client/rust/basic/trait - 特性 /client/rust/cargo - Cargo /client/rust/cli - CLi /client/rust/framework - UI 框架 /client/rust/framework/iced - iced /client/rust/framework/slint - Slint /client/rust/framework/tauri - Tauri /client/rust/wasm - WASM /client/web - Web /client/web/api - Web API /client/web/api/wasm - WASM /client/web/browser - 浏览器 /client/web/browser/arch - 架构 /client/web/browser/devtools - DevTools 性能分析 /client/web/browser/eventloop - 事件循环 /client/web/browser/http - HTTP 协议 /client/web/browser/memleak - 内存泄漏 /client/web/browser/optimize - 性能优化 /client/web/browser/render - 渲染周期 /client/web/browser/render copy - 渲染周期 /client/web/browser/security - 浏览器安全 /client/web/browser/security copy - 安全 /client/web/browser/storage - 存储 /client/web/browser/v8 - V8 /client/web/css - CSS /client/web/css/basic - 语言基础 /client/web/css/sass - Sass /client/web/css/tailwind - Tailwindcss /client/web/css/trick - CSS trick /client/web/css/trick/animation - CSS 动画 /client/web/css/trick/bfc - 块级格式上下文 /client/web/css/trick/layout - 布局 /client/web/css/trick/layout/box-sizing - CSS盒模型 /client/web/css/trick/layout/containing-block - 包含块 /client/web/css/trick/layout/grid - grid布局 /client/web/css/trick/relative - 主题定制 /client/web/css/trick/sort - css 属性的分类 /client/web/css/trick/z-index - 层叠上下文与 z-index /client/web/eng - 工程化 /client/web/eng/bootstrap - 项目搭建 /client/web/eng/build - 构建优化 /client/web/eng/engineering - 工程化搭建 /client/web/eng/migration - 迁移 /client/web/eng/svg - svg /client/web/eng/vite - Vite /client/web/eng/vite-plugin - Vite 插件 /client/web/eng/webpack - Webpack /client/web/html - HTML /client/web/html/basic - 语言基础 /client/web/html/mathml - MathML /client/web/html/md - Markdown /client/web/html/seo - SEO /client/web/html/svg - SVG /client/web/html/trick - HTML trick /client/web/html/trick/drag - HTML 拖放 API /client/web/html/trick/event - 事件与尺寸获取 /client/web/html/trick/wc - Web Component /client/web/js - JavaScript /client/web/js/basic - 语言基础 /client/web/js/basic/async - 异步编程 /client/web/js/basic/class - 面向对象 /client/web/js/basic/iterable - 迭代器 /client/web/js/basic/obj-base-ops - js 对象基本操作 /client/web/js/basic/own-property - 属性的可枚举性和所有者 /client/web/js/basic/proto - 原型链 /client/web/js/basic/stream - Stream API /client/web/js/basic/type-transform - 隐式类型转换 /client/web/js/npm - npm /client/web/js/typescript - TypeScript /client/web/js/typescript/basic - 语法基础 /client/web/nodejs - Nodejs /client/web/nodejs/express - Express.js /client/web/nodejs/nestjs - Nestjs /client/web/nodejs/performance - Node.js 性能调优 /client/web/react - React /client/web/react/fiber - Fiber 与调和 /client/web/react/rsc - 服务端组件 /client/web/solid - Solid /client/web/ssr - SSR /client/web/ssr/nextjs - Nextjs /client/web/ssr/nuxtjs - Nuxtjs /client/web/ssr/seo - SEO /client/web/ssr/ssg - SSG /client/web/ssr/vike - Vike /client/web/typical - 典型业务 /client/web/vue - Vue /client/web/vue/cpc - 组件通信 /client/web/vue/nuxt-server - 服务端组件 /client/web/vue/vdom - 虚拟 DOM 与 Diff 算法 /design - 软件设计 /design/async - 异步 /design/async/async-await - await /design/async/reactive - 响应式 /design/async/schedule - 用户态调度 /design/concurrent - 并发 /design/concurrent/atom - 原子操作 /design/concurrent/barrier - 内存屏障 /design/concurrent/lock - 同步原语 /design/concurrent/lock/free /design/concurrent/lock_free - 无锁并发 /design/concurrent/thread - 多线程 /design/fp - 函数式 /design/fp/composition - 组合 /design/fp/functor - 函子 /design/fp/hint - hint /design/fp/immutable - 不可变 /design/fp/io - IO /design/fp/state - 状态管理 /design/oop - 面向对象 /design/oop/aop - AOP /design/oop/interface - 接口与抽象 /design/oop/ioc - IOC /design/oop/lifetime - 对象生命周期 /design/oop/om - 对象模型 /design/oop/pattern - 设计模式 /design/oop/relationship - 类间关系 /design/oop/solid - SOLID /design/spacetime - 面向时空 /design/spacetime/domain - 主机域 /design/spacetime/general - 通用域 /design/spacetime/general/architecture - 架构演进
/design/spacetime/general/container - 容器 /design/spacetime/general/corruption - 腐化 /design/spacetime/general/dependency - 依赖管理 /design/spacetime/general/tradeoff - 权衡 /design/spacetime/network - 网络域 /design/spacetime/process - 进程域 /design/spacetime/process/coupling - 组件耦合 /design/spacetime/process/scope - 作用域 /design/spacetime/process/single - 单进程 /design/spacetime/space - 体系建构 /design/typical - 经典范式 /design/typical/ability - 质量属性 /design/typical/ddd - DDD /design/typical/duty - 职责分配 /design/typical/macro - 宏观指导 /design/typical/maintainability - 可读性与可维护性 /design/typical/refactor - 重构 /design/typical/reliability - 可靠性与可用性 /design/typical/requirements - 需求分析 /design/typical/simplify - 简化原则 /design/typical/swift - 敏捷开发 /examples - 随便看看 /index /kernel - 系统层 /kernel/asm - 汇编 /kernel/asm/arm - ARM 指令集 /kernel/c - C /kernel/c/basic - 语言基础 /kernel/c/basic/io - io 操作 /kernel/c/basic/string - 字符串操作 /kernel/c/build - 构建系统 /kernel/c/concurrent - 并发编程 /kernel/c/debug - 调试 /kernel/c/lib - 库函数 /kernel/embed - 嵌入式 /kernel/embed/bios - BIOS /kernel/embed/device - 外设 /kernel/embed/device/bus - 总线设备 /kernel/embed/device/bus/i2c - I2C /kernel/embed/device/bus/pci - PCI /kernel/embed/device/bus/usb - USB /kernel/embed/device/comm - 数据面 /kernel/embed/device/platform - 平台设备 /kernel/embed/device/sub - 集成子设备 /kernel/embed/device/wwan - 蜂窝模块 /kernel/embed/elel - 硬件基础 /kernel/embed/elel/design - 打板 /kernel/embed/elel/fpga - FPGA /kernel/embed/elel/pcb - PCB /kernel/embed/elel/soc - SoC /kernel/embed/freertos - FreeRTOS /kernel/embed/iot - 物联网 /kernel/embed/sbc - 开发板 /kernel/embed/sbc/raspberry - 树莓派 /kernel/embed/sbc/stm32 - STM32 /kernel/embed/uboot - U-Boot /kernel/equip - 装机 /kernel/equip/bmc - BMC /kernel/equip/gpu - GPU /kernel/equip/laptop/brand /kernel/equip/laptop_brand - 笔记本 /kernel/equip/lte - LTE /kernel/equip/motherboard - 主板 /kernel/equip/motherboard/bmc - BMC 详解 /kernel/equip/motherboard/consumer - 消费级 /kernel/equip/motherboard/core - Core 装机 /kernel/equip/motherboard/epyc - EPYC 装机 /kernel/equip/motherboard/ram - 内存适配 /kernel/equip/motherboard/server - 服务器 /kernel/equip/motherboard/threadripper - Threadripper 装机 /kernel/equip/motherboard/workstation - 工作站 /kernel/equip/motherboard/xeon - Xeon 装机 /kernel/equip/ram - 内存 /kernel/equip/sbc - SBC /kernel/equip/screen - 屏幕 /kernel/equip/server/room /kernel/equip/server_room - 机房 /kernel/equip/slot - 接口 /kernel/equip/support - 支撑设备 /kernel/linux - Linux /kernel/linux/develop - 系统开发 /kernel/linux/develop/ctx - 内核上下文 /kernel/linux/develop/io/uring /kernel/linux/develop/io_uring - io_uring /kernel/linux/develop/ip/cli /kernel/linux/develop/ip_cli - ip 命令 /kernel/linux/develop/kbuild - linux 内核构建系统 /kernel/linux/develop/lock - 同步原语 /kernel/linux/develop/service - 系统服务 /kernel/linux/develop/socket - 套接字 /kernel/linux/develop/stream-block - 流式与块式存取 /kernel/linux/develop/struct - 数据结构 /kernel/linux/develop/struct/iov - 聚簇读写 /kernel/linux/develop/struct/linked - 链表 /kernel/linux/develop/systemd - systemd /kernel/linux/develop/zero-copy - sendfile 零拷贝 /kernel/linux/device - 设备管理 /kernel/linux/device/dma - DMA /kernel/linux/device/driver - 驱动接口 /kernel/linux/device/driver/can - CAN /kernel/linux/device/driver/pci - PCIe 驱动 /kernel/linux/device/driver/usb - USB 驱动 /kernel/linux/device/driver/virtio /kernel/linux/device/iommu - IOMMU /kernel/linux/device/lifecycle - 生命周期 /kernel/linux/device/udev - udev /kernel/linux/file - 文件管理 /kernel/linux/file/block - 块设备子系统 /kernel/linux/file/pfs - 伪文件系统 /kernel/linux/file/vfs - 虚拟文件系统 /kernel/linux/irq - 中断管理 /kernel/linux/irq/clock - 时钟中断 /kernel/linux/irq/controller - 中断控制器 /kernel/linux/irq/handler - 中断处理 /kernel/linux/irq/sync - 内核并发机制 /kernel/linux/mm - 内存管理 /kernel/linux/mm/mmap - 虚拟内存映射 /kernel/linux/mm/pmm - 物理内存管理 /kernel/linux/mm/reclaim - 内存回收 /kernel/linux/mm/swap - 内存交换 /kernel/linux/net - 网络实现 /kernel/linux/net/stack - 协议栈 /kernel/linux/power - 电源管理 /kernel/linux/power/boot - 开机上电 /kernel/linux/power/tpm - 安全启动 /kernel/linux/process - 进程管理 /kernel/linux/process/cgroup - Cgroup /kernel/linux/process/ipc - IPC /kernel/linux/process/namespace - 命名空间 /kernel/linux/process/schd - 调度 /kernel/linux/process/security - 权限管理 /kernel/linux/syscall - 系统调用 /kernel/linux/syscall/file - 文件管理 /kernel/linux/syscall/mm - 内存管理 /kernel/linux/syscall/process - 进程管理 /kernel/linux/video - 视图系统 /kernel/linux/video/terminal - 终端系统 /kernel/netlink - 通信 /kernel/netlink/hardware - 硬件通信 /kernel/netlink/protocol - 协议分层 /kernel/vm - 虚拟化 /kernel/vm/basic - 基本原理 /kernel/vm/basic/bios - BIOS /kernel/vm/basic/cpu - CPU /kernel/vm/basic/device - 设备 /kernel/vm/basic/memory - 内存 /kernel/vm/debug - 虚拟机调试增强 /kernel/vm/qemu - QEMU 内核调试 /kernel/vm/spdk-dpdk - SPDK 与 DPDK /kernel/vm/vfio - VFIO /kernel/vm/virtio - VirtIO /sde - 工程化 /sde/container - 容器 /sde/container/docker - Docker /sde/container/principle - 实现原理 /sde/git - Git /sde/git/advanced - Git 高阶用法 /sde/git/github - Github /sde/git/gitlab - Gitlab /sde/k8s - K8s /sde/k8s/k3s - k3s /sde/k8s/network - 网络模型 /sde/shell - Shell /sde/shell/basic - 语言基础 /sde/shell/cli - 常见命令行 /sde/sre - 运维 /sde/sre/elk - 可观测性 /sde/sre/jenkins - Jenkins /sde/sre/openstack - OpenStack /sde/sre/tuning - Linux 性能调优 /sde/test - 测试 /sde/test/basic - 测试原理 /sde/test/framework - 测试工具与框架 /sde/test/tdd - 测试驱动开发 /sde/workflow - 工作流 /sde/workflow/devops - DevOps /sde/workflow/devops/cicd - CI/CD /sde/workflow/quality - 质量控制 /sde/workflow/quality/docs - 文档工程 /sde/workflow/quality/review - Code Review /sde/workflow/version - 版本管理 /server - 服务端 /server/db - 数据库 /server/db/architecture - 数据库架构分层 /server/db/distributed - 集群 /server/db/distributed/comparison - 数据库对比与选型 /server/db/distributed/newsql - NewSQL 数据库 /server/db/distributed/sharding - 分库分表 /server/db/distributed/transaction - 分布式事务 /server/db/engine - 存储引擎 /server/db/engine/fulltext - 全文检索 /server/db/engine/graph - 图 /server/db/engine/innodb - innodb /server/db/engine/vector - 向量 /server/db/nosql - NoSQL /server/db/nosql/es - ElasticSearch /server/db/nosql/milvus - Milvus /server/db/nosql/milvus/idx - 向量索引 /server/db/nosql/milvus/storage - 分布式能力 /server/db/nosql/milvus/usage - 使用实践
/server/db/nosql/minio - MinIO /server/db/nosql/mongo - MongoDB /server/db/nosql/neo4j - Neo4j /server/db/nosql/redis - Redis /server/db/practice - 工程实践 /server/db/practice/backup - 备份与恢复 /server/db/practice/capacity - 容量规划 /server/db/practice/cloud - 云数据库服务 /server/db/practice/monitoring - 监控与运维 /server/db/practice/standards - 数据库规范 /server/db/practice/tuning - 性能调优实践 /server/db/sql - SQL /server/db/sql/basic - sql 基础 /server/db/sql/basic/design - 数据库设计 /server/db/sql/basic/integrity - 数据完整性 /server/db/sql/basic/transaction - 事务与并发控制 /server/db/sql/mysql - MySQL /server/db/sql/mysql/acid - ACID /server/db/sql/mysql/id - 索引 /server/db/sql/mysql/impl - 存储引擎 /server/db/sql/mysql/optimize - 查询优化 /server/db/sql/pg - PostgreSQL /server/db/sql/sqlite - SQLite /server/distribute - 分布式 /server/distribute/arch - 集群架构 /server/distribute/basic - 分布式基础 /server/distribute/basic/cap - CAP /server/distribute/basic/concurrency - 并发模型 /server/distribute/basic/concurrency/coroutine - 协程原理 /server/distribute/basic/concurrency/event-loop - 事件驱动架构 /server/distribute/basic/consensus - 共识算法 /server/distribute/basic/consensus/paxos - Paxos 算法 /server/distribute/basic/consensus/raft - Raft 算法 /server/distribute/basic/consensus/zab - ZAB 协议 /server/distribute/basic/id - 分布式 ID /server/distribute/basic/lock - 分布式锁 /server/distribute/basic/transaction - 分布式事务 /server/distribute/cloud - 云原生 /server/distribute/cloud/arch - 架构 /server/distribute/cloud/cicd - CI/CD /server/distribute/cloud/container - 容器技术 /server/distribute/cloud/mesh - Service Mesh /server/distribute/cloud/orchestration - Kubernetes /server/distribute/cloud/pkg - 包管理与镜像 /server/distribute/micro - 微服务 /server/distribute/micro/cache - 缓存 /server/distribute/micro/cache/consistency - 缓存一致性 /server/distribute/micro/config - 配置中心 /server/distribute/micro/discovery - 服务发现 /server/distribute/micro/gateway - API 网关 /server/distribute/micro/lb - 负载均衡 /server/distribute/micro/observability - 可观测性 /server/distribute/micro/observability/monitoring - 监控告警 /server/distribute/micro/observability/tracing - 链路追踪 /server/distribute/micro/qos - QoS /server/distribute/micro/qos/chaos - 混沌工程 /server/distribute/micro/qos/fuse - 熔断限流 /server/distribute/micro/qos/ha - 高可用与容错 /server/distribute/micro/qos/ha/load-balance - 负载均衡 /server/distribute/micro/qos/highes - 三高 /server/distribute/micro/qos/monitor - 监控 /server/distribute/micro/qos/observability - 可观测性 /server/distribute/micro/qos/observability/monitoring - 监控指标设计 /server/distribute/micro/qos/performance - 性能优化 /server/distribute/micro/qos/performance/profiling - 性能分析工具 /server/distribute/micro/qos/reliability/disaster-recovery - 容灾 /server/distribute/micro/qos/reliability/failover - 故障转移 /server/distribute/micro/qos/slashing - 限流降级 /server/distribute/micro/reliability - 健壮性 /server/distribute/micro/reliability/fusing - 熔断降级 /server/distribute/micro/reliability/ratelimit - 限流 /server/go - Go /server/go/gmp - GMP 调度器 /server/java - Java /server/java/basic - 语言基础 /server/java/jvm - JVM 内存与 GC /server/java/mod - 模块系统 /server/java/mod/gradle - gradle /server/java/mod/maven - Maven /server/java/spring - Spring /server/middleware - 中间件 /server/middleware/mq - 消息队列 /server/middleware/mq/kafka - Kafka /server/middleware/mq/rabbitmq - RabbitMQ /server/middleware/mq/rocketmq - RocketMQ /server/middleware/mycat - MyCat /server/middleware/proxy - 代理 /server/middleware/proxy/gateway - API 网关 /server/middleware/proxy/haproxy - haproxy /server/middleware/proxy/lvs - LVS /server/middleware/proxy/nginx - Nginx /server/middleware/srs - SRS /server/network - 网络编程 /server/network/io-model - I/O 模型 /server/network/proto - 网络协议 /server/network/proto/http - HTTP /server/network/proto/quic - QUIC /server/network/proto/rpc - RPC 框架 /server/network/proto/tcp - TCP /server/network/proto/udp - UDP /server/network/proto/websocket - WebSocket /server/network/security - 网络安全 /server/network/tcp-tuning - TCP 调优 /server/network/zero-copy - 零拷贝 /server/typical - 典型业务 /server/typical/auth - 登录鉴权 /server/typical/flash/sale /server/typical/flash_sale - 秒杀活动 /server/typical/image - 图片上传 /server/typical/order - 订单管理 /server/typical/search - 内容搜索 /server/typical/setup - 快速建站 /web3 - 去中心化 /web3/blockchain - 区块链 /web3/blockchain/consensus - 共识机制 /web3/blockchain/crypto - 密码学支持 /web3/blockchain/ethereum - 以太坊 /web3/blockchain/zk-proof - 零知识证明 /web3/dapp - DApp /web3/dapp/defi - DeFi /web3/dapp/tokens - 代币标准 /web3/dapp/wallets - 账户与钱包 /web3/solidity - Solidity /web3/solidity/smart-contracts - 智能合约