Home avatar

这是我的个人网站

Docker容器内部抓包

很多docker容器为了轻量化,都不包含一些基础命令,如ip ,address,tcpdump 等,这给调试容器的网络带来了麻烦。

其实我们可以通过 命令进入容器的网络命名空间,使用宿主机的命令调试容器网络。

分布式数据-概述

数据库分布在多台设备上的好处:

  1. 可拓展性: 数据量、读取负载、写入负载超出了单台机器处理能力。
  2. 容错、高可用:单台机器(或多台、网络、整个数据中心)出现故障仍然能继续工作。
  3. 延迟:全球范围内部署多个服务器,用户从最近的数据中心获取服务。

扩展负载

Powershell新增别名

Get-Alias

在 Powershell 中使用 Set-Alias 和 New-Alias 定义的别名,在此session关闭后即会失效,防止此现象,可以将定义别名的命令写入 Windows Powershell profile 文件中。查看此文件位置:

Fail2Ban防护SSH爆破

今天发现早上登录服务器,查看日志有大量ssh登录的爆破,所以先限制root用户不允许远程登录,再使用Fail2Ban自动封锁ip限制一下。

记录如下:

离线安装包及依赖处理

很多内网环境需要离线安装软件,就需要我们在可以上网的服务器上将需要安装的软件的相应安装包及其依赖下载下来,传输到离线机器,再安装。其中下载和处理依赖关系可能比较麻烦,所以本文特做记录。

Chrome的一种截图方法

F12 打开开发者模式,选择需要截图的节点,ctrl+shift+p 打开运行栏,搜索 shot,选择 Capture node screenshot,如下图:

image-20231109145633467

如果截取手机或平板模式的图,先点击左上角的 Toggle device toolbar ( Ctrl + Shift + M )选择合适的设备,再进行上面步骤。

PhpStorm实现跨网传输源代码

本地开发代码,需要同步到 10.21.30.81 上, 但是本地只能通过 ssh 连接到 10.21.30.80 上,不能 ssh 连接到 10.21.30.81 上,因此需要将代码通过SFTP传到 80 上,再在 80 上 scp 到 81上,太麻烦了,网络如下:

image-20231109112816186

在本机上执行

Shell编程-2

代码实现如下:

# 解析 yml , 数组自动添加序号
# 
### 例如:
### yml 如下:
### global:
###   input:
###     - "main.c"
###     - "main.h"
###   flags: [ "-O3", "-fpic" ]
###   sample_input:
###     -  { property1: value, property2: "value2" }
###     -  { property1: "value3", property2: 'value 4' }
### 
### 执行: eval $(parse_yaml "config.yml")
###
### 解析结果如下,相当于生成了如下代码:
### global_input_1="main.c"
### global_input_2="main.h"
### global_flags_1="-O3"
### global_flags_2="-fpic"
### global_sample_input_1_property1="value"
### global_sample_input_1_property2="value2"
### global_sample_input_2_property1="value3"
### global_sample_input_2_property2="value 4"
### 
### 最后可以使用间接变量引用,访问变量
###
function parse_yaml {
   local prefix=$2
   local s='[[:space:]]*' w='[a-zA-Z0-9_]*' fs=$(echo -e '\034')
   sed -ne "s|,$s\]$s\$|]|" \
        -e ":1;s|^\($s\)\($w\)$s:$s\[$s\(.*\)$s,$s\(.*\)$s\]|\1\2: [\3]\n\1  - \4|;t1" \
        -e "s|^\($s\)\($w\)$s:$s\[$s\(.*\)$s\]|\1\2:\n\1  - \3|;p" $1 | \
   sed -ne "s|,$s}$s\$|}|" \
        -e ":1;s|^\($s\)-$s{$s\(.*\)$s,$s\($w\)$s:$s\(.*\)$s}|\1- {\2}\n\1  \3: \4|;t1" \
        -e    "s|^\($s\)-$s{$s\(.*\)$s}|\1-\n\1  \2|;p" | \
   sed -ne "s|^\($s\):|\1|" \
        -e "s|^\($s\)-$s[\"']\(.*\)[\"']$s\$|\1$fs$fs\2|p" \
        -e "s|^\($s\)-$s\(.*\)$s\$|\1$fs$fs\2|p" \
        -e "s|^\($s\)\($w\)$s:$s[\"']\(.*\)[\"']$s\$|\1$fs\2$fs\3|p" \
        -e "s|^\($s\)\($w\)$s:$s\(.*\)$s\$|\1$fs\2$fs\3|p" | \
   awk -F$fs '{
      indent = length($1)/2;
      vname[indent] = $2;
      for (i in vname) {if (i > indent) {delete vname[i]; idx[i]=0}}
      if(length($2)== 0){  vname[indent]= ++idx[indent] };
      if (length($3) > 0) {
         vn=""; for (i=0; i<indent; i++) { vn=(vn)(vname[i])("_")}
		 gsub(/\s*#.*$/, "", $3);
         printf("%s%s%s=\"%s\"\n", "'$prefix'",vn, vname[indent], $3);
      }
   }'
}

用法: