ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

fastjson版本替换升级脚本

2022-09-01 11:00:39  阅读:265  来源: 互联网

标签:fastjson jar update echo 版本 path backup 替换


fastjson漏洞修复脚本
  • 脚本说明
    fastjson_update.sh:对指定目录下的fastjson jar包进行备份、升级、还原。

  • 使用帮助

    • 上传到项目外任意目录下并解压并赋予执行权限(如/opt)

      cd /opt
      tar xf fastjson_update.tar.gz
      chmod +x fastjson_update/fastjson_update.sh
      
    • 查看脚本帮助信息

      cd /opt/fastjson_update
      ./fastjson_update.sh h 
      或
      ./fastjson_update.sh help
      fastjson相关依赖包备份、还原、升级脚本使用说明:
      Usage: fastjson_update.sh <option>
      option 支持以下参数
        backup|b   备份
        restore|r  还原备份
        update|u  还原备份
        help|h  显示帮助信息
      
    • 原有fastjson环境备份

      ./fastjson_update.sh backup
      #按照提示输入项目所在路径,如/data/topisa
      #备份完成后会提示完成信息;并在当前目录下存放备份的文件目录jar_backup和文件原始位置信息backup_info用于后续环境恢复
      

      image-20220524191229588

    • 版本升级

      ./fastjson_update.sh update
      #按照提示输入项目所在路径,如/data/topisa
      #升级完成后可手动使用find /data/topisa -name fastjson*.jar 查看升级是否正常
      #请手动重启相关服务
      

      image-20220524191411109

    • 版本回退

      ./fastjson_update.sh restore
      #使用备份的环境信息和原有fastjson依赖包进行环境恢复
      #恢复后请手动重启相关服务
      

      image-20220524191905637

  • 目录结构

    - fastjson_update
      - fastjson_update.sh
      - fastjson-1.2.83.jar
    
  • 脚本内容如下

    #!/bin/bash
    #fastjson 依赖包备份及还原脚本
    
    base_dir=$(cd `dirname $0`;pwd)
    base_name=${0##*/}
    backup_dir=${base_dir}/jar_backup
    backup_info=${base_dir}/backup_info
    des_path=/data
    
    if [[ ! -d ${backup_dir} ]] ;then
        mkdir ${backup_dir}
    fi
    
    help_info(){
        echo -e "fastjson相关依赖包备份、还原、升级脚本使用说明:"
        echo -e "Usage: ${base_name} <option>"
        echo -e "option 支持以下参数"
        echo -e "  backup|b   备份"
        echo -e "  restore|r  还原备份"
        echo -e "  update|u  还原备份"
        echo -e "  help|h  显示帮助信息"
    }
    backup(){
        echo "开始备份"
        while [ 1 ]; do
            echo  "请输入项目所在路径:" 
            read des_path
            if [[ ! -d ${des_path} ]] ;then
                echo "项目路径不存在,请重新输入;Ctrl+C退出"
            else
                break
            fi
        done 
        echo "3秒后开始执行fastjson备份;目标路径${des_path};如有异常Ctrl+C结束备份任务"
        sleep 3
        find ${des_path} -name "fastjson*.jar" | grep "${des_path}" > ${backup_info}
        sed  -i "s#^des_path=.*#des_path=${des_path}#" ${base_dir}/${base_name}
        echo "清空备份目录"
        rm -rf ${backup_dir}/*
        echo "=============================================================================================="
        for i in `cat ${backup_info}` 
        do 
            echo  -e "\t开始备份$i"
            echo y | cp -rf $i ${backup_dir}
        done
        echo "=============================================================================================="
        echo "备份已完成;请勿删除${backup_dir},${backup_info}"
         
    }
    
    restore(){
        if [[ ! -d ${des_path} ]] ;then
            echo "项目路径不存在,异常退出"
            exit 2
        fi
        echo "3s开始还原${des_path}路径下fastjson备份;如有异常Ctrl+C结束还原任务"
        sleep 3
        echo "清理新版本fastjson"
        count=`find ${des_path} -name fastjson-1.2.83.jar |wc -l`
        if [[ "${count}" != "0" ]];then
            find ${des_path} -name fastjson-1.2.83.jar  | xargs rm
        fi
    
        echo "恢复旧版本fastjson"
        echo "=============================================================================================="
        for i in `cat ${backup_info}` 
        do 
            jar_path=${i%/*}
            jar_name=${i##*/}
            echo -e "\t还原路径:$jar_path 下的 ${jar_name}"
            if [[ -d "${jar_path}" ]];then
                echo y | cp -rf ${backup_dir}/${jar_name} ${jar_path}
            fi 
        done
        echo "=============================================================================================="
        echo "还原结束"
    }
    update(){
        # fastjson version update to fastjson-1.2.83
        while [ 1 ]; do
            echo  "请输入项目所在路径:" 
            read des_path
            if [[ ! -d ${des_path} ]] ;then
                echo "项目路径不存在,请重新输入;Ctrl+C退出"
            else
                break
            fi
        done
        echo ${backup_info}
        if [[ ! -s ${backup_info}  ]] ;then
            while :
            do
                    read -p "项目fastjson未备份是否继续(y/n)"
                            case $REPLY in
                            Y|y)
                                    echo "继续进行fastjson版本升级"
                                    break ;;
                            n|N)
                                    echo "安装将1秒后自动结束;请使用$0 backup备份"
                                    sleep 1
                                    exit
                                    break ;;
                            *)
                                    echo "输入内容错误,请重新输入(输入y继续升级,输入n取消升级)"
                                    continue
                            esac
    
            done
        fi
        echo "开始替换"
        if [[ ! -d "${des_path}" ]] ;then
           echo "${des_path} 路径不存在,请重新输入"
           exit 2
        fi
        
        cd ${des_path}
        counts=`find ./ -name fastjson*.jar | grep -v fastjson-1.2.83.jar |wc -l`
        if [[ ${counts} != 0  ]] ;then
            find ./ -name fastjson*.jar | xargs dirname |xargs -i  cp ${base_dir}/fastjson-1.2.83.jar {}
            counts=`find ./ -name fastjson*.jar | grep -v fastjson-1.2.83.jar |wc -l`
            if [[ ${counts} != 0 ]];then
               find ./ -name fastjson*.jar | grep -v fastjson-1.2.83.jar  | xargs rm 
            fi
        else
            echo "当前环境不存在可升级的fastjson依赖"   
        fi
        echo "升级完成;请手动重启相关服务!!"   
    }
    
    if [[ $# -eq 1 ]];then
        option=$1
    else
        help_info
        exit 1
    fi
    
    case ${option} in
    "backup" | "b")
        backup
        exit 0
        ;;
    "restore"|"r")
        restore
        exit 0
        ;;
    "update"|"u")
        update
        exit 0
        ;;
    "h"|"help")
        help_info
        exit 0
        ;;
    *)
        echo "输入错误;使用帮助:$0 <backup b|restore r|help h>"
        ;;
    esac
    
    

标签:fastjson,jar,update,echo,版本,path,backup,替换
来源: https://www.cnblogs.com/lastyear/p/16645763.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有