Linux如何编写Shell备份脚本_Linux Shell备份脚本编写思路

小明姑娘_6002

小明姑娘_6002

2026-04-06

592人浏览

原创

备份脚本的核心是可预期执行、即时失败告警和明确恢复路径;需用带转义时间戳的tar命令命名,捕获stderr验证成功,安全清理旧备份,优先rsync远程传输,并必须定期手动验证恢复。

linux如何编写shell备份脚本_linux shell备份脚本编写思路

直接说结论:备份脚本的核心不是“写得多漂亮”,而是“每次执行都可预期、失败能立刻发现、恢复路径明确”。

怎么用 tar 打包 + 时间戳命名,避免覆盖

常见错误是写成 tar -czf backup.tar.gz /data,下次运行直接覆盖,根本分不清哪次是哪次。

  • 必须带时间戳:tar -czf backup_$(date +\%Y\%m\%d_\%H\%M).tar.gz /data
  • 注意 date 里的 \% 要转义,否则 shell 会报错或展开失败
  • 建议统一用 UTC 或本地时区,别混用;如果服务器跨时区部署,优先用 date -u
  • 文件名里避免空格和冒号(: 在 Windows 下非法),所以用下划线和短横线更稳妥

如何判断 tar 是否真成功,而不是“看起来没报错”

tar 即使部分文件权限不足、路径不存在,也常返回 0(成功码),但实际漏打了关键目录。

  • 加 --warning=no-file-ignored 会掩盖问题,别开
  • 真正可靠的是捕获 stderr 并检查非空:tar -czf ... 2> tar.err && [ ! -s tar.err ]
  • 更进一步:用 tar -tzf xxx.tar.gz | head -n1 验证压缩包可读且非空
  • 别只依赖 $?,tar 对很多错误静默容忍

备份前该删旧文件吗?用 find 还是 ls | head -n

留太多备份占磁盘,但删错了会导致无可用备份。重点不是“怎么删”,而是“删得安全可逆”。

  • 用 find /backup -name "backup_*.tar.gz" -mtime +7 -delete 简单但危险——-delete 不回收站,误配 -path 就完蛋
  • 推荐先 dry-run:find /backup -name "backup_*.tar.gz" -mtime +7 -print,确认后再加 -delete
  • 别用 ls | sort | head -n -3 类方案:文件名含空格或特殊字符时会崩,且 sort 默认按字典序,backup_20241201 会排在 backup_2024201 后面
  • 更稳做法:用 stat -c "%y %n" *.tar.gz | sort | head -n -3 | cut -d' ' -f4- 提取最老的几个文件名

远程备份到另一台机器,rsync 比 scp 强在哪

scp backup.tar.gz user@host:/backup/ 看似简单,但网络中断就全重传,大备份极不友好。

  • rsync -avz --partial --progress backup.tar.gz user@host:/backup/ 支持断点续传(--partial)
  • 加 --delete-after 可同步清理远端过期备份,但务必先测试,避免误删
  • 注意 rsync 默认不校验内容一致性,加 --checksum 会变慢,一般用 --size-only + 文件名时间戳组合判断更实用
  • 密钥登录必须配好,别在脚本里硬编码密码;用 ssh-agent 或 rsync --rsh="ssh -i /path/key"

真正的难点不在语法,而在于“恢复验证”——你写的脚本从没跑过恢复流程,那它就不是备份脚本,只是归档脚本。每周挑一个备份,手动 tar -xzf 到临时目录,diff -r 对比原路径,这个动作不能省。

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python中print函数的用法
python中print函数的用法

python中print函数的语法是“print(value1, value2, ..., sep=' ', end='\n', file=sys.stdout, flush=False)”。本专题为大家提供print相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.27

2500

5

python print用法与作用
python print用法与作用

本专题整合了python print的用法、作用、函数功能相关内容,阅读专题下面的文章了解更多详细教程。

2026.02.03

249

24

sort排序函数用法
sort排序函数用法

sort排序函数的用法:1、对列表进行排序,默认情况下,sort函数按升序排序,因此最终输出的结果是按从小到大的顺序排列的;2、对元组进行排序,默认情况下,sort函数按元素的大小进行排序,因此最终输出的结果是按从小到大的顺序排列的;3、对字典进行排序,由于字典是无序的,因此排序后的结果仍然是原来的字典,使用一个lambda表达式作为key参数的值,用于指定排序的依据。

2023.09.04

1118

7

数据库Delete用法
数据库Delete用法

数据库Delete用法:1、删除单条记录;2、删除多条记录;3、删除所有记录;4、删除特定条件的记录。更多关于数据库Delete的内容,大家可以访问下面的文章。

2023.11.13

2611

4

drop和delete的区别
drop和delete的区别

drop和delete的区别:1、功能与用途;2、操作对象;3、可逆性;4、空间释放;5、执行速度与效率;6、与其他命令的交互;7、影响的持久性;8、语法和执行;9、触发器与约束;10、事务处理。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.12.29

805

3

windows查看端口占用情况
windows查看端口占用情况

Windows端口可以认为是计算机与外界通讯交流的出入口。逻辑意义上的端口一般是指TCP/IP协议中的端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等等。怎么查看windows端口占用情况呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.26

3079

3

查看端口占用情况windows
查看端口占用情况windows

端口占用是指与端口关联的软件占用端口而使得其他应用程序无法使用这些端口,端口占用问题是计算机系统编程领域的一个常见问题,端口占用的根本原因可能是操作系统的一些错误,服务器也可能会出现端口占用问题。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.27

2638

6

windows照片无法显示
windows照片无法显示

当我们尝试打开一张图片时,可能会出现一个错误提示,提示说"Windows照片查看器无法显示此图片,因为计算机上的可用内存不足",本专题为大家提供windows照片无法显示相关的文章,帮助大家解决该问题。

2023.08.01

1448

3

windows查看端口被占用的情况
windows查看端口被占用的情况

windows查看端口被占用的情况的方法:1、使用Windows自带的资源监视器;2、使用命令提示符查看端口信息;3、使用任务管理器查看占用端口的进程。本专题为大家提供windows查看端口被占用的情况的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

2419

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.6万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.4万人学习