登录
首页 >  科技周边 >  人工智能

Linux文件定期备份与删除脚本实战攻略

时间:2025-04-21 22:52:06 327浏览 收藏

本文提供了一套完整的Linux文件定期备份与删除脚本方案,涵盖本地备份、异地备份(利用expect实现自动化密码输入)和过期备份删除三个方面。脚本利用crontab实现定时任务,并对输出和错误信息进行重定向,方便监控。文中详细介绍了脚本的编写过程、使用方法及相关依赖(expect、cron、Linux时间戳),并提供了GitHub脚本地址方便读者下载使用,有效解决数据丢失问题,保障数据安全。 学习本文,您可以轻松掌握Linux系统下的自动化备份和数据管理技术。

目录
  • 一.背景

  • 二.依赖功能介绍

  • 1.expect

  • 2.cron

  • 3.Linux的三个时间atime, mtime, ctime

  • 三.本地备份脚本

  • 四.异地备份脚本

  • 五.定期删除备份

  • 六.GitHub脚本地址

一.背景

1.数据丢失问题时有发生,如果没有备份,情况将变得非常被动,无论是由于病毒还是人为操作导致的程序或数据删除,事后悔恨已无济于事,不如提前做好数据备份,而异地备份则更为安全。

2.数据备份的意义在于,当遭遇网络攻击、入侵、电源故障或操作失误等事故时,能够完整、快速、简便、可靠地恢复原有系统,在一定范围内保障系统正常运行。

二.依赖功能介绍

1.expect

作用:expect工具可用于与其他交互式程序进行脚本化交互。

安装命令:yum install expect

参考文档:Linux之expect操作详解

2.cron

作用:根据配置文件设定的时间执行特定任务。

参考文档:

Linux Crontab 定时任务

cron表达式

3.Linux的三个时间atime, mtime, ctime

作用:定期删除备份时通常根据备份文件的mtime来进行。

参考文档:详解Linux中atime, mtime, ctime的使用场景

三.本地备份脚本

1.本地备份命令测试

<code>mkdir -p /root/backup/`date "+%Y-%m-%d"`
tar -zcvPf /root/backup/`date "+%Y-%m-%d"`/test20221009.tar.gz /root/test20221009</code>

Linux实现文件定期本地备份/异地备份/删除备份的脚本

2.封装shell脚本:compress_backup.sh

<code>#!/bin/bash
source_folder=/root/test20221009
backup_folder=/root/backup/`date "+%Y-%m-%d"`
source_folder_name=`echo $source_folder |awk -F "/" '{print $3}'`.tar.gz
echo "source_folder:$source_folder"
echo "backup_folder: $backup_folder"
echo "source_folder_name: $source_folder_name"
<h1>新建立文件夹</h1><p>mkdir -p /root/backup/<code>date "+%Y-%m-%d"</code></p><h1>压缩命令</h1><p>tar -zcvPf $backup_folder/$source_folder_name  $source_folder
echo "$source_folder_name文件备份成功"</p></code>

Linux实现文件定期本地备份/异地备份/删除备份的脚本

3.加入crond定时任务并将输出与错误重定向至文件

编辑添加crond定时任务列表

<code>crontab -e</code>

设置每天00:00执行一次备份任务,并将标准输出与标准错误重定向至日志文件

<code>0 0 <em> </em> * sh /root/backup/compress<em>backup.sh 2>&1 > /root/backup/log</em>$(date +\%Y-\%m-\%d)</code>

测试查看任务执行情况:

<code>tail -5 /var/log/cron</code>

Linux实现文件定期本地备份/异地备份/删除备份的脚本

查看备份文件与本地日志正确生成

Linux实现文件定期本地备份/异地备份/删除备份的脚本

四.异地备份脚本

1.异地备份命令测试:

<code>scp -C -r /root/backup/2022-10-10/ mrswhite@192.168.37.9:/root/back_up_offsite</code>

提示输入密码后进行备份

Linux实现文件定期本地备份/异地备份/删除备份的脚本

查看对端文件备份成功

Linux实现文件定期本地备份/异地备份/删除备份的脚本

2.封装expect脚本offsite_backup.expect,当提示输入密码时可自动对应输入密码

<code>#!/usr/bin/expect -f<h1>获取当前日期 例如:2022-10-12</h1><p>set date [ clock format [ clock seconds ] -format "%Y-%m-%d" ]</p><h1>传输用户名</h1><p>set username mrswhite</p><h1>对端hostIP地址</h1><p>set host 192.168.37.9</p><h1>密码</h1><p>set password test20221012</p><h1>设置本地传输路径-前缀</h1><p>set source_folder /root/backup</p><h1>设置兑换传输路径</h1><p>set backup_folder /root/back_up_offsite</p><h1>expect默认timeout为30S  超过30s未传输完会停止,设置为 -1 则不限制超时时间</h1><p>set timeout -1</p><h1>压缩  递归   本地绝对路径           用户名   目标IP   目标路径</h1><p>spawn  /usr/bin/scp  -C   -r    $source_folder/$date/   $username@$host:$backup_folder</p><p>expect  {
"<em>yes/no" {send "yes\r";exp_continue}
"</em>password:" {send "$password\r"}
}</p><p>expect eof</p></code>

运行后查询结果,已实现了无人值守备份的功能

Linux实现文件定期本地备份/异地备份/删除备份的脚本

查看异地文件已生成:

Linux实现文件定期本地备份/异地备份/删除备份的脚本

3.加入crond定时任务并将输出与错误重定向至文件

<code>crontab -e</code>

设置每天02:00执行一次异地备份任务,(给本地备份充足的时间预留)并将标准输出与标准错误重定向至日志文件

<code>0 1 <em> </em> * expect /root/backup/offsite_backup.expect 2>&1 >  /root/backup/offsite<em>log</em>$(date +\%Y-\%m-\%d)</code>

修改系统时间,重启crond服务等待定时任务的执行,并查询日志:

<code>date -s "2022-10-10 00:59:50"
service crond restart
tail -5 /var/log/cron</code>

Linux实现文件定期本地备份/异地备份/删除备份的脚本

检查异地文件备份成功:

Linux实现文件定期本地备份/异地备份/删除备份的脚本

五.定期删除备份

1.定期删除命令测试:

<code>find /root/backup/ -mtime +180 | xargs rm -rf {}  #删除180天前的文件与文件夹的信息</code>

Linux实现文件定期本地备份/异地备份/删除备份的脚本

2.封装shell脚本delete_expire_backupfile.sh,清理的目录与过期时间可配置

<code>#!/bin/bash<h1>待清除目录</h1><p>dir=/root/backup/</p><h1>文件的过期周期</h1><p>day_expireDay=10</p><h1>删除最终为day_expireDay前的备份文件与文件夹信息</h1><p>find $dir -mtime +$day_expireDay | xargs rm -rf {}
echo "$dir下的$day_expireDay天前的文件清理成功"</p></code>

查看文件清理效果如下:

Linux实现文件定期本地备份/异地备份/删除备份的脚本

3.加入crond定时任务并将输出与错误重定向至文件

<code>crontab -e</code>

设置每天00:00执行一次异地备份任务,并将标准输出与标准错误重定向至日志文件

<code>0 0 <em> </em> * sh /root/backup/delete_expire_backupfile.sh 2>&1 >  /root/backup/delete_log__$(date +\%Y-\%m-\%d)</code>

修改系统时间,重启crond服务等待定时任务的执行,并查询日志,文件已清理成功

<code>date -s "2022-10-12 23:59:50"
service crond restart
tail -5 /var/log/cron</code>

Linux实现文件定期本地备份/异地备份/删除备份的脚本

六.GitHub脚本地址

GitHub地址

至此,本文关于在Linux上实现定期本地备份、异地备份及删除备份的脚本介绍就到这里了。如需了解更多相关Linux文件定期备份的内容,请搜索我们之前的文章或继续浏览下面的相关文章,期待大家以后多多支持我们!

本篇关于《Linux文件定期备份与删除脚本实战攻略》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于科技周边的相关知识,请关注golang学习网公众号!

相关阅读
更多>
最新阅读
更多>
课程推荐
更多>