如何对终端历史记录进行智能备份

如何对终端历史记录进行智能备份

尝试对我的 zsh 终端历史记录(~/.zsh_history)实施智能备份。 bash 也是如此,没有区别,只是文件名为 .bash_history。

到目前为止,我决定创建一个私人 git 存储库,因为我的历史记录可能包含秘密等。我创建了一个 ansible 脚本(可以使用 bash 脚本完成),它创建每月目录,并基本上每天将 ~/.zsh_history 的内容复制到每月目录中,并以每日时间戳作为文件名。我已将该脚本放入每日 cron 作业中。

问题是有很多重复。我最初以为我可以在备份成功后删除历史文件的内容,但后来我意识到这意味着不需要递归搜索。现在我正在考虑创建一个功能,仅备份与前一天相比历史记录的更改。如果今天的历史记录是命令 (1, 2, 3),明天的历史记录是 (1, 2, 3, 4, 5),对于第二天的备份,我们只采用 (4, 5),而不是全部。有点像两组的交集(昨天的历史文件是一组,今天的是另一组(比包含昨天的组更大的组!)

解决这个问题的最佳方法是什么?我没有找到类似项目的其他示例,因此感谢您的帮助。

以下是历史文件中的几行供参考:

: 1659932134:0;git commit -m "First initial best commit"
: 1659932139:0;git push
: 1659932147:0;git push -u origin main
: 1659932151:0;git push
: 1660008827:0;cat ~/.zshrc
: 1660008832:0;cat ~/.zsh_history

例如,第二天该文件将如下所示:

: 1659932134:0;git commit -m "First initial best commit"
: 1659932139:0;git push
: 1659932147:0;git push -u origin main
: 1659932151:0;git push
: 1660008827:0;cat ~/.zshrc
: 1660008832:0;cat ~/.zsh_history
+++++++++ ( this is just me adding to show the difference)
: 1659932113:0;git add .gitignore
: 1659932117:0;git add backups/
: 1659932119:0;git add hist_backup.yml

答案1

关于

那么解决这个问题的最佳方法是什么

自从记录所有运行的命令(由管理员在生产服务器上运行)是一个很常见的要求,auditd可能是正确的工具。

关于

我没有找到类似项目的其他示例

由于时间戳,可能您要求能够搜索,看起来一种数据库比git。所以也许可以采用类似的方法在数据库中记录 bash 历史记录

关于

如何进行智能备份?

您还可以通过 来查看增量备份rsync

相关内容