Docker安装

第一步 移除以前docker相关包

yum remove docker*

第二步 配置yum原

yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

第三步 安装docker

yum install -y docker-ce docker-ce-cli containerd.io

第四步 启动docker(重启服务器也会自动启动)

systemctl enable docker --now

Docker的常用命令

[scode type="green" size=""]列出docker容器[/scode]

docker ps
  # -a : 显示所有的容器,包括未运行的。
  # -f : 根据条件过滤显示的内容。
  # --format : 指定返回值的模板文件。
  # -l : 显示最近创建的容器。
  # -n : 列出最近创建的n个容器。
  # --no-trunc : 不截断输出。
  # -q : 静默模式,只显示容器编号。
  # -s : 显示总的文件大小。

[scode type="green" size=""]创建并运行一个docker容器[/scode]

docker run
      # -d :后台运行
      # -p :端口映射 80:81 80是宿主端口 81是容器端口
      # --name :给容器指定一个名称
      # --restart=always :始终重启  服务器重启后自动运行重启

[scode type="green" size=""]开启/停止/重启[/scode]

docker start #启动一个或多个已经被停止的容器。
docker stop  #停止一个运行中的容器。
docker restart #重启容器。

[scode type="green" size=""]杀掉一个运行中的容器[/scode]

# 根据容器名字杀掉容器
docker kill tomcat7

# 根据容器ID杀掉容器
docker kill 65d4a94f7a39

[scode type="green" size=""]删除一个或多个容器[/scode]

# 强制删除容器 db01、db02:
docker rm -f db01 db02


# 删除容器 nginx01, 并删除容器挂载的数据卷:
docker rm -v nginx01

# 删除所有已经停止的容器:
docker rm $(docker ps -a -q)

[scode type="green" size=""]列出本地镜像[/scode]

docker images
   # -a : 列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层);
   # --digests : 显示镜像的摘要信息;
   # -f : 显示满足条件的镜像;
   # --format : 指定返回值的模板文件;
   # --no-trunc : 显示完整的镜像信息;
   # -q : 只显示镜像ID。

[scode type="green" size=""]删除本地一个或多个镜像[/scode]

docker rmi #名字
   # -f 强制删除

自动删除B站直播的马赛克脚本

[scode type="green" size=""]需要自行安装浏览器油猴插件[/scode]

// ==UserScript==
// @name            Bilibili Live No Mosaic
// @description     删除直播间中的马赛克
// @version      2024-07-31
// @author       TongHui
// @match           *://*.bilibili.com/*
// @exclude         *://api.bilibili.com/*
// @exclude         *://api.*.bilibili.com/*
// @exclude         *://*.bilibili.com/api/*
// @exclude         *://member.bilibili.com/studio/bs-editor/*
// @exclude         *://t.bilibili.com/h5/dynamic/specification
// @exclude         *://bbq.bilibili.com/*
// @exclude         *://message.bilibili.com/pages/nav/header_sync
// @exclude         *://s1.hdslb.com/bfs/seed/jinkela/short/cols/iframe.html
// @exclude         *://open-live.bilibili.com/*
// @icon            https://cdn.jsdelivr.net/gh/the1812/Bilibili-Evolved@preview/images/logo-small.png
// @icon64          https://cdn.jsdelivr.net/gh/the1812/Bilibili-Evolved@preview/images/logo.png
// @grant        none
// ==/UserScript==

(function() {
    'use strict';
     var timer=setInterval(()=>{
         var elementId = 'web-player-module-area-mask-panel';
         var element = document.getElementById(elementId);
         if (element) {
             element.parentNode.removeChild(element);
             clearInterval(timer);
             console.log('成功删除水印');
         }
     },1000)
})();

新建一个文件 test.sh,扩展名为 sh

#!/bin/bash
# 打印Hello World !
echo "Hello World !"

执行脚本

sh test.sh

变量声明

# 声明变量
your_name="Hello World"
# 使用变量 
$your_name

变量声明规范

  • 只包含字母、数字和下划线: 变量名可以包含字母(大小写敏感)、数字和下划线 \_,不能包含其他特殊字符。
  • 不能以数字开头: 变量名不能以数字开头,但可以包含数字。
  • 避免使用 Shell 关键字: 不要使用Shell的关键字(例如 if、then、else、fi、for、while 等)作为变量名,以免引起混淆。
  • 使用大写字母表示常量: 习惯上,常量的变量名通常使用大写字母,例如 PI=3.14
  • 避免使用特殊符号: 尽量避免在变量名中使用特殊符号,因为它们可能与 Shell 的语法产生冲突。
  • 避免使用空格: 变量名中不应该包含空格,因为空格通常用于分隔命令和参数。

传递参数

执行脚本的时候进行传参,脚本内获取参数的格式为 $n,n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数。**\$0** 为执行的文件名(包含文件路径)

数组声明

数组元素的下标由 0 开始 元素用"空格"符号分割开
my_array=(A B "C" D)
打印数组
echo "第一个元素为: ${my_array[0]}"
echo "第二个元素为: ${my_array[1]}"
echo "第三个元素为: ${my_array[2]}"
echo "第四个元素为: ${my_array[3]}"
# 打印内容
第一个元素为: A
第二个元素为: B
第三个元素为: C
第四个元素为: D
使用 @* 可以获取数组中的所有元素
my_array[0]=A
my_array[1]=B
my_array[2]=C
my_array[3]=D

echo "数组的元素为: ${my_array[*]}"
echo "数组的元素为: ${my_array[@]}"

 function getDistance(lat1, lon1, lat2, lon2) {
      const R = 6371 // 地球半径,单位为公里
      const dLat = deg2rad(lat2 - lat1)
      const dLon = deg2rad(lon2 - lon1)
      const a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +
        Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) *
        Math.sin(dLon / 2) * Math.sin(dLon / 2)
      const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a))
      return R * c // 距离,单位为公里
    }

    function deg2rad(deg) {
      return deg * (Math.PI / 180)
    }

调用使用

getDistance(30.257665, 119.955635, 30.318454, 120.10968) // 返回数值单位公里

@Configuration
public class GlobalCorsConfig {
    @Bean
    public CorsFilter corsFilter() {
        //1. 添加 CORS配置信息
        CorsConfiguration config = new CorsConfiguration();
        //放行哪些原始域
        config.addAllowedOrigin("https://staff-backend.domcer.com/");
        //是否发送 Cookie
        config.setAllowCredentials(true);
        //放行哪些请求方式
        config.addAllowedMethod("*");
        //放行哪些原始请求头部信息
        config.addAllowedHeader("*");
        //暴露哪些头部信息
        config.addExposedHeader("*");
        //2. 添加映射路径
        UrlBasedCorsConfigurationSource corsConfigurationSource = new UrlBasedCorsConfigurationSource();
        corsConfigurationSource.registerCorsConfiguration("/**",config);
        //3. 返回新的CorsFilter
        return new CorsFilter(corsConfigurationSource);
    }
}

windows执行脚本
@echo off
:start
setlocal

:: 设置API端点
set API_ENDPOINT=http://localhost:3000/demo
:: 设置轮询间隔(秒)
set INTERVAL=1

:loop
:: 发送GET请求并将响应保存到变量中
for /f %%i in ('curl -s %API_ENDPOINT%') do set response=%%i

:: 检查响应是否为true
if "%response%"=="true" (
    echo API返回了true,准备执行操作...
    rem 在这里执行您想要执行的操作
    goto endloop
) else (
    echo API没有返回true,等待 %INTERVAL% 秒后继续轮询。
    timeout /t %INTERVAL% >nul
    goto loop
)

:endloop
echo 循环结束,继续执行其他操作...
rem 在这里执行轮询之后要执行的其他操作

endlocal
timeout /t 5 >nul
goto start
liunx执行脚本
#!/bin/bash

# 无限循环
while true; do
    # 设置API端点
    API_ENDPOINT="http://localhost:3000/demo"
    # 设置轮询间隔(秒)
    INTERVAL=1

    # 发送GET请求并将响应保存到变量中
    response=$(curl -s $API_ENDPOINT)

    # 检查响应是否为true
    if [ "$response" = "true" ]; then
        echo "API返回了true,准备执行操作..."
        # 在这里执行您想要执行的操作
        echo "循环结束,继续执行其他操作..."
        # 在这里执行轮询之后要执行的其他操作

        sleep 5  # 等待5秒
        echo "重新执行"
        continue
    else
        echo "API没有返回true,等待 $INTERVAL 秒后继续轮询。"
        sleep $INTERVAL
    fi
done

通过markdown快速生成API开发文档站点

第一步 搭建基础环境

新建文件夹

vuepress-starter //(可以自定义,必须是英文)

初始化node环境

npm init #然后一直回车

VuePress 安装为本地依赖

npm install -D vuepress

创建文件

docs/README.md

编辑启动命令 package.json

{
  "scripts": {
    "docs:dev": "vuepress dev docs",
    "docs:build": "vuepress build docs"
  }
}

启动本地服务

npm run docs:dev

当前文件目录

├─docs
├─node_modules
└─package.json

在浏览器的快捷方式->属性->目标(内容后面追加注意有空格)

[scode type="red" size=""]谷歌浏览器数据不共享[/scode]

现在C盘创建ChromeDev文件夹 也就是后面 C:\ChromeDev 可以自定义
--disable-web-security --disable-features=SameSiteByDefaultCookies --user-data-dir=C:\ChromeDev

  1. compilerOptions:编译器选项,用于配置编译过程中的行为。

    • "target":指定要编译的 ECMAScript 目标版本(例如:"ES5"、"ES6"等)。
    • "module":指定生成的模块规范(例如:"commonjs"、"es2015"、"amd"、"umd"等)。
    • "outDir":指定编译后的 JavaScript 文件存放目录。
    • "strict":启用所有严格类型检查选项。
    • "esModuleInterop":允许导入默认导出模块以与非默认导出模块进行交互。
    • "allowJs":允许编译 JavaScript 文件。
    • "sourceMap":生成对应的 .map 文件,用于调试 TypeScript。
    • "declaration":生成相应的 .d.ts 声明文件。
    • "noImplicitAny":禁止隐式的 any 类型。
    • "noUnusedLocals":禁止未使用的局部变量。
    • "noUnusedParameters":禁止未使用的函数参数。
    • "strictNullChecks":启用严格的空值检查。
    • "jsx":指定 JSX 代码的生成(例如:"react"、"preserve"、"react-native"等)。
    • "lib":指定要包含的库文件。
    • "baseUrl":基本目录解析的基准目录。
    • "paths":指定模块名称到基于 baseUrl 的路径映射。
    • "rootDir":指定源文件的根目录。
  2. include:指定要包含的文件或目录,可以使用 glob 模式。
  3. exclude:指定要排除的文件或目录,可以使用 glob 模式。
  4. extends:引用另一个 tsconfig.json 文件的路径,允许继承和合并配置。
  5. files:指定要编译的文件列表,而不是使用 includeexclude 来匹配文件。
  6. references:指定项目引用的其他 TypeScript 项目。