GaGa's Blog

One GaGa, One World !

在 WireGuard 项目中,wgwg-quick 是两个核心的用户空间工具,用于管理和配置 WireGuard VPN。它们都属于 wireguard-tools 软件包,但功能和使用场景有所不同。


1. wg 介绍

wg 是 WireGuard 的基础命令行工具,用于直接管理 WireGuard 接口和对等方(peers)。它是一个低级工具,提供了对 WireGuard 内核模块的细粒度控制,适合需要手动管理或脚本化的用户

Read more »

WireGuard 的架构原理是其成功的关键,它结合了现代加密技术、简洁的设计和高效的网络处理方式。


1. 总体架构

WireGuard 是一种基于内核的 VPN 协议,运行在网络层(OSI 模型的第 3 层),通过创建虚拟网络接口(通常命名为 wg0 或类似名称)来传输加密的 IP 数据包。它的设计灵感来源于SSH 和其他现代安全工具,强调简单性、高性能和安全性。

Read more »

WireGuard 是一种现代、轻量级且高效的 VPN(虚拟专用网络)协议,以其简单性和高性能而闻名。它最初由 Jason A. Donenfeld 开发,并在 2020 年正式被集成到 Linux 内核中(从内核版本5.6 开始)。

WireGuard 的设计目标是提供易于配置、安全性强且速度快的网络隧道解决方案,适用于各种场景,例如远程访问、安全通信或绕过地理限制。


02e91903f5df8948a446501d9168e71a.png

Read more »

Shell 函数介绍

在 shell 脚本中,函数是一段可重用的代码块,用于封装特定的功能。使用函数可以提高代码的可读性、模块化和维护性。shell 函数类似于其他编程语言中的函数,可以接收参数、执行操作并返回结果。

定义方式

  1. function 关键字

    1
    2
    3
    4
    5
    6
    function 函数名() {
    # 函数体

    # 返回值
    [ return int ]
    }
  2. 不带 function 关键字

    1
    2
    3
    4
    5
    6
    7
    函数名() {
    # 函数体

    # 返回值
    [ return int ] //退出函数
    exit int //退出脚本
    }
Read more »

在 Shell 脚本中,流程控制是编写复杂脚本的核心部分,用于控制程序的执行流程。常见的流程控制结构包括条件语句、循环语句和分支语句。


1. 条件语句

条件语句用于根据条件执行不同的代码块。

Read more »

在 Elasticsearch 中,不同的节点类型对 CPU 的消耗程度取决于它们所承担的任务。


高 CPU 消耗的节点类型

  1. Data Node(数据节点)

    • 原因: 数据节点负责存储和处理索引数据,执行搜索、聚合、索引操作等任务。这些操作通常涉及大量计算,例如:
      • 搜索和查询: 复杂的查询(例如模糊查询、正则表达式、通配符)需要遍历大量文档。
      • 聚合: 如 termshistogramsignificant_terms,需要对数据进行分组和计算。
      • 索引: 写入数据时需要分词、构建倒排索引。
    • CPU 消耗: 高,尤其是在高吞吐量写入或复杂查询场景下。
    • 优化建议: 增加数据节点数量、分片优化、减少复杂查询。
  2. Ingest Node(摄取节点)

    • 原因: 摄取节点在数据索引前执行预处理(ingest pipeline),例如正则表达式提取、字段转换、脚本处理等。如果 pipeline 包含复杂的逻辑(如 Grok 解析或脚本计算),会显著增加 CPU 使用。
    • CPU 消耗: 中到高,取决于 pipeline 的复杂性和数据量。
    • 优化建议: 简化 pipeline,或将摄取任务分散到多个节点。
  3. Machine Learning Node(机器学习节点)

    • 原因: 运行机器学习任务(如异常检测、时间序列预测)需要大量的数学计算和模型推理。这些任务本质上是 CPU 密集型的。
    • CPU 消耗: 非常高,尤其是在处理大规模数据集或实时分析时。
    • 优化建议: 使用专用 ML 节点,并确保有足够的 CPU 核心和内存。
  4. Coordinating Node(协调节点)

    • 原因: 协调节点负责接收客户端请求、分发任务给数据节点,并汇总结果。以下情况会增加 CPU 消耗:
      • 处理大量并发请求。
      • 汇总复杂的聚合结果(例如从多个分片收集数据并排序)。
    • CPU 消耗: 中到高,取决于请求量和结果处理的复杂性。
    • 优化建议: 设置专用协调节点,避免与其他角色混用。
Read more »

在 Shell 脚本中(特别是 Bash),数组是一种非常有用的数据结构,可以用来存储多个值。

1. 声明数组

在 Bash 中,可以通过以下方式声明一个数组:

1
array_name=(value1 value2 value3)
Read more »

驼峰命名法(Camel Case)是一种常见的命名约定,广泛用于编程、变量命名和其他技术场景中。它的特点是将多个单词组合成一个标识符,单词之间没有分隔符(如空格或下划线),通过大小写变化来区分单词边界


1. 什么是驼峰命名法

  • 定义:单词首字母大写或小写来表示不同的单词,形似骆驼的驼峰,因此得名。
  • 两种变体
    1. 小驼峰命名法(Lower Camel Case)
      • 第一个单词首字母小写,后续单词首字母大写。
      • 示例:myVariableName
    2. 大驼峰命名法(Upper Camel Case 或 Pascal Case)
      • 每个单词首字母都大写。
      • 示例:MyVariableName
Read more »

1.字符串符号

  • ‘str1’ 单引号是强引用,原样输出
  • “str1” 双引号弱引用,支持部分字符串含义($…)
  • str1 命令执行

2. 字符串长度

在 Shell 中,可以使用 `$

Read more »

1. 什么是 Shell 变量

Shell 变量是用来存储数据的容器,可以在脚本或 Shell 会话中保存和操作值。它们通常是键值对的形式,比如 name=value,不需要提前声明类型(Shell 是弱类型语言)。

变量类型

  • shell变量 (仅仅在shell中有效)
  • 局部变量 (x=y 函数局部变量 local x=y,仅仅在函数内部有效)
  • 只读变量(变量不能被修改 readonly x=y)
  • 环境变量 (export x=y, 其他shell也可以使用变量x)
Read more »
0%