作者: houlijiang

  • elasticsearch 安装IK分词插件

    docker run --name elasticsearch -p 9200:9200 \
     -p 9300:9300 \
     -e "discovery.type=single-node" \
     -e ES_JAVA_OPTS="-Xms64m -Xmx128m" \
      -v /home/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
     -v /home/elasticsearch/data:/usr/share/elasticsearch/data \
     -v /home/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
     -d elasticsearch:7.7.0
    --name elasticsearch:将容器命名为 elasticsearch
    -p 9200:9200:将容器的9200端口映射到宿主机9200端口
    -p 9300:9300:将容器的9300端口映射到宿主机9300端口,目的是集群互相通信
    -e "discovery.type=single-node":单例模式
    -e ES_JAVA_OPTS="-Xms64m -Xmx128m":配置内存大小
    -v /mydata/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml:将配置文件挂载到宿主机
    -v /mydata/elasticsearch/data:/usr/share/elasticsearch/data:将数据文件夹挂载到宿主机
    -v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins:将插件目录挂载到宿主机(需重启)
    -d elasticsearch:7.7.0:后台运行容器,并返回容器ID

    2.2、安装ik分词器

    进入已经启动成功的elasticsearch容器。

    docker exec -it elasticsearch /bin/bash
    
    ./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.7.0/elasticsearch-analysis-ik-7.7.0.zip
  • docker容器打包成镜像

    要将一个Docker容器打包成一个镜像,你需要使用docker commit命令。这个命令会基于容器的当前状态创建一个新的镜像。

    以下是使用docker commit命令的基本步骤:

    1. 确定要打包的容器ID或名称。可以使用docker ps命令查看正在运行的容器。
    2. 使用docker commit命令创建镜像,指定镜像的名称和标签。

    例如,如果你有一个名为my_container的容器,想要将它打包为名为my_image的镜像,并且标签为v1.0,你可以运行以下命令:

    bashdocker commit my_container my_image:v1.0

    完成这个命令后,my_container容器的当前状态就会被保存为一个名为my_image,标签为v1.0的新镜像。

    注意,这种方式创建的镜像只包含了容器运行时的状态,不包含构建时的历史和上下文信息。如果你想要创建一个可重复构建的Docker镜像,你应该使用Dockerfile来构建

    1. 登录阿里云Docker Registry

    $ docker login --username=tb55571********@aliyun.com registry.cn-beijing.aliyuncs.com

    用于登录的用户名为阿里云账号全名,密码为开通服务时设置的密码。

    您可以在访问凭证页面修改凭证密码。

    2. 从Registry中拉取镜像

    $ docker pull registry.cn-beijing.aliyuncs.com/houlijiang/es-ik:[镜像版本号]

    3. 将镜像推送到Registry

    $ docker login --username=tb55571********@aliyun.com registry.cn-beijing.aliyuncs.com
    $ docker tag [ImageId] registry.cn-beijing.aliyuncs.com/houlijiang/es-ik:[镜像版本号]
    $ docker push registry.cn-beijing.aliyuncs.com/houlijiang/es-ik:[镜像版本号]

    请根据实际镜像信息替换示例中的[ImageId]和[镜像版本号]参数。

    4. 选择合适的镜像仓库地址

    从ECS推送镜像时,可以选择使用镜像仓库内网地址。推送速度将得到提升并且将不会损耗您的公网流量。

    如果您使用的机器位于VPC网络,请使用 registry-vpc.cn-beijing.aliyuncs.com 作为Registry的域名登录。

    5. 示例

    使用”docker tag”命令重命名镜像,并将它通过专有网络地址推送至Registry。

    $ docker images
    REPOSITORY                                                         TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
    registry.aliyuncs.com/acs/agent                                    0.7-dfb6816         37bb9c63c8b2        7 days ago          37.89 MB
    $ docker tag 37bb9c63c8b2 registry-vpc.cn-beijing.aliyuncs.com/acs/agent:0.7-dfb6816

    使用 “docker push” 命令将该镜像推送至远程。

    $ docker push registry-vpc.cn-beijing.aliyuncs.com/acs/agent:0.7-dfb6816
  • MySQL数字的取整、四舍五入、保留n位小数

    数学函数是MySQL中常用的一类函数。其主要用于处理数字,包括整型和浮点数等等。

    MySQL常用的四舍五入函数:

    函数 说明
    FLOOR(X) 返回不大于X的最大整数。
    CEIL(X)、CEILING(X) 返回不小于X的最小整数。
    TRUNCATE(X,D) 返回数值X保留到小数点后D位的值,截断时不进行四舍五入。
    ROUND(X) 返回离X最近的整数,截断时要进行四舍五入。
    ROUND(X,D) 保留X小数点后D位的值,截断时要进行四舍五入。
    FORMAT(X,D) 将数字X格式化,将X保留到小数点后D位,截断时要进行四舍五入。

    1、FLOOR(X)函数

    返回不大于X的最大整数。

    SELECTFLOOR(1.3); -- 输出结果:1SELECTFLOOR(1.8); -- 输出结果:1

    2、CEIL(X)、CEILING(X)函数

    返回不小于X的最小整数。

    SELECTCEIL(1.3);    -- 输出结果:2SELECTCEILING(1.8); -- 输出结果:2

    3、TRUNCATE(X,D)函数

    返回数值X保留到小数点后D位的值,截断时不进行四舍五入。

    SELECT TRUNCATE(1.2328,3); -- 输出结果:1.232 

    4、ROUND(X)函数

    返回离X最近的整数,截断时要进行四舍五入。

    SELECT ROUND(1.3);  -- 输出结果:1SELECT ROUND(1.8);  -- 输出结果:2

    5、ROUND(X,D)函数

    保留X小数点后D位的值,截断时要进行四舍五入。

    SELECT ROUND(1.2323,3);  -- 输出结果:1.232SELECT ROUND(1.2328,3);  -- 输出结果:1.233

    6、FORMAT(X,D)函数

    将数字X格式化,将X保留到小数点后D位,截断时要进行四舍五入。

    SELECT FORMAT(1.2323,3);  -- 输出结果:1.232SELECT FORMAT(1.2328,3);  -- 输出结果:1.233
  • MySQL删除表数据、清空表命令(truncate、drop、delete 区别)

    一、MySQL清空表数据三种方法

    1.1 清空表数据:truncate

    • sql命令

    代码语言:sql

    复制

    #清空多张表、库中所有表的数据
    truncate table table_name1,table_name2,...;
    
    #清空单张表的数据
    truncate table table_name;
    • 注意:
    • truncate会删除表中的所有数据、释放空间,但是保留表结构
    • 只能操作表,不能与where一起使用
    • truncate删除操作立即生效,原数据不放到rollback segment中,不能rollback,操作不触发trigger
    • truncate删除数据后会释放表空间、重置Identity(标识列、自增字段),相当于自增列会被置为初始值,又重新从1开始记录、而非接着原来的id数
    • truncate删除数据后不写服务器log,整体删除速度快

    1.2 删除表:drop

    • sql命令

    代码语言:sql

    复制

    drop table table_name;
    drop table if exists table_name;
    • 注意:
      • drop会删除整个表,包括表结构和数据,释放空间
      • 立即执行,执行速度最快
      • 不可回滚

    1.3 删除/清空表数据:delete

    • sql命令

    代码语言:sql

    复制

    #删除部分数据
    delete from tb_name where clause;
    
    #清空表,仅删除数据、保留表结构,同时也不释放表空间
    delete from tb_name;
    • 注意:
      • 删除表中数据而不删除表结构,也不释放空间
      • delete可以删除一行、多行、乃至整张表
      • 每次删除一行,都在事务日志中为所删除的每行记录一项,可回滚
      • 如果不加where条件,表示删除表中所有数据,仅删除数据、保留表结构,同时也不释放表空间

    MySQL、Mariadb、PostgreSQL删除表数据、清空表命令 都可用以上三种命令。

    二、使用原则

    使用原则总结如下:

    • 当你不需要该表时(删除数据和结构),用drop;
    • 当你仍要保留该表、仅删除所有数据表内容时,用truncate;
    • 当你要删除部分记录、且希望能回滚的话,用delete;

    在没有备份的情况下,谨慎使用drop、truncate。

    在实际应用中,要根据具体需求和场景选择合适的操作。

    三、truncate、drop、delete区别

    truncate、delete和drop都是用于删除数据或表的操作,但它们之间有一些关键的区别:

    1. 操作类型:
      • truncate:删除表中的所有数据,保留表结构,释放空间。它是一种DDL(数据定义语言)操作,执行速度较快。
      • delete:删除表中的特定行,可以逐行删除,保留表结构,也不释放空间。它是一种DML(数据操作语言)操作,执行速度较慢。
      • drop:删除整个表,包括表结构和数据,释放空间。它是一种DDL操作,但不同于truncate,它会释放表所占用的空间。
    2. 数据删除方式:
      • truncate:删除表中的所有数据,但不会删除表结构。适用于需要保留表结构的情况。
      • delete:删除表中的特定数据,可以根据条件删除,表的结构和约束保持不变。适用于需要根据特定条件删除数据的情况。
      • drop:删除整个表,包括表结构和数据。适用于不再需要表结构的情况。
    3. 执行速度:drop > truncate > delete
      • truncate:执行速度较快,因为它一次性删除所有数据,过释放表的存储空间来删除数据,并将表重置为初始状态。
      • delete:执行速度较慢,因为它需要逐行删除数据,并且会生成大量的事务日志,同时也不释放空间。
      • drop:执行速度较快,因为它一次性删除整个表。
    4. 回滚能力:
      • truncate:不可回滚,一旦执行,数据将被永久删除、无法恢复。
      • delete:可以回滚,使用ROLLBACK语句可以撤销删除操作。
      • drop:不可回滚,一旦执行,表结构和数据都将被永久删除。
    5. 触发器:
      • truncate:不会触发触发器。
      • delete:会触发触发器。
      • drop:不会触发触发器,因为它是删除整个表。

    总结:

    • 如果您需要快速删除整个表中的数据,但保留表结构,可以选择truncate。
    • 如果您需要删除特定行的数据,可以根据条件删除,可以选择delete。
    • 如果您需要删除整个表,包括表结构和数据,可以选择drop。 在实际应用中,要根据具体需求和场景选择合适的操作。
  • Rclone 使用教程

    Rclone是一个命令行程序,用于管理云存储上的文件。他打包了各大供应商云存储的接口提供统一的访问界面。rclone支持40多种云存储产品,包括对象存储、企业和消费者文件存储、服务以及标准传输协议。Rclone符合unix POSIX规范,支持于常见的shell工具,比如rsync、cp、 mv、mount、ls、ncdu、tree、rm 和cat等交互,Rclone使用我们耳闻能熟的语法,支持shell管道,支持—dry-run保护,同时为了保护数据的可靠性,Rclone可保留时间戳和始终进行文件验证校验和。Rclone多种文件传输协议,支持SFTP,HTTP,WebDAV,FTP和DLNA。Rclone是一个成熟的开源软件,最初受rsync的启发并采用Golang编写。其文档和社区也都非常好,提供广泛和友好的使用用例。

    设置

    命令 说明
    rclone config 添加、删除、管理网盘等操作
    rclone config file 显示配置文件的路径
    rclone config show 显示配置文件信息
    root@SunPma:~# rclone config
    Current remotes:
    
    Name                 Type
    ====                 ====
    DB                 dropbox
    GD                 drive
    
    e) Edit existing remote
    n) New remote
    d) Delete remote
    r) Rename remote
    c) Copy remote
    s) Set configuration password
    q) Quit config
    e/n/d/r/c/s/q>

    语法

    # 本地到网盘
    rclone [功能选项] <本地路径> <配置名称:路径> [参数] [参数]
    
    # 网盘到本地
    rclone [功能选项] <配置名称:路径> <本地路径> [参数] [参数]
    
    # 网盘到网盘
    rclone [功能选项] <配置名称:路径> <配置名称:路径> [参数] [参数]
    
    # [参数]为可选项

    示例

    # 复制到网盘,并显示实时传输进度,设置并行上传数为8
    
    rclone copy -P /home/SunPma GD:/home/SunPma --transfers=8
    
    # 如果需要服务端对服务端的传输可加以下参数(不消耗本地流量)
    
    rclone copy 配置名称:网盘路径 配置名称:网盘路径 --drive-server-side-across-configs

    功能

    命令 说明
    rclone copy 复制
    rclone move 移动,如果要在移动后删除空源目录,加上 –delete-empty-src-dirs 参数
    rclone sync 同步:将源目录同步到目标目录,只更改目标目录
    rclone size 查看网盘文件占用大小
    rclone delete 删除路径下的文件内容
    rclone purge 删除路径及其所有文件内容
    rclone mkdir 创建目录
    rclone rmdir 删除目录
    rclone rmdirs 删除指定环境下的空目录。如果加上 –leave-root 参数,则不会删除根目录
    rclone check 检查源和目的地址数据是否匹配
    rclone ls 列出指定路径下的所有的文件以及文件大小和路径
    rclone lsl 比上面多一个显示上传时间
    rclone lsd 列出指定路径下的目录
    rclone lsf 列出指定路径下的目录和文件

    参数

    命令 说明
    -n = –dry-run 测试运行,查看Rclon在实际运行中会进行哪些操作
    -P = –progress 显示实时传输进度,500mS刷新一次,否则默认1分钟刷新一次
    –cache-chunk-size 5M 块的大小,默认5M越大上传越快,占用内存越多,太大可能会导致进程中断
    –onedrive-chunk-size 100M 提高OneDrive上传速度适用于G口宽带服务器(默认为320KB)
    –drive-chunk-size 64M 提高Google Drive上传速度适用于G口宽带服务器(默认为8M)
    –cache-chunk-total-size SizeSuffix 块可以在本地磁盘上占用的总大小,默认10G
    –transfers=N 并行文件数,默认为4
    –config string 指定配置文件路径,string为配置文件路径
    –ignore-errors 跳过错误
    –size-only 根据文件大小校验,不校验hash
    –drive-server-side-across-configs 服务端对服务端传输

    日志

    有4个级别的日志记录:ERROR NOTICE INFO DEBUG
    默认情况下Rclon将生成ERROR NOTICE日志

    命令 说明
    -q rclone将仅生成ERROR消息
    -v rclone将生成ERROR NOTICE INFO 消息
    -vv rclone 将生成ERROR NOTICE INFO DEBUG 消息
    –log-level LEVEL 标志控制日志级别

    输出日志到文件
    使用--log-file=FILE选项rclone会将Error Info Debug消息以及标准错误重定向到FILE
    这里的FILE是你指定的日志文件路径

    过滤

    命令 说明
    –exclude 排除文件或目录
    –include 包含文件或目录
    –filter 文件过滤规则,相当于上面两个选项的其它使用方式。包含规则以+开头,排除规则以-开头

    文件类型过滤
    例如--exclude "*.bak" --filter "- *.bak"排除所有bak文件
    例如--include "*.{png,jpg}" --filter "+ *.{png,jpg}"包含所有pngjpg文件,排除其他文件
    例如--delete-excluded删除排除的文件。需配合过滤参数使用,否则无效
    目录过滤
    目录过滤需要在目录名称后面加上/否则会被当做文件进行匹配
    /开头只会匹配根目录(指定目录下),否则匹配所目录,这同样适用于文件
    --exclude ".git/"排除所有目录下的.git目录
    --exclude "/.git/"只排除根目录下的.git目录
    --exclude "{Video,Software}/"排除所有目录下的VideoSoftware目录
    --exclude "/{Video,Software}/"只排除根目录下的VideoSoftware目录
    --include "/{Video,Software}/**"仅包含根目录下的VideoSoftware目录的所有内容
    大小过滤
    默认大小单位为kBytes但可以使用k MG后缀
    --min-size过滤小于指定大小的文件。比如--min-size 50表示不会传输小于50k的文件。
    --max-size过滤大于指定大小的文件。比如--max-size 1G表示不会传输大于1G的文件。
    实际使用中发现大小过滤两个选项不能同时使用
    过滤规则文件
    --filter-from <规则文件>从文件添加包含/排除规则
    比如--filter-from filter-file.txt
    过滤规则文件示例:

    - secret*.jpg
    + *.jpg
    + *.png
    + file2.avi
    - /dir/Trash/**
    + /dir/**
    - *

    环境变量

    rclone中的每个选项都可以通过环境变量设置。环境变量的名称可以通过长选项名称进行转换,删除--前缀,更改-_大写并添加前缀RCLONE_环境变量的优先级会低于命令行选项,即通过命令行追加相应的选项时会覆盖环境变量设定的值。
    比如设置最小上传大小--min-size 50使用环境变量是RCLONE_MIN_SIZE=50当环境变量设置后,在命令行中使用--min-size 100那么此时环境变量的值就会被覆盖
    常用环境变量

    命令 说明
    RCLONE_CONFIG 自定义配置文件路径
    RCLONE_CONFIG_PASS 若 rclone 进行了加密设置,把此环境变量设置为密码,可自动解密配置文件
    RCLONE_RETRIES 上传失败重试次数,默认 3 次
    RCLONE_RETRIES_SLEEP 上传失败重试等待时间,默认禁用,单位s、m、h分别代表秒、分钟、小时
    CLONE_TRANSFERS 并行上传文件数
    RCLONE_CACHE_CHUNK_SIZE 块的大小,默认5M
    RCLONE_CACHE_CHUNK_TOTAL_SIZE 块可以在本地磁盘上占用的总大小,默认10G
    RCLONE_IGNORE_ERRORS=true 跳过错误

     #rclone

  • Linux程序前台后台切换

    1、在Linux终端运行命令的时候,在命令末尾加上 & 符号,就可以让程序在后台运行

    root@Ubuntu$ ./tcpserv01 &

    2、如果程序正在前台运行,可以使用 Ctrl+z 选项把程序暂停,然后用 bg %[number] 命令把这个程序放到后台运行,摁Ctrl+z,然后在最后一行加上bg %number

    3、对于所有运行的程序,我们可以用jobs –l 指令查看

    [kettle@4 data-integration]$ jobs -l

    4、也可以用 fg %[number] 指令把一个程序掉到前台

    cat@Ubuntu:~/unp/unpv13e/tcpcliserv$ fg %1
    ./tcpserv01

    5、也可以直接终止后台运行的程序,使用 kill 命令

    cat@Ubuntu:~/unp/unpv13e/tcpcliserv$ kill %1

    二、fg、bg、jobs、&、nohup、ctrl+z、ctrl+c 命令

    一、&
    加在一个命令的最后,可以把这个命令放到后台执行,如
    watch -n 10 sh test.sh & #每10s在后台执行一次test.sh脚本

    二、ctrl + z
    可以将一个正在前台执行的命令放到后台,并且处于暂停状态。


    三、jobs
    查看当前有多少在后台运行的命令
    jobs -l选项可显示所有任务的PID,jobs的状态可以是running, stopped, Terminated。但是如果任务被终止了(kill),shell 从当前的shell环境已知的列表中删除任务的进程标识。


    四、fg
    将后台中的命令调至前台继续运行。如果后台中有多个命令,可以用fg %jobnumber(是命令编号,不是进程号)将选中的命令调出。


    五、bg
    将一个在后台暂停的命令,变成在后台继续执行。如果后台中有多个命令,可以用bg %jobnumber将选中的命令调出。


    六、kill
    法子1:通过jobs命令查看job号(假设为num),然后执行kill %num
    法子2:通过ps命令查看job的进程号(PID,假设为pid),然后执行kill pid
    前台进程的终止:Ctrl+c


    七、nohup
    如果让程序始终在后台执行,即使关闭当前的终端也执行(之前的&做不到),这时候需要nohup。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。关闭中断后,在另一个终端jobs已经无法看到后台跑得程序了,此时利用ps(进程查看命令)

    ps -aux | grep “test.sh” #a:显示所有程序 u:以用户为主的格式来显示 x:显示所有程序,不以终端机来区分

    八、查看nohup.out的日志

    linux 下:

    tail -fn 50 nohup.out
  • 一键安装PHP swoole 环境

     curl -sS https://gitee.com/houlijiang/common/raw/master/php-install.sh | sh -

    卸载:

    完全卸载删除PHP

    查看全部的PHP软件包,命令:rpm -qa|grep php
    实例如下:

    [root\@xxx\~]
    # rpm -qa|grep php
    php-cli-5.4.16-46.el7.x86\_64
    php-common-5.4.16-46.el7.x86\_64
    php-5.4.16-46.el7.x86\_64
    

    找到PHP的软件包后,我们使用命令:rpm -e 软件包名的方式一个个删除即可完全删除。

    注意:由于某些PHP软件包被其他PHP软件包所依赖,删除顺序不同,回到值无法删除,例如上面的实例中 php-cli-5.4.16-46.el7.x86_64 被其他的PHP软件包所需要,如果先执行命令:rpm -e php-cli-5.4.16-46.el7.x86_64会删除不了,所以执行删除顺序为:

    rpm -e php-5.4.16-46.el7.x86_64
    rpm -e php-cli-5.4.16-46.el7.x86_64
    rmp -e php-common-5.4.16-46.el7.x86_64

    删除完毕后,可以使用命令php -v检查下是否还会返回版本信息,如果没有提示,说明已经删除了。

    综上,先使用命令rpm -qa|grep php检查全部的PHP软件包,然后再使用命令rpm -e 软件包名删除PHP软件包。

  • liunx 配置固定ip

    #在/etc/sysconfig/network-scripts/ifcfg-网卡名 文件中配置
    #例
    [root@zbx-server /]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
    TYPE=Ethernet
    PROXY_METHOD=none
    BROWSER_ONLY=no
    BOOTPROTO=static
    DEFROUTE=yes
    IPV4_FAILURE_FATAL=no
    IPV6INIT=yes
    IPV6_AUTOCONF=yes
    IPV6_DEFROUTE=yes
    IPV6_FAILURE_FATAL=no
    IPV6_ADDR_GEN_MODE=stable-privacy
    NAME=eth0
    UUID=47c875bd-32d2-4a6a-b66a-4bbbf491a5cf
    DEVICE=eth0
    ONBOOT=yes
    IPADDR=172.17.18.223
    GATEWAY=172.17.19.254
    NETMASK=255.255.254.0
    DNS1=172.16.0.102
    DNS2=172.16.0.201
    
    systemc restart network   #重启网