• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > 配置文件智能的备份和还原

配置文件智能的备份和还原

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了路由器备份配置文件,备份配置文件,交换机配置文件备份,备份和载入配置文件,备份itv配置文件等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

配置文件智能的备份和还原


运用场景:
每当我们为很多安装同样的机器升级或者更新服务时,要备份配置文件中的某一行或者多行,或者一个数据块或者多个数据块,和服务升级、更新完后,再把对应的备份数据重新写回新的配置文件中;在大批量的服务器中操作,会浪费很多的时间和精力,以下脚本就是用来完成类似的事情。
主要功能有:
1.备份指定的一行或者多行,一个块或者多个块
2.备份指定的单个文件
3.还原所有部分备份和所有备份
4.配置文件精确定位插入【正则匹配】
5.配置文件精确定位删除
6.配置文件类似行后批量插入
服务的配置文件样例:
  1. server.config:
  2. ####配置文件样例:
  3. ser_max_connection=6000 #行
  4. ser_min_connection=10

  5. ser_time_out=60
  6. ser_time_spent=120

  7. server tcp_nodes{ ##块

  8. ser_client_ip=ipv4
  9. ser_client_len=20*N
  10. ser_client_syn=yes
  11. ser_client_ack=yes
  12. }
以下是shell脚本的代码实现,脚本主要是利用sed工具来完成配置编辑功能。此脚本是根据真实应用环境中改成通用版本,并没有经过严格的测试,如果你想要用此脚本,还请根据自己的环境下,做严重的测试。如果你有更好的想法,请加入QQ群:63565867。

  1. #!/bin/bash
  2. #DianDian
  3. proconf=/usr/local/server/etc #要备份的主目录,参数传入的文件名和会这个路径合并起来
  4. confpath=$proconf
  5. bkpath=/usr/local/src/bkconfig/part #备份文件中部分内容的保存目录
  6. bkpath_whole=/usr/local/src/bkconfig/whole #备份整个文件的保存目录
  7. handle_date=$(date "+%y%m%d%H%M")
  8. mkdir -p $bkpath $bkpath_whole
  9. FJ='^\+'
  10. FD='^\='
  11. ALLFILE=""

  12. function multidir(){ #dirname ##shell里面的一个递归函数,用来获得一个目录下的所有文件【如果文件名中包括空格,可能会出错】

  13. local dirs=$1
  14. local diri=0
  15. if [ ! -d $dirs ];then
  16. echo "$dirs is not a directory."
  17. exit 1
  18. fi
  19. local lsfile=$(ls -d $dirs/* 2>/dev/null)
  20. local dir_list=($lsfile)
  21. for((diri=0;diri<${#dir_list[@]};diri++)){
  22. if [ -d ${dir_list[$diri]} ];then
  23. multidir ${dir_list[$diri]}
  24. else
  25. ALLFILE="$ALLFILE ${dir_list[$diri]}"
  26. fi
  27. }
  28. }

  29. if [ "X$1" == "Xbackup" ];then
  30. num=0
  31. if [ "X$2" != "X" ];then
  32. OLD_IFS="$IFS"
  33. IFS="#"
  34. field=($2)
  35. IFS="$OLD_IFS"
  36. else
  37. echo -e "\033[31m Error \033[0m"
  38. exit 1
  39. fi
  40. SFS="+"
  41. F_CONF="$confpath/${field[0]}"
  42. B_CONF="$bkpath/${field[0]}"
  43. B_CDIR=$(dirname $B_CONF)
  44. if [ -e "$B_CONF" -a -s "$B_CONF" ];then
  45. echo -e "\033[31m Error $B_CONF exist and no empty. \033[0m"
  46. exit 1
  47. fi
  48. if [ ! -d $B_CDIR ];then
  49. mkdir -p $B_CDIR
  50. fi
  51. if [ -f "$F_CONF" ];then
  52. echo "backup @${field[0]}"
  53. while read line
  54. do
  55. ((num++))
  56. for((i=1;i<${#field[@]};i++)){
  57. if [[ ${field[$i]} =~ $FJ ]];then
  58. ST=${field[$i]#+}
  59. if [[ $line =~ ^$ST ]];then
  60. sed -n "$num,/}/p" $F_CONF | sed '1s/^/&+/' >> $B_CONF
  61. fi
  62. elif [[ ${field[$i]} =~ $FD ]];then
  63. ST=${field[$i]#=}
  64. STLine=${line%%=*}
  65. if [[ "$STLine" == "$ST" ]];then
  66. sed -n "${num}p" $F_CONF | sed '1s/^/&=/' >> $B_CONF
  67. fi
  68. else
  69. if [[ $line =~ ^${field[$i]} ]];then
  70. sed -n "${num}p" $F_CONF | sed '1s/^/&-/' >> $B_CONF
  71. fi
  72. fi
  73. }
  74. done < $F_CONF
  75. else
  76. echo -e "\033[31m Error:Skip ${field[0]} \033[0m"
  77. fi
  78. elif [ "X$1" == "Xrestore" ];then
  79. if [ "X$2" != "X" ];then
  80. List=(`ls -f $bkpath/$2 2>/dev/null`)
  81. else
  82. #List=(`ls -d $bkpath/* 2>/dev/null`)
  83. multidir $bkpath
  84. List=($ALLFILE)
  85. fi
  86. if [ "$List" == "" ];then
  87. echo -e "\033[31m restore:no valid file. \033[0m"
  88. fi
  89. for i in ${List[*]}
  90. do
  91. num=0
  92. B_CONF="$i"
  93. base=$(basename $i)
  94. if [ "$base" == "" -a -s $B_CONF ];then
  95. echo -e "\033[31m restore error @ $B_CONF \033[0m"
  96. continue
  97. fi
  98. F_CONF=$(echo $i | sed -n "s#$bkpath#$confpath#p")
  99. #F_CONF="$confpath/$base"
  100. echo -n "@ $F_CONF "
  101. if [ ! -f $F_CONF ];then
  102. echo -e "\033[31m restore error @ $F_CONF \033[0m"
  103. continue
  104. fi
  105. while read bconf
  106. do
  107. ((num++))
  108. TT=""
  109. Str=""
  110. if [[ $bconf =~ $FJ ]];then
  111. Str=$(sed -n -e "${num},/}/p" $B_CONF | sed '1s/^+//' | awk '{S=S"\\n"$0;}END{sub(/^../,"",S);printf("%s",S);}')
  112. TT="+"
  113. elif [[ $bconf =~ $FD ]];then
  114. Str=$(sed -n -e "${num}p" $B_CONF | sed '1s/^=//' | awk '{S=S"\\n"$0;}END{sub(/^../,"",S);printf("%s",S);}')
  115. TT="="
  116. elif [[ $bconf =~ ^- ]];then
  117. Str=$(sed -n -e "${num}p" $B_CONF | sed '1s/^-//' | awk '{S=S"\\n"$0;}END{sub(/^../,"",S);printf("%s",S);}')
  118. TT="-"
  119. else
  120. continue
  121. fi
  122. First=$(echo -e $Str | sed -n 1p)
  123. seek=0
  124. while read fconf
  125. do
  126. ((seek++))
  127. tmp_fconf=${fconf%%=*}
  128. tmp_first=${First%%=*}
  129. if [ "$tmp_fconf" == "$tmp_first" ];then
  130. if [ "$TT" == "+" ];then
  131. sed -i "${seek},/}/d" $F_CONF
  132. if [ $seek -ne 1 ];then
  133. sed -i "$[ ${seek} - 1 ]a$Str" $F_CONF
  134. else
  135. sed -i "${seek}a$Str" $F_CONF
  136. fi
  137. echo -n "$TT"
  138. TT=""
  139. break
  140. elif [ "$TT" == "=" ];then
  141. sed -i "${seek}s/.*/$Str/" $F_CONF
  142. echo -n "$TT"
  143. TT=""
  144. break
  145. elif [ "$TT" == "-" ];then
  146. sed -i "${seek}s/.*/$Str/" $F_CONF
  147. echo -n "$TT"
  148. TT=""
  149. break
  150. fi
  151. fi
  152. done < $F_CONF
  153. if [ "$TT" != "" ];then
  154. Err=$Err" $First\n"
  155. fi
  156. done < $B_CONF
  157. echo
  158. done
  159. if [ "$Err" != "" ];then
  160. echo -e "\n\033[33mError: $Err\033[0m"
  161. Err=""
  162. fi
  163. elif [ "X$1" == "Xinsert" ];then
  164. num=0
  165. snum=0
  166. n=1
  167. nn=0
  168. OLD_IFS="$IFS"
  169. IFS="#"
  170. if [ "X$2" != "X" ];then
  171. insert=($2)
  172. else
  173. echo -e "\033[31m Insert Error \033[0m"
  174. exit 1
  175. fi
  176. IFS="$OLD_IFS"
  177. if [ -f "$confpath/${insert[0]}" ];then
  178. while read olc
  179. do
  180. ((num++))
  181. tmp_olc=$(echo "$olc" | sed 's/ //g')
  182. tmp_olc=${tmp_o
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 配置文件智能的备份和还原

相关文章

  • 2017-05-26自定义的dialog中的EditText无法弹出输入法解决方案,dialogedittext
  • 2017-05-26Android 手机卫士--自定义属性,android卫士
  • 2017-05-26android ndk开发(二)实现一个官方demo,androidndk
  • 2017-05-26Android Log,androidlog
  • 2017-05-26解决VS2017不连接visual studio emulator for android,vs2017android
  • 2017-05-26Android线程优先级设置方法技巧,android线程优先级
  • 2017-05-26散列表的数学分析(精解)--通过链表法解决碰撞,数学分析精解
  • 2017-05-26Android面试准备 第二天 第五例 数据存储
  • 2017-05-26Android实战技巧之五十一:libjpeg与Android
  • 2017-05-26Kotlin的Reified类型:怎样在函数内使用这一类型(KAD 14),kotlinreified

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • android实现文字渐变效果和歌词进度的效果
    • Android音频开发之基础知识介绍
    • 基于PGPool的1主2从PostgreSQL流复制HA的搭建
    • Android--使用XMLPull解析xml
    • 【Android】第7章(2)--布局控件常用的公共属性,android第7章
    • Android镜像文件ramdisk.img,system.img,userdata.img介绍,ramdisk镜像
    • 如何编写高效的android代码
    • android开发之路08(ListView&amp;Adapter),androidlistview
    • Tips:datapump异常中断后的处理
    • Android开源项目分类汇总(六)工具库

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有