Linux中配置文件很多,各种需要设置的各种参数很多,有些自定义选项为了方便使用,都会自己修改使用,不过有时候配置文件或者用户参数属性不小心误删掉或者日后想找回当时的参数设置,没有备份肯定是不行的,所以闲暇之余自己写了一个专门备份/etc目录的脚本,以备不时之需。

  下面贴代码~

#!/bin/bash

echo "Backup is start!"                        #显示备份开始

ScreenName=$"backup"                           #设置变量定义窗口名
screen -dmS $ScreenName                        #创建一个出于断开模式下的窗口并指定名字
screen -S $ScreenName -p 0 -X stuff $"\cp -ap /etc /date/back`date +%F`"
                                               #向窗口传递命令备份/etc目录且命名为当前日期
screen -S $ScreenName -p 0 -X stuff $'\n'      #执行命令,相当于回车

echo "backing up,please wait~"                #等待备份完成,并提示等待

screen -S $ScreenName -p 0 -X stuff $'exit'    #备份完后传递退出窗口命令
screen -S $ScreenName -p 0 -X stuff $'\n'      #执行命令

echo "Backup is finshed!"                      #提示备份完成,脚本结束。

  之前写的脚本总是在创建完screen就停住了,之后的命令没法自动执行,必须Ctrl+A+D暂离screen之后才可以继续执行,不过这样就没法实现自动的初衷了。后来转换思路打算用screen -X的选项从原shell向screen中传递命令却总是失败,后来是参考了大神关于screen传递命令的方法(原文链接),才创建成功的。
在这里插入图片描述
  此脚本原理大体如下:
  脚本中执行screen命令,相当于打开了新的shell,而脚本上的命令都在老shell上,要让备份cp命令在screen上的新shell上跑起来,必须采用向新screen传递命令的方法,才可以实现后台备份,无需担心断网断电的问题。

screen -S $ScreenName -p 0 -X stuff $'cp -ap /etc /date/back`date +%F`'

  这条命令单独执行,只会传递在screen中输出cp命令却并不执行,需要
screen -S $ScreenName -p 0 -X stuff $'\n'
  命令执行时cp命令才会生效。exit命令亦是如此。
  各位大佬如果还有别的更好的方法可以实现功能,希望可以多多交流,不吝赐教。


一个低调的男人