配置.bashrc保存所有命令和输出

配置.bashrc保存所有命令和输出

对于一个新项目,我们正在设置一个将运行多个进程的 Linux 机器。为了更好地回溯或回滚配置,我们希望保留在终端上输入的所有命令的持久历史记录并通过 ssh以及将所有输出保存到 stdout/err 到日志文件。

如果我们使历史持久化,我们可以得到如下结果:

1  history
2  ls
3  ps
4  ll
5  echo "hi"
6  history

并将相应的输出保存到名为1.log2.log等的日志文件中。显然输出不仅应该在日志文件中,还应该显示出来。

以编程方式可视化我希望输入的每个命令都自动执行如下操作:

command > /log/$(len(history)).txt 2&>; echo /log/$(len(history-1)).txt

但在某种程度上我仍然可以实时看到发生的事情并与 CLI 等进行交互。

有什么方法可以像这样配置 bash,或者有任何其他方法可以在 Linux 中获得这种行为,以实现 SSH 会话和本地工作?

答案1

将终端上显示的所有内容打印出来通常的方法是使用 脚本命令。但是,此命令不处理 stderr。

其他方法 是使用流程替代& 重定向执行

exec &> >(tee -a "$log_file")

$log_file将包含脚本和任何子流程的输出,并且输出也将打印到屏幕上。

在哪里:

  • >(...)启动该进程...并返回代表其标准输入的文件。

  • exec &> ...将标准输出和标准错误重定向到...脚本的剩余部分。exec > ...仅用于 stdout。

  • tee -a将其标准输入附加到文件,并将其打印到屏幕上。

答案2

您可能需要研究一下auditd,这是一个专门设计用于执行此操作的守护进程。

或者,正如您所发现的,您可以使用 bash 历史记录,并增加HISTSIZE/HISTFILESIZE变量以使其保留每个命令。

編輯:参见https://serverfault.com/questions/470755/log-all-commands-run-by-admins-on-production-servers

相关内容